From 3598cdeb43798c28f271984671d0e0efe7323f4b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <michael@minelli.me> Date: Fri, 17 May 2024 18:05:02 +0200 Subject: [PATCH] AssignmentRoute => Get assignment: add possibility to get his exercises related --- ExpressAPI/src/routes/AssignmentRoutes.ts | 52 +++++++++++++++++------ 1 file changed, 40 insertions(+), 12 deletions(-) diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 2055e65..6a54f9c 100644 --- a/ExpressAPI/src/routes/AssignmentRoutes.ts +++ b/ExpressAPI/src/routes/AssignmentRoutes.ts @@ -12,7 +12,7 @@ import logger from '../shared/logging/WinstonLogger.js'; import DojoValidators from '../helpers/DojoValidators.js'; import { Prisma } from '@prisma/client'; import db from '../helpers/DatabaseHelper.js'; -import { Assignment } from '../types/DatabaseTypes.js'; +import { Assignment, Exercise } from '../types/DatabaseTypes.js'; import AssignmentManager from '../managers/AssignmentManager.js'; import fs from 'fs'; import path from 'path'; @@ -66,17 +66,45 @@ class AssignmentRoutes implements RoutesManager { private async getAssignment(req: express.Request, res: express.Response) { const assignment: Partial<Assignment> | undefined = req.boundParams.assignment; - if ( assignment && !assignment.published && !await AssignmentManager.isUserAllowedToAccessAssignment(assignment as Assignment, req.session.profile) ) { - delete assignment.gitlabId; - delete assignment.gitlabLink; - delete assignment.gitlabCreationInfo; - delete assignment.gitlabLastInfo; - delete assignment.gitlabLastInfoDate; - delete assignment.staff; - delete assignment.exercises; - } + if ( assignment ) { + if ( !assignment.published && !await AssignmentManager.isUserAllowedToAccessAssignment(assignment as Assignment, req.session.profile) ) { + delete assignment.gitlabId; + delete assignment.gitlabLink; + delete assignment.gitlabCreationInfo; + delete assignment.gitlabLastInfo; + delete assignment.gitlabLastInfoDate; + delete assignment.staff; + delete assignment.exercises; + } + + const getExercises = req.query.getMyExercises; + let exercises: Array<Omit<Exercise, 'assignment'>> = []; + if ( getExercises ) { + if ( !assignment ) { + return res.status(StatusCodes.NOT_FOUND).send(); + } - return assignment ? req.session.sendResponse(res, StatusCodes.OK, DojoModelsHelper.getFullSerializableObject(assignment)) : res.status(StatusCodes.NOT_FOUND).send(); + exercises = await db.exercise.findMany({ + where : { + assignmentName: assignment.name, + members : { + some: { + id: req.session.profile.id + } + } + }, + include: { + assignment: false, + members : true, + results : true + } + }); + } + + return req.session.sendResponse(res, StatusCodes.OK, DojoModelsHelper.getFullSerializableObject(Object.assign(assignment, { myExercises: exercises }))); + } else { + return res.status(StatusCodes.NOT_FOUND).send(); + } } private async createAssignment(req: express.Request, res: express.Response) { @@ -204,7 +232,7 @@ class AssignmentRoutes implements RoutesManager { } else if ( isUpdate && !req.boundParams.exercise?.isCorrection ) { return req.session.sendResponse(res, StatusCodes.BAD_REQUEST, undefined, 'This exercise is not a correction', DojoStatusCode.EXERCISE_CORRECTION_NOT_EXIST); } - + const lastCommit = await GitlabManager.getRepositoryLastCommit(req.boundParams.exercise!.gitlabId); if ( lastCommit ) { -- GitLab