import { IsOptional, IsString, IsNotEmpty, IsInt, IsISO8601, IsMilitaryTime, Matches, Min, Max, MaxLength, IsIn, } from 'class-validator'; import { Type } from 'class-transformer'; export class CreateScheduleDto { @IsInt() @IsNotEmpty() classId: number; @IsInt() @IsNotEmpty() classroomId: number; @IsInt() @Min(1) @Max(7) @IsNotEmpty() weekDay: number; @IsMilitaryTime() @IsNotEmpty() startTime: string; @IsMilitaryTime() @IsNotEmpty() endTime: string; @IsOptional() @IsInt() @Min(0) @Max(1440) attendanceAdvanceMinutes?: number; @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) @IsNotEmpty() startDate: string; @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) @IsNotEmpty() endDate: string; @IsString() @IsNotEmpty() subject: string; @IsOptional() @IsInt() teacherId?: number; @IsOptional() @IsString() scheduleType?: string; @IsOptional() @IsInt() rentalId?: number; @IsOptional() @IsString() @MaxLength(500) notes?: string; } export class UpdateScheduleDto { @IsOptional() @IsInt() classId?: number; @IsOptional() @IsInt() classroomId?: number; @IsOptional() @IsInt() @Min(1) @Max(7) weekDay?: number; @IsOptional() @IsMilitaryTime() startTime?: string; @IsOptional() @IsMilitaryTime() endTime?: string; @IsOptional() @IsInt() @Min(0) @Max(1440) attendanceAdvanceMinutes?: number; @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) startDate?: string; @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) endDate?: string; @IsOptional() @IsString() subject?: string; @IsOptional() @IsInt() teacherId?: number; @IsOptional() @IsString() scheduleType?: string; @IsOptional() @IsInt() rentalId?: number; @IsOptional() @IsString() @MaxLength(500) notes?: string; @IsOptional() @IsString() @IsIn(['active', 'inactive', 'cancelled']) status?: string; } export class QueryScheduleDto { @IsOptional() @Type(() => Number) @IsInt() classroomId?: number; @IsOptional() @Type(() => Number) @IsInt() classId?: number; @IsOptional() @Type(() => Number) @IsInt() @Min(1) @Max(7) weekDay?: number; @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) startDate?: string; @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) endDate?: string; } export class WeeklyViewQueryDto { @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) startDate?: string; @IsOptional() @Matches(/^\d{4}-\d{2}-\d{2}$/) @IsISO8601({ strict: true }) endDate?: string; @IsOptional() @Type(() => Number) @IsInt() classroomId?: number; }