From 8a4afa832519de96e77aa08a8163786fecd68270 Mon Sep 17 00:00:00 2001 From: Joel von der Weid <joel.von-der-weid@hesge.ch> Date: Tue, 2 Apr 2024 15:17:05 +0200 Subject: [PATCH] Add sonar project creation for exercises --- ExpressAPI/src/helpers/GlobalHelper.ts | 2 +- ExpressAPI/src/routes/ExerciseRoutes.ts | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/ExpressAPI/src/helpers/GlobalHelper.ts b/ExpressAPI/src/helpers/GlobalHelper.ts index 9d5e5e8..c34aac4 100644 --- a/ExpressAPI/src/helpers/GlobalHelper.ts +++ b/ExpressAPI/src/helpers/GlobalHelper.ts @@ -5,7 +5,7 @@ import DojoStatusCode from '../shared/types/Dojo/DojoStatusCode.js'; import { StatusCodes } from 'http-status-codes'; import { GitbeakerRequestError } from '@gitbeaker/requester-utils'; import * as Gitlab from '@gitbeaker/rest'; - +import { AxiosError } from 'axios'; class GlobalHelper { repoCreationFnExecCreator(req: express.Request, res: express.Response, gitlabError: DojoStatusCode, internalError: DojoStatusCode, repositoryToRemove?: Gitlab.ProjectSchema) { diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts index 8f73c0e..6c7d139 100644 --- a/ExpressAPI/src/routes/ExerciseRoutes.ts +++ b/ExpressAPI/src/routes/ExerciseRoutes.ts @@ -27,6 +27,8 @@ import * as Gitlab from '@gitbeaker/rest'; import { ProjectSchema } from '@gitbeaker/rest'; import GitlabTreeFileType from '../shared/types/Gitlab/GitlabTreeFileType.js'; import { GitbeakerRequestError } from '@gitbeaker/requester-utils'; +import SonarProjectCreation from '../shared/types/Sonar/SonarProjectCreation'; +import SonarManager from '../managers/SonarManager'; class ExerciseRoutes implements RoutesManager { @@ -266,6 +268,13 @@ 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'); + // Create Sonar project + let sonarProject: SonarProjectCreation | undefined = undefined; + if ( assignment.useSonar ) { + sonarProject = await GlobalHelper.repoCreationFnExecCreator(req, res, DojoStatusCode.EXERCISE_CREATION_SONAR_ERROR, DojoStatusCode.EXERCISE_CREATION_INTERNAL_ERROR, repository)(() => SonarManager.createProjectFromGitlab(repository.id), 'Sonar project creation error') as SonarProjectCreation; + } + + let exercise: Exercise = await repoCreationFnExec(() => db.exercise.create({ data: { id : exerciseId, @@ -278,6 +287,8 @@ class ExerciseRoutes implements RoutesManager { gitlabCreationDate: new Date(), gitlabLastInfo : repository as unknown as Prisma.JsonObject, gitlabLastInfoDate: new Date(), + sonarKey : sonarProject?.project.key, + sonarCreationInfo : sonarProject?.project, members : { connectOrCreate: [ ...params.members.map(gitlabUser => { return { -- GitLab