Files
gongxue-base/apps/server/src/classes/dto/class.dto.ts
wangziqi 454a0d24c6 fix: release beds/lockers in batchCheckOut
The batchCheckOut method was not releasing assigned beds and lockers
after checkout, leaving them orphaned as 'occupied'. Added the same
release pattern used in checkOut() — using runner.manager.update()
since batchCheckOut operates inside a QueryRunner transaction.
2026-07-09 12:05:36 +08:00

138 lines
2.5 KiB
TypeScript

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;
}