import { ApiProperty } from '@nestjs/swagger'; import { z } from 'zod'; const permissionLevelSchema = z.enum(['none', 'read', 'build']); export const projectPermissionSchema = z.object({ projectKey: z.string().trim().min(1).max(80), level: permissionLevelSchema, }); export const createMemberSchema = z.object({ account: z.string().trim().min(1).max(80), displayName: z.string().trim().min(1).max(120), permissions: z.array(projectPermissionSchema).optional().default([]), }); export type CreateMemberDtoInput = z.infer; export class ProjectPermissionDto { @ApiProperty({ example: 'devops-platform-api', description: '项目标识' }) projectKey!: string; @ApiProperty({ enum: ['none', 'read', 'build'], description: '项目权限:none 无权限,read 只读,build 构建', }) level!: 'none' | 'read' | 'build'; } export class CreateMemberDto { @ApiProperty({ example: 'member01', description: '成员账号' }) account!: string; @ApiProperty({ example: '成员一', description: '成员名称' }) displayName!: string; @ApiProperty({ type: [ProjectPermissionDto], required: false, description: '成员项目权限,未传项目默认为无权限', }) permissions?: ProjectPermissionDto[]; } export const updateMemberPermissionsSchema = z.object({ permissions: z.array(projectPermissionSchema).default([]), }); export type UpdateMemberPermissionsInput = z.infer< typeof updateMemberPermissionsSchema >; export class UpdateMemberPermissionsDto { @ApiProperty({ type: [ProjectPermissionDto], description: '完整项目权限列表' }) permissions!: ProjectPermissionDto[]; } export const updateMemberStatusSchema = z.object({ status: z.enum(['active', 'disabled']), }); export type UpdateMemberStatusInput = z.infer; export class UpdateMemberStatusDto { @ApiProperty({ enum: ['active', 'disabled'], description: '成员状态:active 启用,disabled 禁用', }) status!: 'active' | 'disabled'; }