forked from wangziqi/gongxue-base
test: harden business boundary conditions
This commit is contained in:
@@ -286,6 +286,7 @@ export class ClassesService {
|
||||
async archive(id: number) {
|
||||
const cls = await this.classRepo.findOne({ where: { id } });
|
||||
if (!cls) throw new NotFoundException('班级不存在');
|
||||
if (cls.isArchived) throw new BadRequestException('班级已归档');
|
||||
await this.classRepo.update(id, { isArchived: true });
|
||||
return { success: true };
|
||||
}
|
||||
@@ -294,6 +295,7 @@ export class ClassesService {
|
||||
async restore(id: number) {
|
||||
const cls = await this.classRepo.findOne({ where: { id } });
|
||||
if (!cls) throw new NotFoundException('班级不存在');
|
||||
if (!cls.isArchived) throw new BadRequestException('班级未归档');
|
||||
await this.classRepo.update(id, { isArchived: false });
|
||||
return { success: true };
|
||||
}
|
||||
@@ -392,6 +394,9 @@ export class ClassesService {
|
||||
}
|
||||
|
||||
async addTeacher(classId: number, dto: AddTeacherDto) {
|
||||
const cls = await this.classRepo.findOne({ where: { id: classId } });
|
||||
if (!cls) throw new NotFoundException('班级不存在');
|
||||
|
||||
const existing = await this.classTeacherRepo.findOne({
|
||||
where: { classId, userId: dto.userId, roleType: dto.roleType },
|
||||
});
|
||||
@@ -410,12 +415,18 @@ export class ClassesService {
|
||||
}
|
||||
|
||||
async removeTeacher(classId: number, userId: number) {
|
||||
const assignments = await this.classTeacherRepo.find({ where: { classId, userId } });
|
||||
if (assignments.length === 0) throw new NotFoundException('教师未分配到该班级');
|
||||
await this.classTeacherRepo.delete({ classId, userId });
|
||||
await this.syncClassTeacherIds(classId);
|
||||
return { success: true };
|
||||
}
|
||||
|
||||
async removeTeacherAssignment(classId: number, assignmentId: number) {
|
||||
const assignment = await this.classTeacherRepo.findOne({
|
||||
where: { id: assignmentId, classId },
|
||||
});
|
||||
if (!assignment) throw new NotFoundException('教师角色分配不存在');
|
||||
await this.classTeacherRepo.delete({ id: assignmentId, classId });
|
||||
await this.syncClassTeacherIds(classId);
|
||||
return { success: true };
|
||||
|
||||
Reference in New Issue
Block a user