fix(catalog): use avatar icons and repair exports
CI / Verify (push) Successful in 1m6s
CI / Build immutable images and deploy (push) Successful in 5m43s

This commit is contained in:
2026-08-29 19:15:23 +00:00 Unverified
parent 17214a3625
commit 1ec145a22e
6 changed files with 107 additions and 37 deletions
+10 -5
View File
@@ -9,7 +9,11 @@ import {
catalogVersions,
catalogWeapons,
} from "@/db/schema";
import { characterDetailSchema, constellationSnapshot } from "@/lib/catalog/lunaris";
import {
avatarIconName,
characterDetailSchema,
constellationSnapshot,
} from "@/lib/catalog/lunaris";
import { getMediaStorage } from "@/lib/media/storage";
const VERSION_URL = "https://api.lunaris.moe/data/version.json";
@@ -21,7 +25,7 @@ const versionSchema = z.object({
});
const characterSchema = z.record(z.string(), z.object({
enName: z.string(),
GachaImg: z.string(),
CardImg: z.string(),
element: z.string().optional(),
qualityType: z.string().optional(),
weaponType: z.string().optional(),
@@ -120,14 +124,15 @@ export async function processCatalogSyncJob(jobId: string): Promise<void> {
const artifactData = artifactSchema.parse(artifactsRaw);
let characters = await mapConcurrent(
Object.entries(characterData).filter(([, value]) => value.enName && value.enName !== "???" && value.GachaImg),
Object.entries(characterData).filter(([, value]) => value.enName && value.enName !== "???" && value.CardImg),
async ([key, value]) => {
const detailRaw = await getOptionalJson(`${API_ROOT}/${version}/en/char/${encodeURIComponent(key)}.json`);
const detail = detailRaw ? characterDetailSchema.parse(detailRaw) : null;
const avatarIcon = webpName(avatarIconName(value.CardImg));
return {
version, key, name: value.enName, element: value.element ?? null, rarity: rarity(value.qualityType), weaponType: value.weaponType ?? null,
imageKey: `catalog/${version}/characters/${webpName(value.GachaImg)}`,
sourceImage: `${API_ROOT}/assets/gachaimg/${encodeURIComponent(webpName(value.GachaImg))}`,
imageKey: `catalog/${version}/characters/${avatarIcon}`,
sourceImage: `${API_ROOT}/assets/avataricon/${encodeURIComponent(avatarIcon)}`,
constellations: detail ? constellationSnapshot(detail, (icon) => `catalog/${version}/constellations/${webpName(icon)}`) : [],
};
},