import http from '../request' import type { DesignDataV1, DesignItem } from '../../types' import { getProductIconImg } from '../productConfig' type ServerEntry = { productId: string; productName: string; unitPrice: number; count: number; designData?: DesignDataV1 } type ServerList = { id: string; title: string; items: ServerEntry[]; status: 'DRAFT' | 'SUBMITTED' | 'PROCESSING' | 'DONE'; orderId?: string; createdAt: string } const statusToClient = (item: ServerList): DesignItem['status'] => { if (item.orderId || item.status === 'DONE') return 'ordered' if (item.status === 'PROCESSING') return 'processing' if (item.status === 'DRAFT') return 'undesigned' return 'designing' } const statusToServer = (status: DesignItem['status']) => status === 'undesigned' ? 'DRAFT' : status === 'designing' ? 'SUBMITTED' : status === 'processing' ? 'PROCESSING' : 'DONE' const toClient = (list: ServerList): DesignItem => { const item = list.items[0] return { id: list.id, productId: item.productId, productName: item.productName, productIcon: getProductIconImg({ id: item.productId }), unitPrice: Number(item.unitPrice), count: item.count, status: statusToClient(list), designData: item.designData, orderId: list.orderId, createdAt: list.createdAt, } } export async function fetchDesignList(): Promise { const rows = await http.get('/api/design-list') return rows.filter(row => row.items?.length > 0).map(toClient) } export async function fetchDesign(id: string): Promise { return toClient(await http.get(`/api/design-list/${id}`)) } export async function createDesign(item: Omit): Promise { return toClient(await http.post('/api/design-list', { title: item.productName, items: [{ productId: item.productId, productName: item.productName, unitPrice: item.unitPrice, count: item.count, designData: item.designData }] })) } export async function updateDesign(id: string, patch: Partial): Promise { const current = await fetchDesign(id) const merged = { ...current, ...patch } const data: Record = {} if (patch.designData !== undefined || patch.productId !== undefined || patch.productName !== undefined || patch.unitPrice !== undefined || patch.count !== undefined) { data.items = [{ productId: merged.productId, productName: merged.productName, unitPrice: merged.unitPrice, count: merged.count, designData: merged.designData }] } if (patch.productName !== undefined) data.title = patch.productName if (patch.status !== undefined) data.status = statusToServer(patch.status) return toClient(await http.patch(`/api/design-list/${id}`, data)) } export async function deleteDesign(id: string): Promise { await http.del(`/api/design-list/${id}`) } export async function deleteDesigns(ids: string[]): Promise { await http.post('/api/design-list/batch-delete', { ids }) }