import { IsBoolean, IsIn, IsInt, IsOptional, IsString } from 'class-validator'; import { Transform, Type } from 'class-transformer'; export class CreateStudentDto { @IsString() name: string; @IsOptional() @IsString() studentNo?: string; @IsOptional() @IsString() phone?: string; @IsOptional() @IsString() idNumber?: string; @IsOptional() @IsString() gender?: string; @IsOptional() @IsString() ethnicity?: string; @IsOptional() @IsString() emergencyContact?: string; @IsOptional() @IsString() emergencyPhone?: string; @IsInt() organizationId: number; @IsOptional() @IsString() supervisor?: string; } export class UpdateStudentDto { @IsOptional() @IsString() name?: string; @IsOptional() @IsString() studentNo?: string; @IsOptional() @IsString() phone?: string; @IsOptional() @IsString() idNumber?: string; @IsOptional() @IsString() gender?: string; @IsOptional() @IsString() ethnicity?: string; @IsOptional() @IsString() emergencyContact?: string; @IsOptional() @IsString() emergencyPhone?: string; @IsOptional() @IsInt() organizationId?: number; @IsOptional() @IsString() supervisor?: string; @IsOptional() @IsIn(['active', 'graduated', 'withdrawn']) status?: string; } export class QueryStudentDto { @IsOptional() @IsString() name?: string; @IsOptional() @IsIn(['active', 'graduated', 'withdrawn', 'archived']) status?: string; @IsOptional() @Transform(({ value }) => { if (typeof value === 'boolean') return value; if (value === 'true' || value === '1') return true; if (value === 'false' || value === '0') return false; return value; }) @IsBoolean() includeArchived?: boolean; @IsOptional() @Type(() => Number) @IsInt() organizationId?: number; @IsOptional() @Type(() => Number) @IsInt() classId?: number; @IsOptional() @Type(() => Number) @IsInt() teacherId?: number; }