diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index ae3d4b9efc6e775f5a5887c16de6165d33bd5d28..5bc2a776db5c87eec632245cd7af3bf4779fb6f2 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -76,6 +76,41 @@ class ExerciseRoutes implements RoutesManager { backend.delete('/exercises/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.deleteExercise.bind(this) as RequestHandler); backend.post('/exercises/:exerciseIdOrUrl/results', SecurityMiddleware.check(false, SecurityCheckType.EXERCISE_SECRET), ParamsValidatorMiddleware.validate(this.resultValidator), this.createResult.bind(this) as RequestHandler); + + backend.get('/exercises', this.getAllExercises.bind(this)); + + backend.get('/exercises/:exerciseIdOrLink/results', SecurityMiddleware.check(true), this.getExerciseResultsByIdOrLink.bind(this)); + } + + private async getExerciseResultsByIdOrLink(req: express.Request, res: express.Response) { + const exerciseIdOrLink = req.params.exerciseIdOrLink; + + + const exercise = await db.exercise.findFirst({ + where: { + OR: [ + { id: exerciseIdOrLink }, + { gitlabLink: exerciseIdOrLink } + ] + } + }); + + if (!exercise) { + return res.status(StatusCodes.NOT_FOUND).send('Exercise not found'); + } + + + const results = await db.result.findMany({ + where: { exerciseId: exercise.id }, + }); + + return res.status(StatusCodes.OK).json(results); + } + + + private async getAllExercises(req: express.Request, res: express.Response) { + const exo = await db.exercise.findMany(); + return req.session.sendResponse(res, StatusCodes.OK, exo); } private getExerciseName(assignment: Assignment, members: Array<Gitlab.UserSchema>, suffix: number): string {