fix: backfill missing PSD layer previews
This commit is contained in:
parent
e2698a7a49
commit
30b0d972e9
@ -36,6 +36,33 @@ function jsonError(status: number, error: string) {
|
||||
return NextResponse.json(payload, { status });
|
||||
}
|
||||
|
||||
async function repairTemplateLayerPreviewsIfNeeded(template: NonNullable<Awaited<ReturnType<typeof readAgentPsdTemplates>>[number]>) {
|
||||
const needsRepair = template.layers.some((layer) => !String(layer.previewUrl || "").trim());
|
||||
if (!needsRepair) {
|
||||
return template;
|
||||
}
|
||||
|
||||
try {
|
||||
const preparedAssets = await preparePsdTemplateRenderAssets({
|
||||
templateId: template.id,
|
||||
fileUrl: template.fileUrl,
|
||||
layers: template.layers,
|
||||
});
|
||||
|
||||
return {
|
||||
...template,
|
||||
layers: preparedAssets.layers,
|
||||
updatedAt: new Date().toISOString(),
|
||||
};
|
||||
} catch (error) {
|
||||
console.warn("[PSD Templates][Admin] failed to repair missing layer previews:", {
|
||||
templateId: template.id,
|
||||
error,
|
||||
});
|
||||
return template;
|
||||
}
|
||||
}
|
||||
|
||||
export async function GET(
|
||||
request: NextRequest,
|
||||
context: { params: Promise<{ id: string }> }
|
||||
@ -54,9 +81,18 @@ export async function GET(
|
||||
return jsonError(404, "未找到 PSD 模板");
|
||||
}
|
||||
|
||||
const repairedTemplate = await repairTemplateLayerPreviewsIfNeeded(template);
|
||||
if (repairedTemplate !== template) {
|
||||
await upsertSystemSetting({
|
||||
key: AGENT_PSD_TEMPLATES_KEY,
|
||||
value: templates.map((entry) => (entry.id === id ? repairedTemplate : entry)),
|
||||
updatedBy: session.user.id,
|
||||
});
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
template,
|
||||
template: repairedTemplate,
|
||||
} satisfies AgentPsdTemplateMutationResponse);
|
||||
} catch (error) {
|
||||
console.error("[PSD Templates][Admin] get failed:", error);
|
||||
|
||||
@ -48,6 +48,37 @@ function getDefaultTemplateName(fileName: string) {
|
||||
return fileName.replace(/\.[^.]+$/, "").trim() || "未命名 PSD 模板";
|
||||
}
|
||||
|
||||
async function repairTemplateLayerPreviewsIfNeeded(params: {
|
||||
template: AgentPsdTemplate;
|
||||
}) {
|
||||
const { template } = params;
|
||||
const needsRepair = template.layers.some((layer) => !String(layer.previewUrl || "").trim());
|
||||
|
||||
if (!needsRepair) {
|
||||
return template;
|
||||
}
|
||||
|
||||
try {
|
||||
const preparedAssets = await preparePsdTemplateRenderAssets({
|
||||
templateId: template.id,
|
||||
fileUrl: template.fileUrl,
|
||||
layers: template.layers,
|
||||
});
|
||||
|
||||
return {
|
||||
...template,
|
||||
layers: preparedAssets.layers,
|
||||
updatedAt: new Date().toISOString(),
|
||||
} satisfies AgentPsdTemplate;
|
||||
} catch (error) {
|
||||
console.warn("[PSD Templates][Admin] failed to repair missing layer previews:", {
|
||||
templateId: template.id,
|
||||
error,
|
||||
});
|
||||
return template;
|
||||
}
|
||||
}
|
||||
|
||||
export async function GET() {
|
||||
const session = await requireAgentWorkflowAdmin().catch(() => null);
|
||||
if (!session?.user?.id) {
|
||||
@ -56,9 +87,28 @@ export async function GET() {
|
||||
|
||||
try {
|
||||
const templates = await readAgentPsdTemplates();
|
||||
const repairedTemplates = [] as AgentPsdTemplate[];
|
||||
let hasRepairedTemplate = false;
|
||||
|
||||
for (const template of templates) {
|
||||
const repairedTemplate = await repairTemplateLayerPreviewsIfNeeded({ template });
|
||||
repairedTemplates.push(repairedTemplate);
|
||||
if (repairedTemplate !== template) {
|
||||
hasRepairedTemplate = true;
|
||||
}
|
||||
}
|
||||
|
||||
if (hasRepairedTemplate) {
|
||||
await upsertSystemSetting({
|
||||
key: AGENT_PSD_TEMPLATES_KEY,
|
||||
value: repairedTemplates,
|
||||
updatedBy: session.user.id,
|
||||
});
|
||||
}
|
||||
|
||||
return NextResponse.json({
|
||||
success: true,
|
||||
templates,
|
||||
templates: hasRepairedTemplate ? repairedTemplates : templates,
|
||||
} satisfies AgentPsdTemplateListResponse);
|
||||
} catch (error) {
|
||||
console.error("[PSD Templates][Admin] list failed:", error);
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user