返回 AiToEarn
platform.vo.ts
1 import { WorkStatus } from '@yikart/common'
2 import { z } from 'zod'
3
4 // ---------------------------------------------------------------------------
5 // WorkLinkInfo
6 // ---------------------------------------------------------------------------
7
8 export const WorkLinkInfoSchema = z.object({
9 dataId: z.string().describe('数据 ID'),
10 uniqueId: z.string().describe('唯一标识'),
11 type: z.string().describe('类型'),
12 videoType: z.enum(['short', 'long']).optional().describe('视频类型'),
13 resolvedUrl: z.string().optional().describe('解析后的 URL'),
14 originalWorkLink: z.string().optional().describe('原始作品链接'),
15 workStatus: z.literal(WorkStatus.LINK_ERROR).optional().describe('作品状态'),
16 })
17 export interface WorkLinkInfo extends z.infer<typeof WorkLinkInfoSchema> {}
18
19 // ---------------------------------------------------------------------------
20 // WorkDetailInfo
21 // ---------------------------------------------------------------------------
22
23 export const WorkDetailInfoSchema = z.object({
24 dataId: z.string().describe('数据 ID'),
25 title: z.string().optional().describe('标题'),
26 desc: z.string().optional().describe('描述'),
27 topics: z.array(z.string()).optional().describe('话题列表'),
28 coverUrl: z.string().optional().describe('封面 URL'),
29 videoUrl: z.string().optional().describe('视频 URL'),
30 imgUrlList: z.array(z.string()).optional().describe('图片 URL 列表'),
31 publishTime: z.coerce.date().optional().describe('发布时间'),
32 type: z.string().describe('类型'),
33 videoType: z.enum(['short', 'long']).optional().describe('视频类型'),
34 duration: z.number().optional().describe('时长(秒)'),
35 rawData: z.record(z.string(), z.unknown()).optional().describe('原始数据'),
36 })
37 export interface WorkDetailInfo extends z.infer<typeof WorkDetailInfoSchema> {}
38
38 lines TYPESCRIPT