diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index 3ebc6609..4e67d27d 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -22,13 +22,15 @@ import { Question } from '../entities/questions/question.entity.js'; import { ClassJoinRequestRepository } from '../data/classes/class-join-request-repository.js'; import { Student } from '../entities/users/student.entity.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; -import { getClassStudents, getClassStudentsDTO } from './classes.js'; +import {addClassStudent, fetchClass, getClassStudents, getClassStudentsDTO} from './classes.js'; import { TeacherDTO } from '@dwengo-1/common/interfaces/teacher'; import { ClassDTO } from '@dwengo-1/common/interfaces/class'; import { StudentDTO } from '@dwengo-1/common/interfaces/student'; import { QuestionDTO, QuestionId } from '@dwengo-1/common/interfaces/question'; import { ClassJoinRequestDTO } from '@dwengo-1/common/interfaces/class-join-request'; import { ClassJoinRequestStatus } from '@dwengo-1/common/util/class-join-request'; +import {BadRequestException} from "../exceptions/bad-request-exception"; +import {ConflictException} from "../exceptions/conflict-exception"; export async function getAllTeachers(full: boolean): Promise { const teacherRepository: TeacherRepository = getTeacherRepository(); @@ -145,13 +147,12 @@ export async function getJoinRequestsByClass(classId: string): Promise { const requestRepo: ClassJoinRequestRepository = getClassJoinRequestRepository(); - const classRepo: ClassRepository = getClassRepository(); const student: Student = await fetchStudent(studentUsername); - const cls: Class | null = await classRepo.findById(classId); + const cls = await fetchClass(classId); - if (!cls) { - throw new NotFoundException('Class not found'); + if (cls.students.contains(student)) { + throw new ConflictException("Student already in this class"); } const request: ClassJoinRequest | null = await requestRepo.findByStudentAndClass(student, cls); @@ -160,8 +161,14 @@ export async function updateClassJoinRequestStatus(studentUsername: string, clas throw new NotFoundException('Join request not found'); } - request.status = accepted ? ClassJoinRequestStatus.Accepted : ClassJoinRequestStatus.Declined; + request.status = ClassJoinRequestStatus.Declined; + + if (accepted){ + request.status = ClassJoinRequestStatus.Accepted; + await addClassStudent(classId, studentUsername); + } await requestRepo.save(request); + return mapToStudentRequestDTO(request); }