feat(collection): 采集箱开发
This commit is contained in:
@@ -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 请求。
|
||||
|
||||
Reference in New Issue
Block a user