Skip to content
Snippets Groups Projects
Commit a3ad5f05 authored by michael.minelli's avatar michael.minelli
Browse files

ExerciseRoute => Remove duplicates & get exercise

parent 0c94879d
No related branches found
No related tags found
No related merge requests found
...@@ -70,16 +70,16 @@ class ExerciseRoutes implements RoutesManager { ...@@ -70,16 +70,16 @@ class ExerciseRoutes implements RoutesManager {
backend.get('/exercises', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.getAllExercises.bind(this) as RequestHandler); backend.get('/exercises', SecurityMiddleware.check(true, SecurityCheckType.ADMIN), this.getAllExercises.bind(this) as RequestHandler);
backend.get('/exercises/:exerciseIdOrUrl/assignment', SecurityMiddleware.check(false, SecurityCheckType.EXERCISE_SECRET), this.getAssignment.bind(this) as RequestHandler); backend.get('/exercises/:exerciseIdOrUrl/assignment', SecurityMiddleware.check(false, SecurityCheckType.EXERCISE_SECRET), this.getAssignment.bind(this) as RequestHandler);
backend.get('/exercises/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.getExercise.bind(this) as RequestHandler);
backend.get('/exercises/:exerciseIdOrUrl/members', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.getExerciseMembers.bind(this) as RequestHandler); backend.get('/exercises/:exerciseIdOrUrl/members', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.getExerciseMembers.bind(this) as RequestHandler);
backend.get('/exercises/:exerciseIdOrUrl/results', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.getExerciseResults.bind(this) as RequestHandler); backend.get('/exercises/:exerciseIdOrUrl/results', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.getExerciseResults.bind(this) as RequestHandler);
backend.delete('/exercises/:exerciseIdOrUrl', SecurityMiddleware.check(true, SecurityCheckType.ADMIN, SecurityCheckType.EXERCISE_MEMBERS), this.deleteExercise.bind(this) as RequestHandler); 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('/users/:userId/exercises', SecurityMiddleware.check(true), this.getUserExercises.bind(this) as RequestHandler);
backend.get('/exercises', this.getAllExercises.bind(this));
backend.get('/exercises/:exerciseIdOrLink/results', SecurityMiddleware.check(true), this.getExerciseResultsByIdOrLink.bind(this)); backend.get('/exercises/:exerciseIdOrLink/results', SecurityMiddleware.check(true), this.getExerciseResultsByIdOrLink.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);
} }
private async getExerciseResultsByIdOrLink(req: express.Request, res: express.Response) { private async getExerciseResultsByIdOrLink(req: express.Request, res: express.Response) {
...@@ -87,30 +87,39 @@ class ExerciseRoutes implements RoutesManager { ...@@ -87,30 +87,39 @@ class ExerciseRoutes implements RoutesManager {
const exercise = await db.exercise.findFirst({ const exercise = await db.exercise.findFirst({
where: { where: {
OR: [ OR: [ { id: exerciseIdOrLink }, { gitlabLink: exerciseIdOrLink } ]
{ id: exerciseIdOrLink }, }
{ gitlabLink: exerciseIdOrLink } });
]
}
});
if (!exercise) { if ( !exercise ) {
return res.status(StatusCodes.NOT_FOUND).send('Exercise not found'); return res.status(StatusCodes.NOT_FOUND).send('Exercise not found');
} }
const results = await db.result.findMany({ const results = await db.result.findMany({
where: { exerciseId: exercise.id }, where: { exerciseId: exercise.id }
}); });
return res.status(StatusCodes.OK).json(results); return res.status(StatusCodes.OK).json(results);
} }
private async getAllExercises(req: express.Request, res: express.Response) { private async getAllExercises(req: express.Request, res: express.Response) {
const exo = await db.exercise.findMany(); const exos = await db.exercise.findMany();
return req.session.sendResponse(res, StatusCodes.OK, exo);
return req.session.sendResponse(res, StatusCodes.OK, exos);
}
private async getUserExercises(req: express.Request, res: express.Response) {
if ( req.boundParams.user ) {
if ( req.session.profile.isAdmin || req.session.profile.id === req.boundParams.user.id ) {
return req.session.sendResponse(res, StatusCodes.OK, req.boundParams.user.exercises.filter(exercise => !exercise.deleted));
} else {
return req.session.sendResponse(res, StatusCodes.FORBIDDEN);
}
} else {
return req.session.sendResponse(res, StatusCodes.NOT_FOUND);
}
} }
private getExerciseName(assignment: Assignment, members: Array<Gitlab.UserSchema>, suffix: number): string { private getExerciseName(assignment: Assignment, members: Array<Gitlab.UserSchema>, suffix: number): string {
...@@ -119,6 +128,10 @@ class ExerciseRoutes implements RoutesManager { ...@@ -119,6 +128,10 @@ class ExerciseRoutes implements RoutesManager {
return `DojoEx - ${ assignment.name } - ${ memberNames }${ suffixString }`; return `DojoEx - ${ assignment.name } - ${ memberNames }${ suffixString }`;
} }
private async getExercise(req: express.Request, res: express.Response) {
return req.session.sendResponse(res, StatusCodes.OK, req.boundParams.exercise!);
}
private async getExerciseMembers(req: express.Request, res: express.Response) { private async getExerciseMembers(req: express.Request, res: express.Response) {
const repoId = req.boundParams.exercise!.gitlabId; const repoId = req.boundParams.exercise!.gitlabId;
...@@ -168,13 +181,6 @@ class ExerciseRoutes implements RoutesManager { ...@@ -168,13 +181,6 @@ class ExerciseRoutes implements RoutesManager {
return `dojo-ex_${ (assignment.gitlabLastInfo as unknown as Gitlab.ProjectSchema).path }_${ exerciseId }`; return `dojo-ex_${ (assignment.gitlabLastInfo as unknown as Gitlab.ProjectSchema).path }_${ exerciseId }`;
} }
// Get all exercise
private async getAllExercises(req: express.Request, res: express.Response) {
const exos = await db.exercise.findMany();
return req.session.sendResponse(res, StatusCodes.OK, exos);
}
private async checkExerciseLimit(assignment: Assignment, members: Array<Gitlab.UserSchema>): Promise<Array<Gitlab.UserSchema>> { private async checkExerciseLimit(assignment: Assignment, members: Array<Gitlab.UserSchema>): Promise<Array<Gitlab.UserSchema>> {
const exercises: Array<Exercise> | undefined = await ExerciseManager.getFromAssignment(assignment.name, false, { members: true }); const exercises: Array<Exercise> | undefined = await ExerciseManager.getFromAssignment(assignment.name, false, { members: true });
...@@ -260,33 +266,42 @@ class ExerciseRoutes implements RoutesManager { ...@@ -260,33 +266,42 @@ class ExerciseRoutes implements RoutesManager {
await repoCreationFnExec(async () => Promise.all([ ...new Set([ ...assignment.staff, ...params.members ].map(member => member.id)) ].map(GlobalHelper.addRepoMember(repository.id))), 'Add repository members error'); await repoCreationFnExec(async () => Promise.all([ ...new Set([ ...assignment.staff, ...params.members ].map(member => member.id)) ].map(GlobalHelper.addRepoMember(repository.id))), 'Add repository members error');
const exercise: Exercise = await repoCreationFnExec(() => db.exercise.create({ let exercise: Exercise = await repoCreationFnExec(() => db.exercise.create({
data: { data: {
id : exerciseId, id : exerciseId,
assignmentName : assignment.name, assignmentName : assignment.name,
name : repository.name, name : repository.name,
secret : secret, secret : secret,
gitlabId : repository.id, gitlabId : repository.id,
gitlabLink : repository.web_url, gitlabLink : repository.web_url,
gitlabCreationInfo: repository as unknown as Prisma.JsonObject, gitlabCreationInfo: repository as unknown as Prisma.JsonObject,
gitlabCreationDate: new Date(), gitlabCreationDate: new Date(),
gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfo : repository as unknown as Prisma.JsonObject,
gitlabLastInfoDate: new Date(), gitlabLastInfoDate: new Date(),
members : { members : {
connectOrCreate: [ ...params.members.map(gitlabUser => { connectOrCreate: [ ...params.members.map(gitlabUser => {
return { return {
create: { create: {
id : gitlabUser.id, id : gitlabUser.id,
gitlabUsername: gitlabUser.name gitlabUsername: gitlabUser.name
}, },
where : { where : {
id: gitlabUser.id id: gitlabUser.id
} }
}; };
}) ] }) ]
} }
} }
})) as Exercise; })) as Exercise;
exercise = await ExerciseManager.get(exercise.id, {
members : true,
assignment: {
include: {
staff: true
}
}
}) as Exercise;
req.session.sendResponse(res, StatusCodes.OK, exercise); req.session.sendResponse(res, StatusCodes.OK, exercise);
return; return;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment