file.schema.mt.ts 2.8 KB

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