| 1 | import { createZodDto, UserType } from '@yikart/common' |
| 2 | import { z } from 'zod' |
| 3 | |
| 4 | // 图片生成请求 |
| 5 | const imageGenerationSchema = z.object({ |
| 6 | prompt: z.string().min(1).max(4000).describe('图片描述提示'), |
| 7 | model: z.string().describe('图片生成模型'), |
| 8 | n: z.number().int().min(1).max(10).optional().describe('生成图片数量'), |
| 9 | quality: z.string().optional().describe('图片质量'), |
| 10 | response_format: z.enum(['url', 'b64_json']).optional().describe('返回格式'), |
| 11 | size: z.string().optional().describe('图片尺寸'), |
| 12 | style: z.string().optional().describe('图片风格'), |
| 13 | user: z.string().optional().describe('用户标识符'), |
| 14 | }) |
| 15 | |
| 16 | export class ImageGenerationDto extends createZodDto(imageGenerationSchema) {} |
| 17 | |
| 18 | // 图片编辑请求 |
| 19 | const imageEditSchema = z.object({ |
| 20 | model: z.string().describe('图片编辑模型'), |
| 21 | image: z.string().or(z.string().array()).describe('原始图片'), |
| 22 | prompt: z.string().min(1).max(4000).describe('编辑描述'), |
| 23 | mask: z.string().optional().describe('遮罩图片'), |
| 24 | n: z.int().min(1).max(1).optional().describe('生成图片数量'), |
| 25 | size: z.string().optional().describe('图片尺寸'), |
| 26 | response_format: z.enum(['url', 'b64_json']).optional().describe('返回格式'), |
| 27 | user: z.string().optional().describe('用户标识符'), |
| 28 | }) |
| 29 | |
| 30 | export class ImageEditDto extends createZodDto(imageEditSchema) {} |
| 31 | |
| 32 | // 用户图片生成请求 |
| 33 | const userImageGenerationSchema = z.object({ |
| 34 | userId: z.string(), |
| 35 | userType: z.enum(UserType), |
| 36 | ...imageGenerationSchema.shape, |
| 37 | }) |
| 38 | |
| 39 | export class UserImageGenerationDto extends createZodDto(userImageGenerationSchema) {} |
| 40 | |
| 41 | // 用户图片编辑请求 |
| 42 | const userImageEditSchema = z.object({ |
| 43 | userId: z.string(), |
| 44 | userType: z.enum(UserType), |
| 45 | ...imageEditSchema.shape, |
| 46 | }) |
| 47 | |
| 48 | export class UserImageEditDto extends createZodDto(userImageEditSchema) {} |
| 49 | |
| 50 | // 图片生成模型查询DTO |
| 51 | const imageGenerationModelsQuerySchema = z.object({ |
| 52 | userId: z.string().optional().describe('用户ID'), |
| 53 | userType: z.enum(UserType).optional().describe('用户类型'), |
| 54 | }) |
| 55 | |
| 56 | export class ImageGenerationModelsQueryDto extends createZodDto(imageGenerationModelsQuerySchema) {} |
| 57 | |
| 58 | // 图片编辑模型查询DTO |
| 59 | const imageEditModelsQuerySchema = z.object({ |
| 60 | userId: z.string().optional().describe('用户ID'), |
| 61 | userType: z.enum(UserType).optional().describe('用户类型'), |
| 62 | }) |
| 63 | |
| 64 | export class ImageEditModelsQueryDto extends createZodDto(imageEditModelsQuerySchema) {} |
| 65 | |
| 66 | // Gemini 图片生成请求 |
| 67 | const geminiImageGenerationSchema = z.object({ |
| 68 | prompt: z.string().min(1).max(4000).describe('图片描述提示'), |
| 69 | imageUrls: z.array(z.string()).optional().describe('参考图片 URL 列表'), |
| 70 | imageSize: z.enum(['1K', '2K', '4K']).optional().describe('图片尺寸'), |
| 71 | aspectRatio: z.enum(['1:1', '2:3', '3:2', '3:4', '4:3', '4:5', '5:4', '9:16', '16:9', '21:9']).optional().describe('图片宽高比'), |
| 72 | model: z.enum(['gemini-3.1-flash-image-preview', 'gemini-3-pro-image-preview']).optional().describe('Gemini 图片模型'), |
| 73 | }) |
| 74 | |
| 75 | export class GeminiImageGenerationDto extends createZodDto(geminiImageGenerationSchema) {} |
| 76 | |
| 77 | // 用户 Gemini 图片生成请求 |
| 78 | const userGeminiImageGenerationSchema = z.object({ |
| 79 | userId: z.string(), |
| 80 | userType: z.enum(UserType), |
| 81 | ...geminiImageGenerationSchema.shape, |
| 82 | }) |
| 83 | |
| 84 | export class UserGeminiImageGenerationDto extends createZodDto(userGeminiImageGenerationSchema) {} |
| 85 |