Your Name 17dcfcd55d
Some checks failed
Lint / build (20) (push) Has been cancelled
Playwright Tests / test (push) Has been cancelled
feat: add PSD template font rendering workflow
2026-03-27 11:01:13 +08:00

73 lines
2.1 KiB
TypeScript

import { NextRequest, NextResponse } from "next/server";
import { upsertSystemSetting } from "@/lib/db/queries";
import { requireAgentWorkflowAdmin } from "@/lib/middleware/admin";
import {
AGENT_PSD_FONTS_KEY,
type AgentPsdFontMutationResponse,
} from "@/lib/agents/psd-font-config";
import { isAgentPsdTextLayerSlot } from "@/lib/agents/psd-template-config";
import {
readAgentPsdFonts,
tryDeleteAgentPsdFontAssets,
} from "@/lib/agents/psd-font-settings";
import { readAgentPsdTemplates } from "@/lib/agents/psd-template-settings";
export const runtime = "nodejs";
function jsonError(status: number, error: string) {
const payload: AgentPsdFontMutationResponse = {
success: false,
error,
};
return NextResponse.json(payload, { status });
}
export async function DELETE(
request: NextRequest,
context: { params: Promise<{ id: string }> }
) {
const session = await requireAgentWorkflowAdmin().catch(() => null);
if (!session?.user?.id) {
return jsonError(401, "未登录");
}
try {
const { id } = await context.params;
const fonts = await readAgentPsdFonts();
const font = fonts.find((entry) => entry.id === id);
if (!font) {
return jsonError(404, "字体不存在");
}
const templates = await readAgentPsdTemplates();
const blockingTemplate = templates.find((template) =>
template.layers.some(
(layer) =>
isAgentPsdTextLayerSlot(layer) &&
layer.fontId === font.id &&
layer.isEditable
)
);
if (blockingTemplate) {
return jsonError(400, `字体仍被模板“${blockingTemplate.name}”使用,请先解除关联`);
}
await upsertSystemSetting({
key: AGENT_PSD_FONTS_KEY,
value: fonts.filter((entry) => entry.id !== id),
updatedBy: session.user.id,
});
await tryDeleteAgentPsdFontAssets(font);
return NextResponse.json({
success: true,
font,
} satisfies AgentPsdFontMutationResponse);
} catch (error) {
console.error("[PSD Fonts][Admin] delete failed:", error);
return jsonError(502, "字体删除失败");
}
}