From dbad7c3fa0e48daca27cddc44f10be8cb4ae86e4 Mon Sep 17 00:00:00 2001
From: Joel von der Weid <joel.von-der-weid@hesge.ch>
Date: Mon, 26 Feb 2024 11:32:23 +0100
Subject: [PATCH] Add sonar option to assignment creation

---
 .../assignment/subcommands/AssignmentCreateCommand.ts | 11 +++++++++--
 NodeApp/src/managers/DojoBackendManager.ts            |  5 +++--
 NodeApp/src/shared                                    |  2 +-
 3 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts
index 3429b75..d84b7e4 100644
--- a/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts
+++ b/NodeApp/src/commander/assignment/subcommands/AssignmentCreateCommand.ts
@@ -7,6 +7,7 @@ import GitlabUser         from '../../../shared/types/Gitlab/GitlabUser';
 import GitlabManager      from '../../../managers/GitlabManager';
 import DojoBackendManager from '../../../managers/DojoBackendManager';
 import Toolbox            from '../../../shared/helpers/Toolbox';
+import SharedConfig       from '../../../shared/config/SharedConfig';
 
 
 class AssignmentCreateCommand extends CommanderCommand {
@@ -21,9 +22,13 @@ class AssignmentCreateCommand extends CommanderCommand {
         .option('-t, --template <string>', 'id or url of the template (http/s and ssh urls are possible)')
         .option('-c, --clone [string]', 'automatically clone the repository (SSH required) in the specified directory (this will create a subdirectory with the assignment name)')
         .action(this.commandAction.bind(this));
+
+        if (SharedConfig.useSonar) {
+            this.command.requiredOption('-s, --sonar', 'add sonar to the code checking process for exercises derived from the assignment');
+        }
     }
 
-    protected async commandAction(options: { name: string, template?: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean }): Promise<void> {
+    protected async commandAction(options: { name: string, template?: string, members_id?: Array<number>, members_username?: Array<string>, clone?: string | boolean, sonar?: boolean}): Promise<void> {
         let members!: Array<GitlabUser> | false;
         let templateIdOrNamespace: string | null = null;
         let assignment!: Assignment;
@@ -66,7 +71,9 @@ class AssignmentCreateCommand extends CommanderCommand {
             console.log(chalk.cyan('Please wait while we are creating the assignment (approximately 10 seconds)...'));
 
             try {
-                assignment = await DojoBackendManager.createAssignment(options.name, members, templateIdOrNamespace);
+                const sonar = (SharedConfig.useSonar ? options.sonar ?? false : false);
+
+                assignment = await DojoBackendManager.createAssignment(options.name, members, templateIdOrNamespace, sonar);
 
                 const oraInfo = (message: string) => {
                     ora({
diff --git a/NodeApp/src/managers/DojoBackendManager.ts b/NodeApp/src/managers/DojoBackendManager.ts
index fcd749d..b4dae90 100644
--- a/NodeApp/src/managers/DojoBackendManager.ts
+++ b/NodeApp/src/managers/DojoBackendManager.ts
@@ -82,7 +82,7 @@ class DojoBackendManager {
         }
     }
 
-    public async createAssignment(name: string, members: Array<GitlabUser>, templateIdOrNamespace: string | null, verbose: boolean = true): Promise<Assignment> {
+    public async createAssignment(name: string, members: Array<GitlabUser>, templateIdOrNamespace: string | null, sonar: boolean = false, verbose: boolean = true): Promise<Assignment> {
         const spinner: ora.Ora = ora('Creating assignment...');
 
         if ( verbose ) {
@@ -92,7 +92,8 @@ class DojoBackendManager {
         try {
             const response = await axios.post<DojoBackendResponse<Assignment>>(this.getApiUrl(ApiRoute.ASSIGNMENT_CREATE), Object.assign({
                                                                                                                                              name   : name,
-                                                                                                                                             members: JSON.stringify(members)
+                                                                                                                                             members: JSON.stringify(members),
+                                                                                                                                             sonar  : sonar
                                                                                                                                          }, templateIdOrNamespace ? { template: templateIdOrNamespace } : {}));
 
             if ( verbose ) {
diff --git a/NodeApp/src/shared b/NodeApp/src/shared
index 9e3f29d..d509efa 160000
--- a/NodeApp/src/shared
+++ b/NodeApp/src/shared
@@ -1 +1 @@
-Subproject commit 9e3f29d2f313ef96944a199da0db39f1827c496a
+Subproject commit d509efa1b35e100446ace49d8e665ca72e5a7afe
-- 
GitLab