feat(collection): 采集箱开发

This commit is contained in:
R524809
2026-09-04 17:32:28 +08:00
parent edf7939963
commit 87db74fb89
16 changed files with 452 additions and 50 deletions
+31
View File
@@ -1,5 +1,36 @@
import { z } from 'zod';
const uuid = z.uuid();
export const createCollectionItemRequestSchema = z.object({
title: z.string().trim().min(1).max(300).optional(),
note: z.string().trim().max(2_000).nullable().optional(),
}).strict();
export const updateCollectionItemRequestSchema = z.object({
note: z.string().trim().max(2_000).nullable(),
}).strict();
export const listCollectionItemsQuerySchema = z.object({
cursor: z.string().min(1).optional(), limit: z.coerce.number().int().min(1).max(100).default(20),
q: z.string().trim().min(1).max(300).optional(),
source_platform_code: z.enum(['OZON', '1688', 'TAOBAO', 'TMALL']).optional(),
listing_status: z.enum(['not_listed', 'partially_listed', 'listed']).optional(),
}).strict();
export const bulkDeleteCollectionItemsRequestSchema = z.object({ ids: z.array(uuid).min(1).max(100) }).strict();
export const clearCollectionItemsRequestSchema = z.object({ confirm: z.literal(true), expected_active_count: z.number().int().min(0) }).strict();
export const retryCollectionAssetsRequestSchema = z.object({ transfer_ids: z.array(uuid).min(1).max(100) }).strict();
export type CreateCollectionItemRequest = z.infer<typeof createCollectionItemRequestSchema>;
export type UpdateCollectionItemRequest = z.infer<typeof updateCollectionItemRequestSchema>;
export type ListCollectionItemsQuery = z.infer<typeof listCollectionItemsQuerySchema>;
export type CollectionItem = {
id: string; product_id: string; source: { kind: 'platform' | 'manual'; platform_code: string | null; url: string | null };
title: string | null; thumbnail: { asset_id: string | null; preview_url: string | null; status: string };
source_price: { min: string | null; max: string | null; currency_code: string | null };
variant_summary: { count: number; needs_review: boolean }; note: string | null;
collection_status: string; listing_summary: { status: 'not_listed' | 'partially_listed' | 'listed'; detail: string; last_error: null };
created_at: string; updated_at: string; revision: number;
};
/**
* 浏览器扩展与 API 共享的采集载荷最小契约。
* 领域字段会随采集模块实现逐步补全,不能在扩展侧绕过此契约直接构造 API 请求。