diff --git a/ExpressAPI/src/helpers/GlobalHelper.ts b/ExpressAPI/src/helpers/GlobalHelper.ts index 9d5e5e87a7cebbe00c2c70d4a5f47aed1a754144..c34aac42d85b26401f08a0cf3445e365349c6ae4 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 8f73c0eeb12d884b253106ac0b4bba8d04e126e7..6c7d139a8c57819b7a7dadef0a64b36b0b0de29f 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 {