From cf5b446a4744b01d25227220b87dfcf3f58ef6c4 Mon Sep 17 00:00:00 2001 From: Gabriellvl Date: Sun, 30 Mar 2025 15:17:01 +0200 Subject: [PATCH] fix: types in teacher --- backend/src/services/teachers.ts | 84 ++++++++++++++++++-------------- 1 file changed, 47 insertions(+), 37 deletions(-) diff --git a/backend/src/services/teachers.ts b/backend/src/services/teachers.ts index bc5a2d0a..988bd5a5 100644 --- a/backend/src/services/teachers.ts +++ b/backend/src/services/teachers.ts @@ -2,7 +2,7 @@ import { getClassJoinRequestRepository, getClassRepository, getLearningObjectRepository, - getQuestionRepository, getStudentRepository, + getQuestionRepository, getTeacherRepository, } from '../data/repositories.js'; import { ClassDTO, mapToClassDTO } from '../interfaces/class.js'; @@ -12,12 +12,22 @@ import { mapToTeacher, mapToTeacherDTO, TeacherDTO } from '../interfaces/teacher import {ConflictException, NotFoundException} from "../exceptions"; import {Teacher} from "../entities/users/teacher.entity"; import {fetchStudent} from "./students"; -import {ClassJoinRequestStatus} from "../entities/classes/class-join-request.entity"; -import {mapToStudentRequestDTO} from "../interfaces/student-request"; +import {ClassJoinRequest, ClassJoinRequestStatus} from "../entities/classes/class-join-request.entity"; +import {mapToStudentRequestDTO, StudentRequestDTO} from "../interfaces/student-request"; +import {TeacherRepository} from "../data/users/teacher-repository"; +import {ClassRepository} from "../data/classes/class-repository"; +import {Class} from "../entities/classes/class.entity"; +import {StudentDTO} from "../interfaces/student"; +import {LearningObjectRepository} from "../data/content/learning-object-repository"; +import {LearningObject} from "../entities/content/learning-object.entity"; +import {QuestionRepository} from "../data/questions/question-repository"; +import {Question} from "../entities/questions/question.entity"; +import {ClassJoinRequestRepository} from "../data/classes/class-join-request-repository"; +import {Student} from "../entities/users/student.entity"; export async function getAllTeachers(full: boolean): Promise { - const teacherRepository = getTeacherRepository(); - const users = await teacherRepository.findAll(); + const teacherRepository: TeacherRepository = getTeacherRepository(); + const users: Teacher[] = await teacherRepository.findAll(); if (full) { return users.map(mapToTeacherDTO); @@ -26,8 +36,8 @@ export async function getAllTeachers(full: boolean): Promise { - const studentRepository = getStudentRepository(); - const user = await studentRepository.findByUsername(username); + const teacherRepository: TeacherRepository = getTeacherRepository(); + const user: Teacher | null = await teacherRepository.findByUsername(username); if (!user) { throw new NotFoundException("Teacher with username not found"); @@ -36,26 +46,26 @@ export async function fetchTeacher(username: string): Promise { return user; } -export async function getTeacher(username: string): Promise { - const user = await fetchTeacher(username); +export async function getTeacher(username: string): Promise { + const user: Teacher = await fetchTeacher(username); return mapToTeacherDTO(user); } export async function createTeacher(userData: TeacherDTO): Promise { - const teacherRepository = getTeacherRepository(); + const teacherRepository: TeacherRepository = getTeacherRepository(); - const user = await teacherRepository.findByUsername(userData.username); + const user: Teacher | null = await teacherRepository.findByUsername(userData.username); if (user){ throw new ConflictException("Teacher with that username already exists"); } - const newTeacher = teacherRepository.create(mapToTeacher(userData)); + const newTeacher: Teacher = teacherRepository.create(mapToTeacher(userData)); await teacherRepository.save(newTeacher); } export async function deleteTeacher(username: string): Promise { - const teacherRepository = getTeacherRepository(); + const teacherRepository: TeacherRepository = getTeacherRepository(); await fetchTeacher(username); // throws error if it does not exist @@ -63,15 +73,15 @@ export async function deleteTeacher(username: string): Promise { } async function fetchClassesByTeacher(username: string): Promise { - const teacher = await fetchTeacher(username); + const teacher: Teacher = await fetchTeacher(username); - const classRepository = getClassRepository(); - const classes = await classRepository.findByTeacher(teacher); + const classRepository: ClassRepository = getClassRepository(); + const classes: Class[] = await classRepository.findByTeacher(teacher); return classes.map(mapToClassDTO); } export async function getClassesByTeacher(username: string, full: boolean): Promise { - const classes = await fetchClassesByTeacher(username); + const classes: ClassDTO[] = await fetchClassesByTeacher(username); if (full) { return classes; @@ -80,15 +90,15 @@ export async function getClassesByTeacher(username: string, full: boolean): Prom } export async function getStudentsByTeacher(username: string, full: boolean) { - const classes = await fetchClassesByTeacher(username); + const classes: ClassDTO[] = await fetchClassesByTeacher(username); if (!classes || classes.length === 0){ return []; } - const classIds = classes.map((cls) => cls.id); + const classIds: string[] = classes.map((cls) => cls.id); - const students = (await Promise.all(classIds.map(async (id) => getClassStudents(id)))).flat(); + const students: StudentDTO[] = (await Promise.all(classIds.map(async (id) => getClassStudents(id)))).flat(); if (full) { return students; } @@ -96,20 +106,20 @@ export async function getStudentsByTeacher(username: string, full: boolean) { } export async function getTeacherQuestions(username: string, full: boolean): Promise { - const teacher = await fetchTeacher(username); + const teacher: Teacher = await fetchTeacher(username); // Find all learning objects that this teacher manages - const learningObjectRepository = getLearningObjectRepository(); - const learningObjects = await learningObjectRepository.findAllByTeacher(teacher); + const learningObjectRepository: LearningObjectRepository = getLearningObjectRepository(); + const learningObjects: LearningObject[] = await learningObjectRepository.findAllByTeacher(teacher); if (!learningObjects || learningObjects.length === 0){ return []; } // Fetch all questions related to these learning objects - const questionRepository = getQuestionRepository(); - const questions = await questionRepository.findAllByLearningObjects(learningObjects); - const questionsDTO = questions.map(mapToQuestionDTO); + const questionRepository: QuestionRepository = getQuestionRepository(); + const questions: Question[] = await questionRepository.findAllByLearningObjects(learningObjects); + const questionsDTO: QuestionDTO[] = questions.map(mapToQuestionDTO); if (full) { return questionsDTO; @@ -118,31 +128,31 @@ export async function getTeacherQuestions(username: string, full: boolean): Prom return questionsDTO.map(mapToQuestionId); } -export async function getJoinRequestsByClass( classId: string ){ - const classRepository = getClassRepository(); - const cls = await classRepository.findById(classId); +export async function getJoinRequestsByClass( classId: string ): Promise { + const classRepository: ClassRepository = getClassRepository(); + const cls: Class | null = await classRepository.findById(classId); if (!cls) { throw new NotFoundException("Class with id not found"); } - const requestRepo = getClassJoinRequestRepository(); - const requests = await requestRepo.findAllOpenRequestsTo(cls); + const requestRepo: ClassJoinRequestRepository = getClassJoinRequestRepository(); + const requests: ClassJoinRequest[] = await requestRepo.findAllOpenRequestsTo(cls); return requests.map(mapToStudentRequestDTO); } -export async function updateClassJoinRequestStatus( studentUsername: string, classId: string, accepted: boolean = true) { - const requestRepo = getClassJoinRequestRepository(); - const classRepo = getClassRepository(); +export async function updateClassJoinRequestStatus( studentUsername: string, classId: string, accepted: boolean = true): Promise { + const requestRepo: ClassJoinRequestRepository = getClassJoinRequestRepository(); + const classRepo: ClassRepository = getClassRepository(); - const student = await fetchStudent(studentUsername); - const cls = await classRepo.findById(classId); + const student: Student = await fetchStudent(studentUsername); + const cls: Class | null = await classRepo.findById(classId); if (!cls) { throw new NotFoundException('Class not found'); } - const request = await requestRepo.findByStudentAndClass(student, cls); + const request: ClassJoinRequest | null = await requestRepo.findByStudentAndClass(student, cls); if (!request) { throw new NotFoundException('Join request not found');