60 lines
1.9 KiB
TypeScript
60 lines
1.9 KiB
TypeScript
import { connection } from "next/server";
|
|
import { getCachedPublicGuide } from "@/lib/cache/public";
|
|
import {
|
|
generateOgImage,
|
|
ogImageContentType,
|
|
ogImageSize,
|
|
} from "@/lib/og-image";
|
|
|
|
export const alt = "Buzz Guide character guide";
|
|
export const size = ogImageSize;
|
|
export const contentType = ogImageContentType;
|
|
|
|
export default async function Image({
|
|
params,
|
|
}: {
|
|
params: Promise<{ character: string }>;
|
|
}) {
|
|
await connection();
|
|
const guide = await getCachedPublicGuide((await params).character);
|
|
if (!guide) return new Response("Not found", { status: 404 });
|
|
const recommendedWeapon = guide.weapons[0];
|
|
const recommendedArtifact = guide.artifactGroups.find(
|
|
(group) => group.rows.length > 0,
|
|
)?.rows[0];
|
|
return generateOgImage({
|
|
title: guide.name,
|
|
sub: guide.overview,
|
|
characterCard: true,
|
|
backgroundUrl: guide.character.nameCardImageUrl,
|
|
characterUrl: guide.character.splashImageUrl ?? guide.character.imageUrl,
|
|
recommendedWeapon: recommendedWeapon
|
|
? {
|
|
name: recommendedWeapon.weapon.name,
|
|
refinement: recommendedWeapon.refinement,
|
|
rarity: recommendedWeapon.weapon.rarity,
|
|
imageUrl: recommendedWeapon.weapon.imageUrl,
|
|
overallPercent: recommendedWeapon.overallPercent,
|
|
personalPercent: recommendedWeapon.personalPercent,
|
|
}
|
|
: null,
|
|
recommendedArtifact: recommendedArtifact
|
|
? {
|
|
first: {
|
|
name: recommendedArtifact.first.name,
|
|
rarity: recommendedArtifact.first.rarity,
|
|
imageUrl: recommendedArtifact.first.imageUrl,
|
|
},
|
|
second: recommendedArtifact.second
|
|
? {
|
|
name: recommendedArtifact.second.name,
|
|
rarity: recommendedArtifact.second.rarity,
|
|
imageUrl: recommendedArtifact.second.imageUrl,
|
|
}
|
|
: null,
|
|
percent: recommendedArtifact.percent,
|
|
}
|
|
: null,
|
|
});
|
|
}
|