59 lines
1.5 KiB
TypeScript
59 lines
1.5 KiB
TypeScript
|
|
import { serverRequest } from "./serverConnection";
|
||
|
|
|
||
|
|
export interface EcommerceTemplateAsset {
|
||
|
|
fileName?: string;
|
||
|
|
extension?: string;
|
||
|
|
sizeBytes?: number;
|
||
|
|
assetIndex?: number;
|
||
|
|
ossKey?: string;
|
||
|
|
url?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface EcommerceTemplatePreview {
|
||
|
|
fileName?: string;
|
||
|
|
extension?: string;
|
||
|
|
sizeBytes?: number;
|
||
|
|
ossKey?: string;
|
||
|
|
url?: string;
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface EcommerceTemplateManifestItem {
|
||
|
|
id: string;
|
||
|
|
category?: string;
|
||
|
|
categorySlug?: string;
|
||
|
|
templateName?: string;
|
||
|
|
templateSlug?: string;
|
||
|
|
preview?: EcommerceTemplatePreview;
|
||
|
|
prompt?: string;
|
||
|
|
assets?: EcommerceTemplateAsset[];
|
||
|
|
}
|
||
|
|
|
||
|
|
export interface EcommerceTemplateListResult {
|
||
|
|
version?: number;
|
||
|
|
ossPrefix?: string;
|
||
|
|
generatedAt?: string;
|
||
|
|
templates: EcommerceTemplateManifestItem[];
|
||
|
|
total: number;
|
||
|
|
}
|
||
|
|
|
||
|
|
export async function listEcommerceTemplates(category?: string): Promise<EcommerceTemplateListResult> {
|
||
|
|
const search = new URLSearchParams();
|
||
|
|
if (category) search.set("category", category);
|
||
|
|
const suffix = search.toString();
|
||
|
|
|
||
|
|
const response = await serverRequest<EcommerceTemplateListResult>(
|
||
|
|
`ai/ecommerce/templates${suffix ? `?${suffix}` : ""}`,
|
||
|
|
{
|
||
|
|
method: "GET",
|
||
|
|
maxRetries: 1,
|
||
|
|
fallbackMessage: "Failed to load ecommerce templates",
|
||
|
|
},
|
||
|
|
);
|
||
|
|
|
||
|
|
return {
|
||
|
|
...response,
|
||
|
|
templates: Array.isArray(response.templates) ? response.templates : [],
|
||
|
|
total: Number.isFinite(response.total) ? response.total : Array.isArray(response.templates) ? response.templates.length : 0,
|
||
|
|
};
|
||
|
|
}
|