From 444a89ce8317aa09582ecbabbfbb892269d65fae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C3=ABl=20Minelli?= <git@minelli.me> Date: Mon, 25 Mar 2024 01:09:06 +0100 Subject: [PATCH] AssignmentManager => Fix getByUrl function --- ExpressAPI/src/managers/AssignmentManager.ts | 28 +++++++++++++++----- ExpressAPI/src/managers/ExerciseManager.ts | 14 +++++----- ExpressAPI/src/routes/ExerciseRoutes.ts | 4 +-- 3 files changed, 30 insertions(+), 16 deletions(-) diff --git a/ExpressAPI/src/managers/AssignmentManager.ts b/ExpressAPI/src/managers/AssignmentManager.ts index 0f2bc54..ad51e6b 100644 --- a/ExpressAPI/src/managers/AssignmentManager.ts +++ b/ExpressAPI/src/managers/AssignmentManager.ts @@ -17,21 +17,35 @@ class AssignmentManager { async getByName(name: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> { return await db.assignment.findUnique({ - where : { + where : { name: name - }, include: include + }, + include: include }) as unknown as Assignment ?? undefined; } - getByGitlabLink(gitlabLink: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> { - const name = gitlabLink.replace('.git', '').split('/').pop()!; + async getByGitlabLink(gitlabLink: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> { + const nameInUrl = gitlabLink.replace('.git', '').split('/').pop()!; - return this.getByName(name, include); + const result = await db.assignment.findMany({ + where : { + gitlabLink: { + endsWith: `/${ nameInUrl }` + } + }, + include: include + }) as Array<Assignment>; + + return result.length > 0 ? result[0] : undefined; } get(nameOrUrl: string, include: Prisma.AssignmentInclude | undefined = undefined): Promise<Assignment | undefined> { - // We can use the same function for both name and url because the name is the last part of the url and the name extraction from the url doesn't corrupt the name - return this.getByGitlabLink(nameOrUrl, include); + if ( nameOrUrl.includes('://') ) { + return this.getByGitlabLink(nameOrUrl, include); + } else { + return this.getByName(nameOrUrl, include); + } + } } diff --git a/ExpressAPI/src/managers/ExerciseManager.ts b/ExpressAPI/src/managers/ExerciseManager.ts index 720827d..8020352 100644 --- a/ExpressAPI/src/managers/ExerciseManager.ts +++ b/ExpressAPI/src/managers/ExerciseManager.ts @@ -15,13 +15,13 @@ class ExerciseManager { }) as unknown as Exercise ?? undefined; } - async getFromAssignment(assignmentName: string, include: Prisma.ExerciseInclude | undefined = undefined): Promise<Array<Exercise> | undefined> { - return await db.exercise.findMany({ - where : { - assignmentName: assignmentName - }, - include: include - }) as Array<Exercise> ?? undefined; + getFromAssignment(assignmentName: string, include: Prisma.ExerciseInclude | undefined = undefined): Promise<Array<Exercise>> { + return db.exercise.findMany({ + where : { + assignmentName: assignmentName + }, + include: include + }) as Promise<Array<Exercise>>; } } diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index 3d8c3e1..d5cb5b6 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -88,9 +88,9 @@ class ExerciseRoutes implements RoutesManager { } private async checkExerciseLimit(assignment: Assignment, members: Array<GitlabUser>): Promise<Array<GitlabUser>> { - const exercises: Array<Exercise> | undefined = await ExerciseManager.getFromAssignment(assignment.name, { members: true }); + const exercises: Array<Exercise> = await ExerciseManager.getFromAssignment(assignment.name, { members: true }); const reachedLimitUsers: Array<GitlabUser> = []; - if ( exercises ) { + if ( exercises.length > 0 ) { for ( const member of members ) { const exerciseCount: number = exercises.filter(exercise => exercise.members.findIndex(exerciseMember => exerciseMember.id === member.id) !== -1).length; if ( exerciseCount >= Config.exercise.maxPerAssignment ) { -- GitLab