61 lines
1.8 KiB
TypeScript
61 lines
1.8 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.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);
|
|
}
|
|
}
|