feat : i have no idea what to commit
This commit is contained in:
@@ -1,99 +1,59 @@
|
||||
import { connection } from "next/server";
|
||||
import { getCachedPublicGuide } from "@/lib/cache/public";
|
||||
import { publicSections } from "@/components/public/structured-guide";
|
||||
import {
|
||||
generateOgImage,
|
||||
ogImageContentType,
|
||||
ogImageSize,
|
||||
} from "@/lib/og-image";
|
||||
|
||||
export const alt = "Buzz Guide section";
|
||||
export const alt = "Buzz Guide character guide";
|
||||
export const size = ogImageSize;
|
||||
export const contentType = ogImageContentType;
|
||||
|
||||
function sectionTitle(slug: string, fallback: string): string {
|
||||
if (slug === "weapon") return "อาวุธแนะนำ";
|
||||
if (slug === "artifact") return "อาร์ติแฟกต์และค่าสถานะ";
|
||||
if (slug === "constellations") return "กลุ่มดาว";
|
||||
if (slug === "team") return "ทีมแนะนำ";
|
||||
return fallback;
|
||||
}
|
||||
|
||||
function sectionContent(
|
||||
guide: Awaited<ReturnType<typeof getCachedPublicGuide>>,
|
||||
slug: string,
|
||||
) {
|
||||
if (!guide) return { description: "คู่มือเกนชินอิมแพกต์", highlights: [] };
|
||||
|
||||
if (slug === "weapon") {
|
||||
return {
|
||||
description: "อาวุธที่เหมาะกับตัวละคร พร้อมอันดับและเปอร์เซ็นต์การใช้งาน",
|
||||
highlights: guide.weapons.slice(0, 3).map((item, index) => {
|
||||
const percent = item.overallPercent ? ` · ${item.overallPercent}%` : "";
|
||||
return `${index + 1}. ${item.weapon.name}${percent}`;
|
||||
}),
|
||||
};
|
||||
}
|
||||
|
||||
if (slug === "artifact") {
|
||||
const artifactHighlights = guide.artifactGroups.flatMap((group) =>
|
||||
group.rows.slice(0, 2).map((row) =>
|
||||
`${group.name}: ${row.first.name}${row.second ? ` + ${row.second.name}` : ""}`,
|
||||
),
|
||||
);
|
||||
const targetHighlights = guide.artifactProfile?.targets
|
||||
.slice(0, 2)
|
||||
.map((target) => `${target.stat}: ${target.value}`) ?? [];
|
||||
return {
|
||||
description: "เซ็ตอาร์ติแฟกต์ ค่าสถานะหลัก และเป้าหมายที่ควรจัด",
|
||||
highlights: [...artifactHighlights, ...targetHighlights],
|
||||
};
|
||||
}
|
||||
|
||||
if (slug === "team") {
|
||||
return {
|
||||
description: "ทีมแนะนำพร้อมสมาชิกและเวลาหมุนคอมโบ",
|
||||
highlights: guide.teams
|
||||
.slice(0, 3)
|
||||
.map((team) => `${team.title} · ${team.members.length} ตัวละคร`),
|
||||
};
|
||||
}
|
||||
|
||||
if (slug === "constellations") {
|
||||
return {
|
||||
description: "รายละเอียดกลุ่มดาวและพลังที่เพิ่มขึ้นในแต่ละระดับ",
|
||||
highlights: guide.constellations
|
||||
.slice(0, 3)
|
||||
.map((constellation) => `C${constellation.level} ${constellation.name}`),
|
||||
};
|
||||
}
|
||||
|
||||
const extra = guide.extras.find((item) => item.slug === slug);
|
||||
return {
|
||||
description: extra?.title ?? "รายละเอียดเพิ่มเติมของคู่มือ",
|
||||
highlights: extra?.rows.slice(0, 3).map((row) => row.heading || row.body) ?? [],
|
||||
};
|
||||
}
|
||||
|
||||
export default async function Image({
|
||||
params,
|
||||
}: {
|
||||
params: Promise<{ character: string; page: string }>;
|
||||
params: Promise<{ character: string }>;
|
||||
}) {
|
||||
await connection();
|
||||
const { character, page } = await params;
|
||||
const guide = await getCachedPublicGuide(character);
|
||||
const section = guide
|
||||
? publicSections(guide).find((item) => item.slug === page)
|
||||
: null;
|
||||
if (!guide || !section) return new Response("Not found", { status: 404 });
|
||||
|
||||
const content = sectionContent(guide, page);
|
||||
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: `${sectionTitle(page, section.title)} · ${content.highlights.join(" · ") || content.description}`,
|
||||
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,
|
||||
});
|
||||
}
|
||||
|
||||
@@ -9,9 +9,9 @@ type Params = Promise<{ character: string; page: string }>;
|
||||
|
||||
export async function generateMetadata({ params }: { params: Params }): Promise<Metadata> {
|
||||
await connection();
|
||||
const { character, page } = await params;
|
||||
const { character } = await params;
|
||||
const guide = await getCachedPublicGuide(character);
|
||||
return guide ? { title: `${page} - ${guide.name} - คู่มือ`, description: guide.overview } : { title: "ไม่พบไกด์" };
|
||||
return guide ? { title: `${guide.name}`, description: guide.overview } : { title: "ไม่พบไกด์" };
|
||||
}
|
||||
|
||||
export default async function GuideSectionPage({ params }: { params: Params }) {
|
||||
|
||||
@@ -15,7 +15,7 @@ export async function generateMetadata({
|
||||
await connection();
|
||||
const guide = await getCachedPublicGuide((await params).character);
|
||||
return guide
|
||||
? { title: `${guide.name} - คู่มือ`, description: guide.overview }
|
||||
? { title: `${guide.name}`, description: guide.overview }
|
||||
: { title: "ไม่พบไกด์" };
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user