file.schema.ts 2.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. import { z } from '@hono/zod-openapi';
  2. import { UserSchema } from '../users/user.schema';
  3. export const FileSchema = z.object({
  4. id: z.number().int().positive().openapi({
  5. description: '文件ID',
  6. example: 1
  7. }),
  8. name: z.string().max(255).openapi({
  9. description: '文件名称',
  10. example: '项目计划书.pdf'
  11. }),
  12. type: z.string().max(50).nullable().openapi({
  13. description: '文件类型',
  14. example: 'application/pdf'
  15. }),
  16. size: z.number().int().positive().nullable().openapi({
  17. description: '文件大小,单位字节',
  18. example: 102400
  19. }),
  20. path: z.string().max(512).openapi({
  21. description: '文件存储路径',
  22. example: '/uploads/documents/2023/project-plan.pdf'
  23. }),
  24. fullUrl: z.promise(z.url()).openapi({
  25. description: '完整文件访问URL',
  26. example: 'https://minio.example.com/d8dai/uploads/documents/2023/project-plan.pdf'
  27. }),
  28. description: z.string().nullable().openapi({
  29. description: '文件描述',
  30. example: '2023年度项目计划书'
  31. }),
  32. uploadUserId: z.number().int().positive().openapi({
  33. description: '上传用户ID',
  34. example: 1
  35. }),
  36. uploadUser: UserSchema,
  37. uploadTime: z.date().openapi({
  38. description: '上传时间',
  39. example: '2023-01-15T10:30:00Z'
  40. }),
  41. lastUpdated: z.date().nullable().openapi({
  42. description: '最后更新时间',
  43. example: '2023-01-16T14:20:00Z'
  44. }),
  45. createdAt: z.date().openapi({
  46. description: '创建时间',
  47. example: '2023-01-15T10:30:00Z'
  48. }),
  49. updatedAt: z.date().openapi({
  50. description: '更新时间',
  51. example: '2023-01-16T14:20:00Z'
  52. })
  53. });
  54. export const CreateFileDto = z.object({
  55. name: z.string().max(255).openapi({
  56. description: '文件名称',
  57. example: '项目计划书.pdf'
  58. }),
  59. type: z.string().max(50).nullable().optional().openapi({
  60. description: '文件类型',
  61. example: 'application/pdf'
  62. }),
  63. size: z.coerce.number().int().positive().nullable().optional().openapi({
  64. description: '文件大小,单位字节',
  65. example: 102400
  66. }),
  67. path: z.string().max(512).openapi({
  68. description: '文件存储路径',
  69. example: '/uploads/documents/2023/project-plan.pdf'
  70. }),
  71. description: z.string().nullable().optional().openapi({
  72. description: '文件描述',
  73. example: '2023年度项目计划书'
  74. }),
  75. lastUpdated: z.coerce.date().nullable().optional().openapi({
  76. description: '最后更新时间',
  77. example: '2023-01-16T14:20:00Z'
  78. })
  79. });
  80. export const UpdateFileDto = z.object({
  81. name: z.string().max(255).optional().openapi({
  82. description: '文件名称',
  83. example: '项目计划书_v2.pdf'
  84. }),
  85. description: z.string().nullable().optional().openapi({
  86. description: '文件描述',
  87. example: '2023年度项目计划书(修订版)'
  88. })
  89. });
  90. export type FileType = z.infer<typeof FileSchema>