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.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); } }