|
|
@@ -9,34 +9,32 @@ export const SilverTalentSchema = z.object({
|
|
|
nickname: z.string().max(50).nullable().openapi({ description: '昵称', example: '张老师' }),
|
|
|
organization: z.string().max(255).nullable().openapi({ description: '所属机构', example: '退休教师' }),
|
|
|
age: z.number().int().min(50).max(100).openapi({ description: '年龄', example: 65 }),
|
|
|
- gender: z.enum(['MALE', 'FEMALE', 'OTHER']).openapi({ description: '性别', example: 'MALE' }),
|
|
|
+ gender: z.number().int().min(1).max(3).openapi({ description: '性别:1-男,2-女,3-其他', example: 1 }),
|
|
|
phone: z.string().max(20).openapi({ description: '联系电话', example: '13800138000' }),
|
|
|
email: z.string().max(255).email().nullable().openapi({ description: '邮箱', example: 'example@email.com' }),
|
|
|
- avatarUrl: z.string().max(500).url().nullable().openapi({ description: '头像URL', example: 'https://example.com/avatar.jpg' }),
|
|
|
+ avatarUrl: z.string().url().nullable().optional().openapi({ description: '头像URL', example: 'https://example.com/avatar.jpg' }),
|
|
|
personalIntro: z.string().max(1000).nullable().openapi({ description: '个人简介', example: '退休中学语文教师,擅长书法和传统文化教育' }),
|
|
|
personalSkills: z.string().max(2000).nullable().openapi({ description: '个人技能', example: '书法、国画、古典文学、诗词创作' }),
|
|
|
personalExperience: z.string().max(3000).nullable().openapi({ description: '个人经历', example: '从事教育工作40年,曾在重点中学任教...' }),
|
|
|
- certificationStatus: z.enum(['UNCERTIFIED', 'PENDING', 'CERTIFIED', 'REJECTED']).openapi({ description: '认证状态', example: 'CERTIFIED' }),
|
|
|
+ certificationStatus: z.number().int().min(0).max(3).openapi({ description: '认证状态:0-未认证,1-认证中,2-已认证,3-已拒绝', example: 2 }),
|
|
|
certificationInfo: z.string().max(2000).nullable().openapi({ description: '认证信息', example: '高级教师职称证书、书法协会会员证' }),
|
|
|
- jobSeekingStatus: z.enum(['NOT_SEEKING', 'ACTIVELY_SEEKING', 'OPEN_TO_OPPORTUNITIES']).openapi({ description: '求职状态', example: 'ACTIVELY_SEEKING' }),
|
|
|
+ jobSeekingStatus: z.number().int().min(0).max(2).openapi({ description: '求职状态:0-未求职,1-积极求职,2-观望机会', example: 1 }),
|
|
|
jobSeekingRequirements: z.string().max(1000).nullable().openapi({ description: '求职需求', example: '希望寻找文化教育类兼职工作,时间灵活' }),
|
|
|
|
|
|
// 统计信息
|
|
|
totalPoints: z.number().int().min(0).default(0).openapi({ description: '总积分', example: 1250 }),
|
|
|
resumeCount: z.number().int().min(0).default(0).openapi({ description: '简历数量', example: 3 }),
|
|
|
applicationCount: z.number().int().min(0).default(0).openapi({ description: '申请次数', example: 15 }),
|
|
|
- timeBankHours: z.number().min(0).default(0).openapi({ description: '时间银行小时数', example: 25.5 }),
|
|
|
- knowledgeContributions: z.number().int().min(0).default(0).openapi({ description: '知识贡献数量', example: 8 }),
|
|
|
-
|
|
|
- // 知识库统计
|
|
|
- knowledgeShareCount: z.number().int().min(0).default(0).openapi({ description: '知识分享数', example: 5 }),
|
|
|
- knowledgeDownloadCount: z.number().int().min(0).default(0).openapi({ description: '下载次数', example: 120 }),
|
|
|
- knowledgeLikeCount: z.number().int().min(0).default(0).openapi({ description: '点赞次数', example: 45 }),
|
|
|
- knowledgeReadCount: z.number().int().min(0).default(0).openapi({ description: '阅读次数', example: 356 }),
|
|
|
- knowledgeFavoriteCount: z.number().int().min(0).default(0).openapi({ description: '收藏次数', example: 12 }),
|
|
|
- knowledgeCommentCount: z.number().int().min(0).default(0).openapi({ description: '评论次数', example: 8 }),
|
|
|
- knowledgeRanking: z.number().int().min(0).default(0).openapi({ description: '知识排名', example: 15 }),
|
|
|
- knowledgeRankingScore: z.number().min(0).default(0).openapi({ description: '知识排名分数', example: 85.5 }),
|
|
|
+ timeBankHours: z.coerce.number().openapi({ description: '时间银行小时数', example: 10.5 }),
|
|
|
+ knowledgeContributions: z.coerce.number().int().min(0).openapi({ description: '知识贡献数', example: 3 }),
|
|
|
+ knowledgeShareCount: z.coerce.number().int().min(0).openapi({ description: '知识分享数', example: 3 }),
|
|
|
+ knowledgeDownloadCount: z.coerce.number().int().min(0).openapi({ description: '知识下载数', example: 15 }),
|
|
|
+ knowledgeLikeCount: z.coerce.number().int().min(0).openapi({ description: '知识点赞数', example: 25 }),
|
|
|
+ knowledgeReadCount: z.coerce.number().int().min(0).openapi({ description: '知识阅读数', example: 100 }),
|
|
|
+ knowledgeFavoriteCount: z.coerce.number().int().min(0).openapi({ description: '知识收藏数', example: 8 }),
|
|
|
+ knowledgeCommentCount: z.coerce.number().int().min(0).openapi({ description: '知识评论数', example: 5 }),
|
|
|
+ knowledgeRanking: z.coerce.number().int().min(0).openapi({ description: '知识排名', example: 1 }),
|
|
|
+ knowledgeRankingScore: z.coerce.number().openapi({ description: '知识排名分数', example: 95.5 }),
|
|
|
|
|
|
// 时间信息
|
|
|
createdAt: z.date().openapi({ description: '创建时间', example: '2024-01-15T10:30:00Z' }),
|
|
|
@@ -49,7 +47,7 @@ export const CreateSilverTalentDto = z.object({
|
|
|
nickname: z.string().max(50).optional().openapi({ description: '昵称', example: '张老师' }),
|
|
|
organization: z.string().max(255).optional().openapi({ description: '所属机构' }),
|
|
|
age: z.number().int().min(50).max(100).openapi({ description: '年龄', example: 65 }),
|
|
|
- gender: z.enum(['MALE', 'FEMALE', 'OTHER']).openapi({ description: '性别' }),
|
|
|
+ gender: z.coerce.number().int().min(1).max(3).openapi({ description: '性别:1-男,2-女,3-其他' }),
|
|
|
phone: z.string().max(20).openapi({ description: '联系电话' }),
|
|
|
email: z.string().max(255).email().optional().openapi({ description: '邮箱' }),
|
|
|
personalIntro: z.string().max(1000).optional().openapi({ description: '个人简介' }),
|
|
|
@@ -64,13 +62,13 @@ export const UpdateSilverTalentDto = z.object({
|
|
|
nickname: z.string().max(50).optional().openapi({ description: '昵称' }),
|
|
|
organization: z.string().max(255).optional().openapi({ description: '所属机构' }),
|
|
|
age: z.number().int().min(50).max(100).optional().openapi({ description: '年龄' }),
|
|
|
- gender: z.enum(['MALE', 'FEMALE', 'OTHER']).optional().openapi({ description: '性别' }),
|
|
|
+ gender: z.coerce.number().int().min(1).max(3).optional().openapi({ description: '性别:1-男,2-女,3-其他' }),
|
|
|
phone: z.string().max(20).optional().openapi({ description: '联系电话' }),
|
|
|
email: z.string().max(255).email().optional().openapi({ description: '邮箱' }),
|
|
|
personalIntro: z.string().max(1000).optional().openapi({ description: '个人简介' }),
|
|
|
personalSkills: z.string().max(2000).optional().openapi({ description: '个人技能' }),
|
|
|
personalExperience: z.string().max(3000).optional().openapi({ description: '个人经历' }),
|
|
|
- jobSeekingStatus: z.enum(['NOT_SEEKING', 'ACTIVELY_SEEKING', 'OPEN_TO_OPPORTUNITIES']).optional().openapi({ description: '求职状态' }),
|
|
|
+ jobSeekingStatus: z.coerce.number().int().min(0).max(2).optional().openapi({ description: '求职状态:0-未求职,1-积极求职,2-观望机会' }),
|
|
|
jobSeekingRequirements: z.string().max(1000).optional().openapi({ description: '求职需求' })
|
|
|
});
|
|
|
|
|
|
@@ -81,7 +79,7 @@ export const SearchSilverTalentDto = z.object({
|
|
|
minAge: z.coerce.number().int().min(50).optional().openapi({ description: '最小年龄' }),
|
|
|
maxAge: z.coerce.number().int().max(100).optional().openapi({ description: '最大年龄' }),
|
|
|
skills: z.array(z.string()).optional().openapi({ description: '技能筛选', example: ['书法', '国画'] }),
|
|
|
- certified: z.coerce.boolean().optional().openapi({ description: '仅认证用户', example: true }),
|
|
|
+ certificationStatus: z.coerce.number().int().min(0).max(3).optional().openapi({ description: '认证状态筛选:0-未认证,1-认证中,2-已认证,3-已拒绝', example: 2 }),
|
|
|
available: z.coerce.boolean().optional().openapi({ description: '仅可服务用户', example: true }),
|
|
|
sortBy: z.enum(['createdAt', 'rating', 'popularity', 'experience']).default('createdAt').openapi({ description: '排序字段' }),
|
|
|
sortOrder: z.enum(['asc', 'desc']).default('desc').openapi({ description: '排序方向' }),
|