返回 AiToEarn
upload-asset.dto.ts
根目录 / project / aitoearn-backend / libs / assets / src / dto / upload-asset.dto.ts
1 import { createZodDto, PaginationDtoSchema } from '@yikart/common'
2 import { AssetType } from '@yikart/mongodb'
3 import { z } from 'zod'
4
5 /** 图片元数据 Schema */
6 export const ImageMetadataSchema = z.object({
7 width: z.number().positive(),
8 height: z.number().positive(),
9 })
10
11 /** 视频元数据 Schema */
12 export const VideoMetadataSchema = z.object({
13 width: z.number().positive().optional(),
14 height: z.number().positive().optional(),
15 duration: z.number().positive().optional(), // seconds
16 cover: z.string().optional(), // 封面图 path
17 bitrate: z.number().positive().optional(), // bps
18 frameRate: z.number().positive().optional(), // fps
19 })
20
21 /** 音频元数据 Schema */
22 export const AudioMetadataSchema = z.object({
23 duration: z.number().positive(), // seconds
24 bitrate: z.number().positive().optional(), // bps
25 sampleRate: z.number().positive().optional(), // Hz
26 channels: z.number().positive().optional(),
27 })
28
29 /** Asset 元数据联合 Schema */
30 export const AssetMetadataSchema = z.union([
31 ImageMetadataSchema,
32 VideoMetadataSchema,
33 AudioMetadataSchema,
34 ])
35
36 export const UploadAssetDtoSchema = z.object({
37 type: z.enum(AssetType),
38 mimeType: z.string(),
39 size: z.number().positive().optional(),
40 filename: z.string().optional(),
41 metadata: AssetMetadataSchema.optional(),
42 expiresInSeconds: z.number().positive().optional(),
43 })
44 export class UploadAssetDto extends createZodDto(UploadAssetDtoSchema, 'UploadAssetDto') {}
45
46 export const ConfirmAssetDtoSchema = z.object({
47 assetId: z.string(),
48 size: z.number().positive().optional(),
49 metadata: AssetMetadataSchema.optional(),
50 })
51 export class ConfirmAssetDto extends createZodDto(ConfirmAssetDtoSchema, 'ConfirmAssetDto') {}
52
53 export const ListAssetsDtoSchema = PaginationDtoSchema.extend({
54 type: z.enum(AssetType).optional(),
55 })
56 export class ListAssetsDto extends createZodDto(ListAssetsDtoSchema, 'ListAssetsDto') {}
57
58 export const UploadFromUrlDtoSchema = z.object({
59 url: z.url(),
60 type: z.enum(AssetType),
61 filename: z.string().optional(),
62 metadata: AssetMetadataSchema.optional(),
63 })
64 export class UploadFromUrlDto extends createZodDto(UploadFromUrlDtoSchema, 'UploadFromUrlDto') {}
65
66 export const UploadFromBufferDtoSchema = z.object({
67 type: z.enum(AssetType),
68 mimeType: z.string(),
69 filename: z.string().optional(),
70 metadata: AssetMetadataSchema.optional(),
71 })
72 export class UploadFromBufferDto extends createZodDto(UploadFromBufferDtoSchema, 'UploadFromBufferDto') {}
73
73 lines TYPESCRIPT