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