ai-chatbot/lib/agents/psd-template-settings.ts
2026-06-01 17:53:31 +08:00

62 lines
1.9 KiB
TypeScript

import "server-only";
import { getDefaultStorageConfig, getSystemSetting } from "@/lib/db/queries";
import {
AGENT_PSD_TEMPLATES_KEY,
isAgentPsdImageLayerSlot,
parseAgentPsdTemplates,
type AgentPsdTemplate,
} from "@/lib/agents/psd-template-config";
import { deleteAgentPsdLocalCache } from "@/lib/agents/psd-local-cache";
export async function readAgentPsdTemplates() {
const setting = await getSystemSetting({ key: AGENT_PSD_TEMPLATES_KEY });
return parseAgentPsdTemplates(setting?.value);
}
export async function tryDeleteAgentPsdTemplateAssets(template: AgentPsdTemplate) {
await deleteAgentPsdLocalCache({
templateId: template.id,
fileName: template.fileName,
}).catch(() => undefined);
const filePaths = Array.from(
new Set(
[
template.filePath,
template.previewPath,
template.renderBasePath,
...(template.renderSegments || []).map((segment) => segment.path),
...template.layers.map((layer) => layer.previewPath),
...template.layers
.filter(isAgentPsdImageLayerSlot)
.map((layer) => layer.maskPath),
].filter((value): value is string => Boolean(String(value || "").trim()))
)
);
if (filePaths.length === 0) return;
try {
const storageConfig = await getDefaultStorageConfig().catch(() => undefined);
if (!storageConfig || storageConfig.type !== "s3") return;
const { deleteS3ObjectByPath, toDbS3UploadConfig } = await import("@/lib/storage/service");
const uploadConfig = toDbS3UploadConfig(storageConfig);
if (!uploadConfig) return;
await Promise.all(
filePaths.map((filePath) =>
deleteS3ObjectByPath(filePath, uploadConfig).catch((error) => {
console.warn("[PSD Template] Failed to delete asset:", {
filePath,
error,
});
})
)
);
} catch (error) {
console.warn("[PSD Template] Failed to clean template assets:", error);
}
}