import { IsOptional, IsString, IsNotEmpty, IsInt, IsArray, IsDateString, IsEnum } from 'class-validator'; import { Type } from 'class-transformer'; import { ClassType, ClassStatus, TeacherRoleType } from '../../entities'; export class CreateClassDto { @IsString() @IsNotEmpty() name: string; @IsString() @IsNotEmpty() code: string; @IsOptional() @IsInt() departmentId?: number; @IsEnum(ClassType) @IsString() @IsNotEmpty() classType: string; @IsOptional() @IsDateString() startDate?: string; @IsOptional() @IsDateString() endDate?: string; @IsEnum(ClassStatus) @IsOptional() @IsString() status?: string; @IsOptional() @IsInt() headTeacherId?: number; @IsOptional() @IsInt() lifeTeacherId?: number; @IsOptional() @IsInt() academicTeacherId?: number; @IsOptional() @IsInt() maxStudents?: number; @IsOptional() @IsString() notes?: string; @IsOptional() @IsArray() studentIds?: number[]; @IsOptional() @IsArray() teachers?: Array<{ userId: number; roleType: string; subject?: string }>; } export class UpdateClassDto { @IsOptional() @IsString() name?: string; @IsOptional() @IsString() code?: string; @IsOptional() @IsInt() departmentId?: number; @IsEnum(ClassType) @IsOptional() @IsString() classType?: string; @IsOptional() @IsDateString() startDate?: string; @IsOptional() @IsDateString() endDate?: string; @IsEnum(ClassStatus) @IsOptional() @IsString() status?: string; @IsOptional() @IsInt() headTeacherId?: number; @IsOptional() @IsInt() lifeTeacherId?: number; @IsOptional() @IsInt() academicTeacherId?: number; @IsOptional() @IsInt() maxStudents?: number; @IsOptional() @IsString() notes?: string; } export class QueryClassDto { @IsOptional() @Type(() => Number) @IsInt() departmentId?: number; @IsOptional() @IsString() status?: string; @IsOptional() @IsString() classType?: string; @IsOptional() @IsString() keyword?: string; @IsOptional() @Type(() => Boolean) isArchived?: boolean; } export class AddStudentsDto { @IsArray() @IsInt({ each: true }) studentIds: number[]; } export class AddTeacherDto { @IsInt() userId: number; @IsEnum(TeacherRoleType) roleType: string; @IsOptional() @IsString() subject?: string; } export class QueryClassScheduleDto { @IsOptional() @IsDateString() startDate?: string; @IsOptional() @IsDateString() endDate?: string; } export class QueryClassAttendanceSummaryDto { @IsOptional() @IsDateString() startDate?: string; @IsOptional() @IsDateString() endDate?: string; }