diff --git a/ExpressAPI/src/routes/AssignmentRoutes.ts b/ExpressAPI/src/routes/AssignmentRoutes.ts index 2055e65e53cc48674e32a9a8893425acc3fe997c..951afe1c72bf4f59af1ebf37397ae6966233d0d1 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,41 @@ 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 ) { + exercises = await db.exercise.findMany({ + where : { + assignmentName: assignment.name, + members : { + some: { + id: req.session.profile.id + } + } + }, + include: { + assignment: false, + members : true, + results : true + } + }); + } - return assignment ? req.session.sendResponse(res, StatusCodes.OK, DojoModelsHelper.getFullSerializableObject(assignment)) : res.status(StatusCodes.NOT_FOUND).send(); + 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 +228,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 ) {