Files
omniai-ds-code-package/src/features/ecommerce/ecommerceGenerationPersistence.ts
T

71 lines
2.4 KiB
TypeScript
Raw Normal View History

import {
buildGenerationOssScope,
deleteGenerationRecordByClientId,
saveGenerationRecord,
type GenerationRecordAsset,
type SaveGenerationRecordInput,
} from "../../api/generationRecordClient";
export const ecommerceOssScopes = {
productSource: buildGenerationOssScope(["ecommerce", "source", "product"]),
cloneResult: (mode: string) => buildGenerationOssScope(["ecommerce", "result", mode]),
videoSource: buildGenerationOssScope(["ecommerce", "short-video", "source"]),
videoHistory: buildGenerationOssScope(["ecommerce", "short-video", "history"]),
};
export interface EcommerceUnifiedRecordInput {
clientRecordId: string;
title: string;
mode: string;
prompt?: string;
status?: SaveGenerationRecordInput["status"];
sourceImages?: Array<{ url: string; ossKey?: string | null; label?: string }>;
results?: Array<{ url: string; label?: string; mediaType?: "image" | "video" | string; taskId?: string | null }>;
taskIds?: string[];
config?: Record<string, unknown>;
result?: Record<string, unknown>;
metadata?: Record<string, unknown>;
createdAt?: string;
}
export function saveUnifiedEcommerceGenerationRecord(input: EcommerceUnifiedRecordInput): Promise<{ source: "server" | "local"; id: string }> {
const assets: GenerationRecordAsset[] = [
...(input.sourceImages || []).map((item): GenerationRecordAsset => ({
role: "source",
mediaType: "image",
url: item.url,
ossKey: item.ossKey,
label: item.label,
scope: ecommerceOssScopes.productSource,
})),
...(input.results || []).map((item): GenerationRecordAsset => ({
role: "result",
mediaType: item.mediaType || "image",
url: item.url,
label: item.label,
taskId: item.taskId,
scope: item.mediaType === "video" ? ecommerceOssScopes.videoHistory : ecommerceOssScopes.cloneResult(input.mode),
})),
].filter((asset) => Boolean(asset.url));
return saveGenerationRecord({
clientRecordId: input.clientRecordId,
tool: "ecommerce",
mode: input.mode,
title: input.title,
status: input.status || "completed",
prompt: input.prompt,
taskIds: input.taskIds,
assets,
config: input.config,
result: input.result,
metadata: input.metadata,
createdAt: input.createdAt,
updatedAt: new Date().toISOString(),
});
}
export async function deleteEcommerceGenerationRecord(clientRecordId: string): Promise<void> {
await deleteGenerationRecordByClientId(clientRecordId);
}