From 800d52257ca33756e79c747ec5cfca65c5b6dd41 Mon Sep 17 00:00:00 2001 From: Adriaan Jacquet Date: Sun, 6 Apr 2025 22:02:27 +0200 Subject: [PATCH] feat: PUT request op assignment geimplementeerd --- backend/src/controllers/assignments.ts | 1 + backend/src/controllers/classes.ts | 13 ++++++++++++- backend/src/interfaces/assignment.ts | 8 ++++---- backend/src/routes/classes.ts | 3 +++ backend/src/services/assignments.ts | 1 + backend/src/services/classes.ts | 17 ++++++++++++++++- 6 files changed, 37 insertions(+), 6 deletions(-) diff --git a/backend/src/controllers/assignments.ts b/backend/src/controllers/assignments.ts index 86e3217e..e04dc801 100644 --- a/backend/src/controllers/assignments.ts +++ b/backend/src/controllers/assignments.ts @@ -3,6 +3,7 @@ import { createAssignment, deleteAssignment, getAllAssignments, getAssignment, g import { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment'; import {requireFields} from "./error-helper"; import {BadRequestException} from "../exceptions/bad-request-exception"; +import { getLogger } from '../logging/initalize.js'; export async function getAllAssignmentsHandler(req: Request, res: Response): Promise { const classId = req.params.classid; diff --git a/backend/src/controllers/classes.ts b/backend/src/controllers/classes.ts index 4e0095af..c6b71ad2 100644 --- a/backend/src/controllers/classes.ts +++ b/backend/src/controllers/classes.ts @@ -10,7 +10,8 @@ import { getClass, getClassStudents, getClassTeacherInvitations, - getClassTeachers + getClassTeachers, + putClass } from '../services/classes.js'; import { ClassDTO } from '@dwengo-1/common/interfaces/class'; import {requireFields} from "./error-helper"; @@ -41,6 +42,16 @@ export async function getClassHandler(req: Request, res: Response): Promise { + const classId = req.params.id; + requireFields({ classId }); + + const newData = req.body as Partial; + const cls = await putClass(classId, newData); + + res.json({ class: cls }); +} + export async function deleteClassHandler(req: Request, res: Response): Promise { const classId = req.params.id; const cls = await deleteClass(classId); diff --git a/backend/src/interfaces/assignment.ts b/backend/src/interfaces/assignment.ts index d48a9083..09e12dd0 100644 --- a/backend/src/interfaces/assignment.ts +++ b/backend/src/interfaces/assignment.ts @@ -4,28 +4,28 @@ import { Assignment } from '../entities/assignments/assignment.entity.js'; import { Class } from '../entities/classes/class.entity.js'; import { getLogger } from '../logging/initalize.js'; import { AssignmentDTO } from '@dwengo-1/common/interfaces/assignment'; +import { mapToGroupDTO } from './group.js'; export function mapToAssignmentDTOId(assignment: Assignment): AssignmentDTO { return { id: assignment.id!, - class: assignment.within.classId!, + within: assignment.within.classId!, title: assignment.title, description: assignment.description, learningPath: assignment.learningPathHruid, language: assignment.learningPathLanguage, - // Groups: assignment.groups.map(group => group.groupNumber), }; } export function mapToAssignmentDTO(assignment: Assignment): AssignmentDTO { return { id: assignment.id!, - class: assignment.within.classId!, + within: assignment.within.classId!, title: assignment.title, description: assignment.description, learningPath: assignment.learningPathHruid, language: assignment.learningPathLanguage, - // Groups: assignment.groups.map(mapToGroupDTO), + // groups: assignment.groups.map(mapToGroupDTO), }; } diff --git a/backend/src/routes/classes.ts b/backend/src/routes/classes.ts index aaf95567..aa2a4814 100644 --- a/backend/src/routes/classes.ts +++ b/backend/src/routes/classes.ts @@ -10,6 +10,7 @@ import { getClassHandler, getClassStudentsHandler, getClassTeachersHandler, getTeacherInvitationsHandler, + putClassHandler, } from '../controllers/classes.js'; import assignmentRouter from './assignments.js'; @@ -22,6 +23,8 @@ router.post('/', createClassHandler); router.get('/:id', getClassHandler); +router.put('/:id', putClassHandler); + router.delete('/:id', deleteClassHandler); router.get('/:id/teacher-invitations', getTeacherInvitationsHandler); diff --git a/backend/src/services/assignments.ts b/backend/src/services/assignments.ts index a2892bed..8ab58070 100644 --- a/backend/src/services/assignments.ts +++ b/backend/src/services/assignments.ts @@ -8,6 +8,7 @@ import { mapToSubmissionDTO, mapToSubmissionDTOId } from '../interfaces/submissi import { fetchClass } from './classes.js'; import { QuestionDTO, QuestionId } from '@dwengo-1/common/interfaces/question'; import { SubmissionDTO, SubmissionDTOId } from '@dwengo-1/common/interfaces/submission'; +import { getLogger } from '../logging/initalize.js'; export async function fetchAssignment(classid: string, assignmentNumber: number): Promise { const classRepository = getClassRepository(); diff --git a/backend/src/services/classes.ts b/backend/src/services/classes.ts index 9b74397b..f3209c0d 100644 --- a/backend/src/services/classes.ts +++ b/backend/src/services/classes.ts @@ -9,9 +9,10 @@ import { ClassDTO } from '@dwengo-1/common/interfaces/class'; import { TeacherInvitationDTO } from '@dwengo-1/common/interfaces/teacher-invitation'; import { StudentDTO } from '@dwengo-1/common/interfaces/student'; import {fetchTeacher} from "./teachers"; -import {fetchStudent} from "./students"; +import {fetchStudent, getStudent} from "./students"; import {TeacherDTO} from "@dwengo-1/common/interfaces/teacher"; import {mapToTeacherDTO} from "../interfaces/teacher"; +import { EntityDTO } from '@mikro-orm/core'; export async function fetchClass(classid: string): Promise { const classRepository = getClassRepository(); @@ -57,6 +58,16 @@ export async function createClass(classData: ClassDTO): Promise { return mapToClassDTO(newClass); } +export async function putClass(classId: string, classData: Partial): Promise { + const cls = await fetchClass(classId); + + const classRepository = getClassRepository(); + classRepository.assign(cls, classData as Partial>); + await classRepository.getEntityManager().flush(); + + return mapToClassDTO(cls); +} + export async function deleteClass(classId: string): Promise { const cls = await fetchClass(classId); @@ -107,6 +118,7 @@ export async function deleteClassStudent(classId: string, username: string): Pro const classRepository = getClassRepository(); classRepository.assign(cls, { students: cls.students.filter((student) => student.username !== username) }); + await classRepository.getEntityManager().flush(); return mapToClassDTO(cls); } @@ -116,6 +128,7 @@ export async function deleteClassTeacher(classId: string, username: string): Pro const classRepository = getClassRepository(); classRepository.assign(cls, { teachers: cls.teachers.filter((teacher) => teacher.username !== username) }); + await classRepository.getEntityManager().flush(); return mapToClassDTO(cls); } @@ -126,6 +139,7 @@ export async function addClassStudent(classId: string, username: string): Promis const classRepository = getClassRepository(); classRepository.assign(cls, { students: [...cls.students, newStudent] }); + await classRepository.getEntityManager().flush(); return mapToClassDTO(cls); } @@ -136,6 +150,7 @@ export async function addClassTeacher(classId: string, username: string): Promis const classRepository = getClassRepository(); classRepository.assign(cls, { teachers: [...cls.teachers, newTeacher] }); + await classRepository.getEntityManager().flush(); return mapToClassDTO(cls); }