From d1d2008fa84092b68acd3b272a06263fa176b16d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Tue, 23 Jan 2024 18:19:06 +0100 Subject: [PATCH] ExerciseRoutes => Create: test if the max exercise per assignment is reached for at least one member --- ExpressAPI/src/routes/ExerciseRoutes.ts | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index b337158..0642d3a 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -30,6 +30,7 @@ import ExerciseResultsFile from '../shared/types/Dojo/ExerciseResultsFile' import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode'; import GlobalHelper from '../helpers/GlobalHelper'; import { IFileDirStat } from '../shared/helpers/recursiveFilesStats/RecursiveFilesStats'; +import ExerciseManager from '../managers/ExerciseManager'; class ExerciseRoutes implements RoutesManager { @@ -90,6 +91,21 @@ class ExerciseRoutes implements RoutesManager { const assignment: Assignment = req.boundParams.assignment!; + const exercises: Array<Exercise> | undefined = await ExerciseManager.getFromAssignment(assignment.name, { members: true }); + const reachedLimitUsers: Array<GitlabUser> = []; + if ( exercises ) { + for ( const member of params.members ) { + const exerciseCount: number = exercises.filter(exercise => exercise.members.findIndex(exerciseMember => exerciseMember.id === member.id) !== -1).length; + if ( exerciseCount >= Config.exercise.maxPerAssignment ) { + reachedLimitUsers.push(member); + } + } + } + if ( reachedLimitUsers.length > 0 ) { + return req.session.sendResponse(res, StatusCodes.INSUFFICIENT_SPACE_ON_RESOURCE, reachedLimitUsers, 'Max exercise per assignment reached', DojoStatusCode.MAX_EXERCISE_PER_ASSIGNMENT_REACHED); + } + + const exerciseId: string = uuidv4(); const secret: string = uuidv4(); let repository!: GitlabRepository; -- GitLab