From 33f785ebc03185669f9705e47b82020171f6e35a Mon Sep 17 00:00:00 2001 From: Adriaan Jacquet Date: Sun, 6 Apr 2025 22:27:02 +0200 Subject: [PATCH] feat: PUT op group geimplementeerd --- backend/src/controllers/groups.ts | 15 ++++++++++++++- backend/src/routes/groups.ts | 4 +++- backend/src/services/assignments.ts | 2 +- backend/src/services/classes.ts | 10 +++++----- backend/src/services/groups.ts | 16 +++++++++++++++- backend/src/services/service-helper.ts | 2 +- 6 files changed, 39 insertions(+), 10 deletions(-) diff --git a/backend/src/controllers/groups.ts b/backend/src/controllers/groups.ts index 781cd4fd..85b0809c 100644 --- a/backend/src/controllers/groups.ts +++ b/backend/src/controllers/groups.ts @@ -1,9 +1,11 @@ import { Request, Response } from 'express'; -import { createGroup, deleteGroup, getAllGroups, getGroup, getGroupSubmissions } from '../services/groups.js'; +import { createGroup, deleteGroup, getAllGroups, getGroup, getGroupSubmissions, putGroup } from '../services/groups.js'; import { GroupDTO } from '@dwengo-1/common/interfaces/group'; import { requireFields } from './error-helper.js'; import { BadRequestException } from '../exceptions/bad-request-exception.js'; import { getLogger } from '../logging/initalize.js'; +import { EntityDTO } from '@mikro-orm/core'; +import { Group } from '../entities/assignments/group.entity.js'; function checkGroupFields(classId: any, assignmentId: any, groupId: any) { requireFields({ classId, assignmentId, groupId }); @@ -28,6 +30,17 @@ export async function getGroupHandler(req: Request, res: Response): Promise { + const classId = req.params.classid; + const assignmentId = parseInt(req.params.assignmentid); + const groupId = parseInt(req.params.groupid); + checkGroupFields(classId, assignmentId, groupId); + + const group = await putGroup(classId, assignmentId, groupId, req.body as Partial>); + + res.json({ group }); +} + export async function deleteGroupHandler(req: Request, res: Response): Promise { const classId = req.params.classid; const assignmentId = parseInt(req.params.assignmentid); diff --git a/backend/src/routes/groups.ts b/backend/src/routes/groups.ts index 4a7d6b10..54c32462 100644 --- a/backend/src/routes/groups.ts +++ b/backend/src/routes/groups.ts @@ -1,5 +1,5 @@ import express from 'express'; -import { createGroupHandler, deleteGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler } from '../controllers/groups.js'; +import { createGroupHandler, deleteGroupHandler, getAllGroupsHandler, getGroupHandler, getGroupSubmissionsHandler, putGroupHandler } from '../controllers/groups.js'; const router = express.Router({ mergeParams: true }); @@ -10,6 +10,8 @@ router.post('/', createGroupHandler); router.get('/:groupid', getGroupHandler); +router.put('/:groupid', putGroupHandler); + router.delete('/:groupid', deleteGroupHandler); router.get('/:groupid/submissions', getGroupSubmissionsHandler); diff --git a/backend/src/services/assignments.ts b/backend/src/services/assignments.ts index 9f5d9183..7b5baaf8 100644 --- a/backend/src/services/assignments.ts +++ b/backend/src/services/assignments.ts @@ -64,7 +64,7 @@ export async function getAssignment(classid: string, id: number): Promise>): Promise { const assignment = await fetchAssignment(classid, id); - await putObject(assignment, assignmentData, getAssignmentRepository()); + await putObject(assignment, assignmentData, getAssignmentRepository()); return mapToAssignmentDTO(assignment); } diff --git a/backend/src/services/classes.ts b/backend/src/services/classes.ts index 128cdec8..dfb12aa2 100644 --- a/backend/src/services/classes.ts +++ b/backend/src/services/classes.ts @@ -62,7 +62,7 @@ export async function createClass(classData: ClassDTO): Promise { export async function putClass(classId: string, classData: Partial>): Promise { const cls = await fetchClass(classId); - await putObject(cls, classData, getClassRepository()); + await putObject(cls, classData, getClassRepository()); return mapToClassDTO(cls); } @@ -116,7 +116,7 @@ export async function deleteClassStudent(classId: string, username: string): Pro const cls = await fetchClass(classId); const newStudents = { students: cls.students.filter((student) => student.username !== username) }; - await putObject(cls, newStudents, getClassRepository()); + await putObject(cls, newStudents, getClassRepository()); return mapToClassDTO(cls); } @@ -125,7 +125,7 @@ export async function deleteClassTeacher(classId: string, username: string): Pro const cls = await fetchClass(classId); const newTeachers = { teachers: cls.teachers.filter((teacher) => teacher.username !== username) }; - await putObject(cls, newTeachers, getClassRepository()); + await putObject(cls, newTeachers, getClassRepository()); return mapToClassDTO(cls); } @@ -135,7 +135,7 @@ export async function addClassStudent(classId: string, username: string): Promis const newStudent = await fetchStudent(username); const newStudents = { students: [...cls.students, newStudent] } - await putObject(cls, newStudents, getClassRepository()); + await putObject(cls, newStudents, getClassRepository()); return mapToClassDTO(cls); } @@ -145,7 +145,7 @@ export async function addClassTeacher(classId: string, username: string): Promis const newTeacher = await fetchTeacher(username); const newTeachers = { teachers: [...cls.teachers, newTeacher] }; - await putObject(cls, newTeachers, getClassRepository()); + await putObject(cls, newTeachers, getClassRepository()); return mapToClassDTO(cls); } diff --git a/backend/src/services/groups.ts b/backend/src/services/groups.ts index 68784177..442c1aec 100644 --- a/backend/src/services/groups.ts +++ b/backend/src/services/groups.ts @@ -1,4 +1,4 @@ -import { assign } from '@mikro-orm/core'; +import { assign, EntityDTO } from '@mikro-orm/core'; import { getAssignmentRepository, getClassRepository, @@ -16,6 +16,7 @@ import { getLogger } from '../logging/initalize.js'; import { fetchAssignment } from './assignments.js'; import { NotFoundException } from '../exceptions/not-found-exception.js'; import { fetchClass } from './classes.js'; +import { putObject } from './service-helper.js'; export async function fetchGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { const assignment = await fetchAssignment(classId, assignmentNumber); @@ -35,6 +36,19 @@ export async function getGroup(classId: string, assignmentNumber: number, groupN return mapToGroupDTO(group); } +export async function putGroup( + classId: string, + assignmentNumber: number, + groupNumber: number, + groupData: Partial> +): Promise { + const group = await fetchGroup(classId, assignmentNumber, groupNumber); + + await putObject(group, groupData, getGroupRepository()); + + return mapToGroupDTO(group); +} + export async function deleteGroup(classId: string, assignmentNumber: number, groupNumber: number): Promise { const group = await fetchGroup(classId, assignmentNumber, groupNumber); const assignment = await fetchAssignment(classId, assignmentNumber); diff --git a/backend/src/services/service-helper.ts b/backend/src/services/service-helper.ts index 28ff0eb0..427ff5dd 100644 --- a/backend/src/services/service-helper.ts +++ b/backend/src/services/service-helper.ts @@ -10,7 +10,7 @@ import { DwengoEntityRepository } from "../data/dwengo-entity-repository"; * * @returns Nothing. */ -export async function putObject( +export async function putObject( object: T, data: Partial>>, repo: DwengoEntityRepository