agent.schema.ts 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. import { z } from '@hono/zod-openapi';
  2. export const AgentSchema = z.object({
  3. id: z.number().int().positive().openapi({ description: '代理商ID' }),
  4. name: z.string().min(1, '代理商名称不能为空').max(255, '代理商名称最多255个字符').nullable().openapi({
  5. description: '代理商名称',
  6. example: '代理商A'
  7. }),
  8. username: z.string().min(1, '用户名不能为空').max(20, '用户名最多20个字符').openapi({
  9. description: '用户名',
  10. example: 'agent001'
  11. }),
  12. password: z.string().min(6, '密码至少6位').max(255, '密码最多255位').openapi({
  13. description: '密码',
  14. example: 'password123'
  15. }),
  16. phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号').nullable().optional().openapi({
  17. description: '手机号码',
  18. example: '13800138000'
  19. }),
  20. realname: z.string().max(20, '姓名最多20个字符').nullable().optional().openapi({
  21. description: '姓名',
  22. example: '李四'
  23. }),
  24. loginNum: z.number().int().nonnegative('登录次数必须为非负数').default(0).openapi({
  25. description: '登录次数',
  26. example: 0
  27. }),
  28. loginTime: z.number().int().nonnegative('登录时间必须为非负数').default(0).openapi({
  29. description: '登录时间',
  30. example: 0
  31. }),
  32. loginIp: z.string().max(15, 'IP地址最多15个字符').nullable().optional().openapi({
  33. description: '登录IP',
  34. example: '192.168.1.1'
  35. }),
  36. lastLoginTime: z.number().int().nonnegative('上次登录时间必须为非负数').default(0).openapi({
  37. description: '上次登录时间',
  38. example: 0
  39. }),
  40. lastLoginIp: z.string().max(15, 'IP地址最多15个字符').nullable().optional().openapi({
  41. description: '上次登录IP',
  42. example: '192.168.1.1'
  43. }),
  44. state: z.number().int().min(1).max(2).default(2).openapi({
  45. description: '状态 1启用 2禁用',
  46. example: 1
  47. }),
  48. createdAt: z.coerce.date().openapi({
  49. description: '创建时间',
  50. example: '2024-01-01T12:00:00Z'
  51. }),
  52. updatedAt: z.coerce.date().openapi({
  53. description: '更新时间',
  54. example: '2024-01-01T12:00:00Z'
  55. }),
  56. createdBy: z.number().int().positive().nullable().openapi({
  57. description: '创建用户ID',
  58. example: 1
  59. }),
  60. updatedBy: z.number().int().positive().nullable().openapi({
  61. description: '更新用户ID',
  62. example: 1
  63. })
  64. });
  65. export const CreateAgentDto = z.object({
  66. name: z.string().min(1, '代理商名称不能为空').max(255, '代理商名称最多255个字符').nullable().optional().openapi({
  67. description: '代理商名称',
  68. example: '代理商A'
  69. }),
  70. username: z.string().min(1, '用户名不能为空').max(20, '用户名最多20个字符').openapi({
  71. description: '用户名',
  72. example: 'agent001'
  73. }),
  74. password: z.string().min(6, '密码至少6位').max(255, '密码最多255位').openapi({
  75. description: '密码',
  76. example: 'password123'
  77. }),
  78. phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号').nullable().optional().openapi({
  79. description: '手机号码',
  80. example: '13800138000'
  81. }),
  82. realname: z.string().max(20, '姓名最多20个字符').nullable().optional().openapi({
  83. description: '姓名',
  84. example: '李四'
  85. }),
  86. state: z.number().int().min(1).max(2).default(2).openapi({
  87. description: '状态 1启用 2禁用',
  88. example: 1
  89. })
  90. });
  91. export const UpdateAgentDto = z.object({
  92. name: z.string().min(1, '代理商名称不能为空').max(255, '代理商名称最多255个字符').nullable().optional().openapi({
  93. description: '代理商名称',
  94. example: '代理商A'
  95. }),
  96. username: z.string().min(1, '用户名不能为空').max(20, '用户名最多20个字符').optional().openapi({
  97. description: '用户名',
  98. example: 'agent001'
  99. }),
  100. password: z.string().min(6, '密码至少6位').max(255, '密码最多255位').optional().openapi({
  101. description: '密码',
  102. example: 'password123'
  103. }),
  104. phone: z.string().regex(/^1[3-9]\d{9}$/, '请输入正确的手机号').nullable().optional().openapi({
  105. description: '手机号码',
  106. example: '13800138000'
  107. }),
  108. realname: z.string().max(20, '姓名最多20个字符').nullable().optional().openapi({
  109. description: '姓名',
  110. example: '李四'
  111. }),
  112. state: z.number().int().min(1).max(2).optional().openapi({
  113. description: '状态 1启用 2禁用',
  114. example: 1
  115. })
  116. });