Files
gongxue-base/apps/server/src/classes/dto/class.dto.ts

224 lines
3.4 KiB
TypeScript

import {
IsOptional,
IsString,
IsNotEmpty,
IsInt,
IsArray,
IsDateString,
IsEnum,
ArrayNotEmpty,
ValidateNested,
Min,
} from 'class-validator';
import { Type, Transform } from 'class-transformer';
import { ClassType, ClassStatus, TeacherRoleType } from '../../entities';
export class ClassTeacherItemDto {
@IsInt()
userId: number;
@IsEnum(TeacherRoleType)
roleType: string;
@IsOptional()
@IsString()
subject?: string;
}
export class CreateClassDto {
@IsString()
@IsNotEmpty()
name: string;
@IsString()
@IsNotEmpty()
code: string;
@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()
@Min(0)
maxStudents?: number;
@IsOptional()
@IsString()
notes?: string;
@IsOptional()
@IsArray()
@IsInt({ each: true })
studentIds?: number[];
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => ImportUserItem)
users?: ImportUserItem[];
@IsOptional()
@IsArray()
@ValidateNested({ each: true })
@Type(() => ClassTeacherItemDto)
teachers?: ClassTeacherItemDto[];
}
export class UpdateClassDto {
@IsOptional()
@IsString()
name?: string;
@IsOptional()
@IsString()
code?: string;
@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()
@Min(0)
maxStudents?: number;
@IsOptional()
@IsString()
notes?: string;
}
export class QueryClassDto {
@IsOptional()
@IsString()
status?: string;
@IsOptional()
@IsString()
classType?: string;
@IsOptional()
@IsString()
keyword?: 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;
})
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;
}
export class BatchImportStudentsDto {
@IsArray()
@ArrayNotEmpty()
@ValidateNested({ each: true })
@Type(() => ImportUserItem)
users: ImportUserItem[];
}
export class ImportUserItem {
@IsString()
@IsNotEmpty()
dingUserId: string;
@IsString()
@IsNotEmpty()
name: string;
@IsOptional()
@IsString()
mobile?: string;
}