71 lines
2.4 KiB
TypeScript
71 lines
2.4 KiB
TypeScript
|
|
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);
|
||
|
|
}
|