diff --git a/CHANGELOG.md b/CHANGELOG.md
index 526064f4e4030ef5bb57219fa5c6a17096c84f20..e50720ff721a8d8944a84da86489a0e3c3497cb6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -17,8 +17,13 @@
 - No modifications / Keep major and minors versions in sync with all parts of the project
 -->
 
+## 3.2.0 (???)
 
-## 3.1.0 (???)
+### 🀏 Minor change
+- **Exercices**: Set names of students in exercise name in alphabetical order
+
+
+## 3.1.0 (2023-12-06)
 
 ### πŸ”¨ Internal / Developers
 - **Typescript**: Add linter (ESLint)
diff --git a/ExpressAPI/.env.vault b/ExpressAPI/.env.vault
index ec218cfc3fc297e20f22276920196b309fa3db9e..5d19782892be2d4b206459481dc142f69aebb60d 100644
--- a/ExpressAPI/.env.vault
+++ b/ExpressAPI/.env.vault
@@ -4,11 +4,11 @@
 #/--------------------------------------------------/
 
 # development
-DOTENV_VAULT_DEVELOPMENT="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"
+DOTENV_VAULT_DEVELOPMENT="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"
 
 # production
-DOTENV_VAULT_PRODUCTION="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"
+DOTENV_VAULT_PRODUCTION="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"
 
 # test
-DOTENV_VAULT_TEST="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"
+DOTENV_VAULT_TEST="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"
 
diff --git a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
index b5e4c6f16618b4e065c177bab57b516dd3e9e150..06c62978c2208dbe211875b1eba9227f3808a4ef 100644
--- a/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
+++ b/ExpressAPI/assets/OpenAPI/OpenAPI.yaml
@@ -1,7 +1,7 @@
 openapi: 3.1.0
 info:
     title: Dojo API
-    version: 3.1.3
+    version: 3.2.0
     description: |
         **Backend API of the Dojo project.**
         
diff --git a/ExpressAPI/package-lock.json b/ExpressAPI/package-lock.json
index 6440e5e381d4e192fdcab1f783af7c4868f46c5e..7f4321f0646fcdf72220861400cb3bf2dc221dc2 100644
--- a/ExpressAPI/package-lock.json
+++ b/ExpressAPI/package-lock.json
@@ -1,12 +1,12 @@
 {
     "name": "dojo_backend_api",
-    "version": "3.1.0",
+    "version": "3.2.0",
     "lockfileVersion": 3,
     "requires": true,
     "packages": {
         "": {
             "name": "dojo_backend_api",
-            "version": "3.1.0",
+            "version": "3.2.0",
             "license": "AGPLv3",
             "dependencies": {
                 "@prisma/client": "^5.6.0",
@@ -50,6 +50,7 @@
                 "@types/uuid": "^9.0.7",
                 "@typescript-eslint/eslint-plugin": "^6.13.2",
                 "@typescript-eslint/parser": "^6.13.2",
+                "dotenv-cli": "^7.3.0",
                 "dotenv-vault": "^1.25.0",
                 "genversion": "^3.1.1",
                 "nodemon": "^3.0.2",
@@ -2298,6 +2299,21 @@
                 "url": "https://github.com/motdotla/dotenv?sponsor=1"
             }
         },
+        "node_modules/dotenv-cli": {
+            "version": "7.3.0",
+            "resolved": "https://registry.npmjs.org/dotenv-cli/-/dotenv-cli-7.3.0.tgz",
+            "integrity": "sha512-314CA4TyK34YEJ6ntBf80eUY+t1XaFLyem1k9P0sX1gn30qThZ5qZr/ZwE318gEnzyYP9yj9HJk6SqwE0upkfw==",
+            "dev": true,
+            "dependencies": {
+                "cross-spawn": "^7.0.3",
+                "dotenv": "^16.3.0",
+                "dotenv-expand": "^10.0.0",
+                "minimist": "^1.2.6"
+            },
+            "bin": {
+                "dotenv": "cli.js"
+            }
+        },
         "node_modules/dotenv-expand": {
             "version": "10.0.0",
             "resolved": "https://registry.npmjs.org/dotenv-expand/-/dotenv-expand-10.0.0.tgz",
diff --git a/ExpressAPI/package.json b/ExpressAPI/package.json
index ad25538f7ae3b48611a3be7270654a8c390011ff..d2e1db43a36aac6028c8580257ede4a577cbb5cb 100644
--- a/ExpressAPI/package.json
+++ b/ExpressAPI/package.json
@@ -1,24 +1,28 @@
 {
     "name"           : "dojo_backend_api",
     "description"    : "Backend API of the Dojo project",
-    "version"        : "3.1.3",
+    "version"        : "3.2.0",
     "license"        : "AGPLv3",
     "author"         : "MichaΓ«l Minelli <dojo@minelli.me>",
     "main"           : "dist/src/app.js",
     "scripts"        : {
-        "clean"             : "rm -R dist/*",
-        "dotenv:build"      : "npx dotenv-vault local build",
-        "lint"              : "npx eslint .",
-        "genversion"        : "npx genversion -s -e src/config/Version.ts",
-        "build:openapi"     : "sed -i -r \"1,20 s/^\\([ ]*version:\\).*$/\\1 $(jq -r .version package.json)/\" assets/OpenAPI/OpenAPI.yaml; npx @redocly/cli build-docs assets/OpenAPI/OpenAPI.yaml --output=assets/OpenAPI/redoc.html",
-        "build:project"     : "npm run genversion; npx prisma generate && npx tsc --project ./ && cp -R assets dist/assets",
-        "build"             : "npm run build:openapi; npm run build:project",
-        "database:migrate"  : "npx prisma migrate deploy",
-        "database:seed"     : "npm run genversion; npx prisma db seed",
-        "database:deploy"   : "npm run database:migrate && npm run database:seed",
-        "start:dev"         : "npm run genversion; npx nodemon src/app.ts",
-        "start:prod"        : "npm run genversion; NODE_ENV=production npx node --max-http-header-size=1048576 dist/src/app.js",
-        "start:migrate:prod": "npm run genversion; npm run database:deploy && npm run start:prod"
+        "clean"                  : "rm -R dist/*",
+        "dotenv:build"           : "npx dotenv-vault local build",
+        "lint"                   : "npx eslint .",
+        "genversion"             : "npx genversion -s -e src/config/Version.ts",
+        "build:openapi"          : "sed -i -r \"1,20 s/^\\([ ]*version:\\).*$/\\1 $(jq -r .version package.json)/\" assets/OpenAPI/OpenAPI.yaml; npx @redocly/cli build-docs assets/OpenAPI/OpenAPI.yaml --output=assets/OpenAPI/redoc.html",
+        "build:project"          : "npm run genversion; npx prisma generate && npx tsc --project ./ && cp -R assets dist/assets",
+        "build"                  : "npm run build:openapi; npm run build:project",
+        "database:migrate:create": "npx dotenv -e .env.development -- npx prisma migrate dev",
+        "database:migrate:dev"   : "npx dotenv -e .env.development -- npx prisma migrate deploy",
+        "database:migrate:prod"  : "npx prisma migrate deploy",
+        "database:seed:dev"      : "npm run genversion; npm run build; npx dotenv -e .env.development -- npx prisma db seed",
+        "database:seed:prod"     : "npm run genversion; npm run build; NODE_ENV=production npx prisma db seed",
+        "database:deploy:dev"    : "npm run database:migrate:dev && npm run database:seed:dev",
+        "database:deploy:prod"   : "npm run database:migrate:prod && npm run database:seed:prod",
+        "start:dev"              : "npm run genversion; npx nodemon src/app.ts",
+        "start:prod"             : "npm run genversion; NODE_ENV=production npx node --max-http-header-size=1048576 dist/src/app.js",
+        "start:migrate:prod"     : "npm run genversion; npm run database:deploy:prod && npm run start:prod"
     },
     "prisma"         : {
         "seed": "node dist/prisma/seed"
@@ -65,6 +69,7 @@
         "@types/uuid"                     : "^9.0.7",
         "@typescript-eslint/eslint-plugin": "^6.13.2",
         "@typescript-eslint/parser"       : "^6.13.2",
+        "dotenv-cli"                      : "^7.3.0",
         "dotenv-vault"                    : "^1.25.0",
         "genversion"                      : "^3.1.1",
         "nodemon"                         : "^3.0.2",
diff --git a/ExpressAPI/prisma/seed.ts b/ExpressAPI/prisma/seed.ts
index ec4b605c97444027c3ce74f6cde381da9b6d7f1e..20249cf1ee8d9779400f3483413eb0b10d643205 100644
--- a/ExpressAPI/prisma/seed.ts
+++ b/ExpressAPI/prisma/seed.ts
@@ -1,11 +1,30 @@
 require('../src/InitialImports'); // ATTENTION : These lines MUST be the first of this file
 
+import * as process from 'process';
+import SharedConfig from '../src/shared/config/SharedConfig';
 import { UserRole } from '@prisma/client';
 import logger       from '../src/shared/logging/WinstonLogger';
 import db           from '../src/helpers/DatabaseHelper';
 
 
 async function main() {
+    await users();
+    await assignments();
+    await exercises();
+    await results();
+}
+
+main().then(async () => {
+    await db.$disconnect();
+}).catch(async (e) => {
+    logger.error(e);
+    await db.$disconnect();
+    process.exit(1);
+});
+
+//----------------------------------------------------------------------------------------------------------------------------------------------------------
+
+async function users() {
     await db.user.upsert({
                              where : { id: 142 },
                              update: {},
@@ -17,12 +36,1547 @@ async function main() {
                                  deleted       : false
                              }
                          });
+    await db.user.upsert({
+                             where : { id: 133 },
+                             update: {},
+                             create: {
+                                 id            : 133,
+                                 gitlabUsername: 'orestis.malaspin',
+                                 gitlabLastInfo: {},
+                                 role          : UserRole.ADMIN,
+                                 deleted       : false
+                             }
+                         });
+    if ( !SharedConfig.production ) {
+        await db.user.upsert({
+                                 where : { id: 627 },
+                                 update: {},
+                                 create: {
+                                     id            : 627,
+                                     gitlabUsername: 'kelly.nguyen',
+                                     gitlabLastInfo: {},
+                                     role          : UserRole.ADMIN,
+                                     deleted       : false
+                                 }
+                             });
+        await db.user.upsert({
+                                 where : { id: 623 },
+                                 update: {},
+                                 create: {
+                                     id            : 623,
+                                     gitlabUsername: 'bedran.sezer',
+                                     gitlabLastInfo: {},
+                                     role          : UserRole.ADMIN,
+                                     deleted       : false
+                                 }
+                             });
+        await db.user.upsert({
+                                 where : { id: 642 },
+                                 update: {},
+                                 create: {
+                                     id            : 642,
+                                     gitlabUsername: 'vincent.steinman',
+                                     gitlabLastInfo: {},
+                                     role          : UserRole.ADMIN,
+                                     deleted       : false
+                                 }
+                             });
+    }
 }
 
-main().then(async () => {
-    await db.$disconnect();
-}).catch(async (e) => {
-    logger.error(e);
-    await db.$disconnect();
-    process.exit(1);
-});
\ No newline at end of file
+async function assignments() {
+    if ( !SharedConfig.production ) {
+        await db.assignment.upsert({
+                                       where : { name: 'c_hello_world' },
+                                       update: {},
+                                       create: {
+                                           name              : 'c_hello_world',
+                                           gitlabId          : 13862,
+                                           gitlabLink        : 'https://gitedu.hesge.ch/dojodev/assignment/c_hello_world',
+                                           gitlabCreationInfo: {
+                                               'id'                                              : 13862,
+                                               'description'                                     : 'Dojo assignment repository.\n\nName of the assignment: c_hello_world',
+                                               'name'                                            : 'c_hello_world',
+                                               'name_with_namespace'                             : 'DojoDev / Assignment / c_hello_world',
+                                               'path'                                            : 'c_hello_world',
+                                               'path_with_namespace'                             : 'dojodev/assignment/c_hello_world',
+                                               'created_at'                                      : '2023-11-02T22:20:15.239+01:00',
+                                               'default_branch'                                  : 'main',
+                                               'tag_list'                                        : [],
+                                               'topics'                                          : [],
+                                               'ssh_url_to_repo'                                 : 'ssh://git@ssh.hesge.ch:10572/dojodev/assignment/c_hello_world.git',
+                                               'http_url_to_repo'                                : 'https://gitedu.hesge.ch/dojodev/assignment/c_hello_world.git',
+                                               'web_url'                                         : 'https://gitedu.hesge.ch/dojodev/assignment/c_hello_world',
+                                               'readme_url'                                      : null,
+                                               'forks_count'                                     : 0,
+                                               'avatar_url'                                      : null,
+                                               'star_count'                                      : 0,
+                                               'last_activity_at'                                : '2023-11-02T22:20:15.239+01:00',
+                                               'namespace'                                       : {
+                                                   'id'        : 14190,
+                                                   'name'      : 'Assignment',
+                                                   'path'      : 'assignment',
+                                                   'kind'      : 'group',
+                                                   'full_path' : 'dojodev/assignment',
+                                                   'parent_id' : 14189,
+                                                   'avatar_url': null,
+                                                   'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/assignment'
+                                               },
+                                               '_links'                                          : {
+                                                   'self'          : 'https://gitedu.hesge.ch/api/v4/projects/13862',
+                                                   'issues'        : 'https://gitedu.hesge.ch/api/v4/projects/13862/issues',
+                                                   'merge_requests': 'https://gitedu.hesge.ch/api/v4/projects/13862/merge_requests',
+                                                   'repo_branches' : 'https://gitedu.hesge.ch/api/v4/projects/13862/repository/branches',
+                                                   'labels'        : 'https://gitedu.hesge.ch/api/v4/projects/13862/labels',
+                                                   'events'        : 'https://gitedu.hesge.ch/api/v4/projects/13862/events',
+                                                   'members'       : 'https://gitedu.hesge.ch/api/v4/projects/13862/members',
+                                                   'cluster_agents': 'https://gitedu.hesge.ch/api/v4/projects/13862/cluster_agents'
+                                               },
+                                               'packages_enabled'                                : true,
+                                               'empty_repo'                                      : true,
+                                               'archived'                                        : false,
+                                               'visibility'                                      : 'private',
+                                               'resolve_outdated_diff_discussions'               : false,
+                                               'container_expiration_policy'                     : {
+                                                   'cadence'        : '1d',
+                                                   'enabled'        : false,
+                                                   'keep_n'         : 10,
+                                                   'older_than'     : '90d',
+                                                   'name_regex'     : '.*',
+                                                   'name_regex_keep': null,
+                                                   'next_run_at'    : '2023-11-03T22:20:15.275+01:00'
+                                               },
+                                               'issues_enabled'                                  : true,
+                                               'merge_requests_enabled'                          : true,
+                                               'wiki_enabled'                                    : false,
+                                               'jobs_enabled'                                    : true,
+                                               'snippets_enabled'                                : true,
+                                               'container_registry_enabled'                      : true,
+                                               'service_desk_enabled'                            : false,
+                                               'service_desk_address'                            : null,
+                                               'can_create_merge_request_in'                     : true,
+                                               'issues_access_level'                             : 'enabled',
+                                               'repository_access_level'                         : 'enabled',
+                                               'merge_requests_access_level'                     : 'enabled',
+                                               'forking_access_level'                            : 'enabled',
+                                               'wiki_access_level'                               : 'disabled',
+                                               'builds_access_level'                             : 'enabled',
+                                               'snippets_access_level'                           : 'enabled',
+                                               'pages_access_level'                              : 'private',
+                                               'analytics_access_level'                          : 'enabled',
+                                               'container_registry_access_level'                 : 'enabled',
+                                               'security_and_compliance_access_level'            : 'private',
+                                               'releases_access_level'                           : 'enabled',
+                                               'environments_access_level'                       : 'enabled',
+                                               'feature_flags_access_level'                      : 'enabled',
+                                               'infrastructure_access_level'                     : 'enabled',
+                                               'monitor_access_level'                            : 'enabled',
+                                               'emails_disabled'                                 : null,
+                                               'shared_runners_enabled'                          : true,
+                                               'lfs_enabled'                                     : true,
+                                               'creator_id'                                      : 1076,
+                                               'import_url'                                      : 'https://gitedu.hesge.ch/dojodev/template/empty_template.git',
+                                               'import_type'                                     : 'git',
+                                               'import_status'                                   : 'scheduled',
+                                               'import_error'                                    : null,
+                                               'open_issues_count'                               : 0,
+                                               'description_html'                                : '<p data-sourcepos="1:1-1:27" dir="auto">Dojo assignment repository.</p>\n<p data-sourcepos="3:1-3:37" dir="auto">Name of the assignment: c_hello_world</p>',
+                                               'updated_at'                                      : '2023-11-02T22:20:15.239+01:00',
+                                               'ci_default_git_depth'                            : 20,
+                                               'ci_forward_deployment_enabled'                   : true,
+                                               'ci_job_token_scope_enabled'                      : false,
+                                               'ci_separated_caches'                             : true,
+                                               'ci_allow_fork_pipelines_to_run_in_parent_project': true,
+                                               'build_git_strategy'                              : 'fetch',
+                                               'keep_latest_artifact'                            : true,
+                                               'restrict_user_defined_variables'                 : false,
+                                               'runners_token'                                   : 'GR1348941TZKVMY5xH7ecxwLxn1x7',
+                                               'runner_token_expiration_interval'                : null,
+                                               'group_runners_enabled'                           : true,
+                                               'auto_cancel_pending_pipelines'                   : 'enabled',
+                                               'build_timeout'                                   : 3600,
+                                               'auto_devops_enabled'                             : false,
+                                               'auto_devops_deploy_strategy'                     : 'continuous',
+                                               'ci_config_path'                                  : '',
+                                               'public_jobs'                                     : true,
+                                               'shared_with_groups'                              : [],
+                                               'only_allow_merge_if_pipeline_succeeds'           : false,
+                                               'allow_merge_on_skipped_pipeline'                 : null,
+                                               'request_access_enabled'                          : true,
+                                               'only_allow_merge_if_all_discussions_are_resolved': false,
+                                               'remove_source_branch_after_merge'                : true,
+                                               'printing_merge_request_link_enabled'             : true,
+                                               'merge_method'                                    : 'merge',
+                                               'squash_option'                                   : 'default_off',
+                                               'enforce_auth_checks_on_uploads'                  : true,
+                                               'suggestion_commit_message'                       : null,
+                                               'merge_commit_template'                           : null,
+                                               'squash_commit_template'                          : null,
+                                               'issue_branch_template'                           : null,
+                                               'autoclose_referenced_issues'                     : true
+                                           },
+                                           gitlabLastInfo    : {
+                                               'id'                                              : 13862,
+                                               'description'                                     : 'Dojo assignment repository.\n\nName of the assignment: c_hello_world',
+                                               'name'                                            : 'c_hello_world',
+                                               'name_with_namespace'                             : 'DojoDev / Assignment / c_hello_world',
+                                               'path'                                            : 'c_hello_world',
+                                               'path_with_namespace'                             : 'dojodev/assignment/c_hello_world',
+                                               'created_at'                                      : '2023-11-02T22:20:15.239+01:00',
+                                               'default_branch'                                  : 'main',
+                                               'tag_list'                                        : [],
+                                               'topics'                                          : [],
+                                               'ssh_url_to_repo'                                 : 'ssh://git@ssh.hesge.ch:10572/dojodev/assignment/c_hello_world.git',
+                                               'http_url_to_repo'                                : 'https://gitedu.hesge.ch/dojodev/assignment/c_hello_world.git',
+                                               'web_url'                                         : 'https://gitedu.hesge.ch/dojodev/assignment/c_hello_world',
+                                               'readme_url'                                      : null,
+                                               'forks_count'                                     : 0,
+                                               'avatar_url'                                      : null,
+                                               'star_count'                                      : 0,
+                                               'last_activity_at'                                : '2023-11-02T22:20:15.239+01:00',
+                                               'namespace'                                       : {
+                                                   'id'        : 14190,
+                                                   'name'      : 'Assignment',
+                                                   'path'      : 'assignment',
+                                                   'kind'      : 'group',
+                                                   'full_path' : 'dojodev/assignment',
+                                                   'parent_id' : 14189,
+                                                   'avatar_url': null,
+                                                   'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/assignment'
+                                               },
+                                               '_links'                                          : {
+                                                   'self'          : 'https://gitedu.hesge.ch/api/v4/projects/13862',
+                                                   'issues'        : 'https://gitedu.hesge.ch/api/v4/projects/13862/issues',
+                                                   'merge_requests': 'https://gitedu.hesge.ch/api/v4/projects/13862/merge_requests',
+                                                   'repo_branches' : 'https://gitedu.hesge.ch/api/v4/projects/13862/repository/branches',
+                                                   'labels'        : 'https://gitedu.hesge.ch/api/v4/projects/13862/labels',
+                                                   'events'        : 'https://gitedu.hesge.ch/api/v4/projects/13862/events',
+                                                   'members'       : 'https://gitedu.hesge.ch/api/v4/projects/13862/members',
+                                                   'cluster_agents': 'https://gitedu.hesge.ch/api/v4/projects/13862/cluster_agents'
+                                               },
+                                               'packages_enabled'                                : true,
+                                               'empty_repo'                                      : true,
+                                               'archived'                                        : false,
+                                               'visibility'                                      : 'private',
+                                               'resolve_outdated_diff_discussions'               : false,
+                                               'container_expiration_policy'                     : {
+                                                   'cadence'        : '1d',
+                                                   'enabled'        : false,
+                                                   'keep_n'         : 10,
+                                                   'older_than'     : '90d',
+                                                   'name_regex'     : '.*',
+                                                   'name_regex_keep': null,
+                                                   'next_run_at'    : '2023-11-03T22:20:15.275+01:00'
+                                               },
+                                               'issues_enabled'                                  : true,
+                                               'merge_requests_enabled'                          : true,
+                                               'wiki_enabled'                                    : false,
+                                               'jobs_enabled'                                    : true,
+                                               'snippets_enabled'                                : true,
+                                               'container_registry_enabled'                      : true,
+                                               'service_desk_enabled'                            : false,
+                                               'service_desk_address'                            : null,
+                                               'can_create_merge_request_in'                     : true,
+                                               'issues_access_level'                             : 'enabled',
+                                               'repository_access_level'                         : 'enabled',
+                                               'merge_requests_access_level'                     : 'enabled',
+                                               'forking_access_level'                            : 'enabled',
+                                               'wiki_access_level'                               : 'disabled',
+                                               'builds_access_level'                             : 'enabled',
+                                               'snippets_access_level'                           : 'enabled',
+                                               'pages_access_level'                              : 'private',
+                                               'analytics_access_level'                          : 'enabled',
+                                               'container_registry_access_level'                 : 'enabled',
+                                               'security_and_compliance_access_level'            : 'private',
+                                               'releases_access_level'                           : 'enabled',
+                                               'environments_access_level'                       : 'enabled',
+                                               'feature_flags_access_level'                      : 'enabled',
+                                               'infrastructure_access_level'                     : 'enabled',
+                                               'monitor_access_level'                            : 'enabled',
+                                               'emails_disabled'                                 : null,
+                                               'shared_runners_enabled'                          : true,
+                                               'lfs_enabled'                                     : true,
+                                               'creator_id'                                      : 1076,
+                                               'import_url'                                      : 'https://gitedu.hesge.ch/dojodev/template/empty_template.git',
+                                               'import_type'                                     : 'git',
+                                               'import_status'                                   : 'scheduled',
+                                               'import_error'                                    : null,
+                                               'open_issues_count'                               : 0,
+                                               'description_html'                                : '<p data-sourcepos="1:1-1:27" dir="auto">Dojo assignment repository.</p>\n<p data-sourcepos="3:1-3:37" dir="auto">Name of the assignment: c_hello_world</p>',
+                                               'updated_at'                                      : '2023-11-02T22:20:15.239+01:00',
+                                               'ci_default_git_depth'                            : 20,
+                                               'ci_forward_deployment_enabled'                   : true,
+                                               'ci_job_token_scope_enabled'                      : false,
+                                               'ci_separated_caches'                             : true,
+                                               'ci_allow_fork_pipelines_to_run_in_parent_project': true,
+                                               'build_git_strategy'                              : 'fetch',
+                                               'keep_latest_artifact'                            : true,
+                                               'restrict_user_defined_variables'                 : false,
+                                               'runners_token'                                   : 'GR1348941TZKVMY5xH7ecxwLxn1x7',
+                                               'runner_token_expiration_interval'                : null,
+                                               'group_runners_enabled'                           : true,
+                                               'auto_cancel_pending_pipelines'                   : 'enabled',
+                                               'build_timeout'                                   : 3600,
+                                               'auto_devops_enabled'                             : false,
+                                               'auto_devops_deploy_strategy'                     : 'continuous',
+                                               'ci_config_path'                                  : '',
+                                               'public_jobs'                                     : true,
+                                               'shared_with_groups'                              : [],
+                                               'only_allow_merge_if_pipeline_succeeds'           : false,
+                                               'allow_merge_on_skipped_pipeline'                 : null,
+                                               'request_access_enabled'                          : true,
+                                               'only_allow_merge_if_all_discussions_are_resolved': false,
+                                               'remove_source_branch_after_merge'                : true,
+                                               'printing_merge_request_link_enabled'             : true,
+                                               'merge_method'                                    : 'merge',
+                                               'squash_option'                                   : 'default_off',
+                                               'enforce_auth_checks_on_uploads'                  : true,
+                                               'suggestion_commit_message'                       : null,
+                                               'merge_commit_template'                           : null,
+                                               'squash_commit_template'                          : null,
+                                               'issue_branch_template'                           : null,
+                                               'autoclose_referenced_issues'                     : true
+                                           },
+                                           gitlabLastInfoDate: new Date('2021-10-14T14:20:15.239Z'),
+                                           published         : false
+                                       }
+                                   });
+        await db.assignment.upsert({
+                                       where : { name: 'Technique de compilation - TP' },
+                                       update: {},
+                                       create: {
+                                           name              : 'Technique de compilation - TP',
+                                           gitlabId          : 13893,
+                                           gitlabLink        : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp',
+                                           gitlabCreationInfo: {
+                                               'id'                                              : 13893,
+                                               'description'                                     : 'Dojo assignment repository.\n\nName of the assignment: Technique de compilation - TP',
+                                               'name'                                            : 'Technique de compilation - TP',
+                                               'name_with_namespace'                             : 'DojoDev / Assignment / Technique de compilation - TP',
+                                               'path'                                            : 'technique-de-compilation-tp',
+                                               'path_with_namespace'                             : 'dojodev/assignment/technique-de-compilation-tp',
+                                               'created_at'                                      : '2023-11-07T21:35:48.454+01:00',
+                                               'default_branch'                                  : 'main',
+                                               'tag_list'                                        : [],
+                                               'topics'                                          : [],
+                                               'ssh_url_to_repo'                                 : 'ssh://git@ssh.hesge.ch:10572/dojodev/assignment/technique-de-compilation-tp.git',
+                                               'http_url_to_repo'                                : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp.git',
+                                               'web_url'                                         : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp',
+                                               'readme_url'                                      : null,
+                                               'forks_count'                                     : 0,
+                                               'avatar_url'                                      : null,
+                                               'star_count'                                      : 0,
+                                               'last_activity_at'                                : '2023-11-07T21:35:48.454+01:00',
+                                               'namespace'                                       : {
+                                                   'id'        : 14190,
+                                                   'name'      : 'Assignment',
+                                                   'path'      : 'assignment',
+                                                   'kind'      : 'group',
+                                                   'full_path' : 'dojodev/assignment',
+                                                   'parent_id' : 14189,
+                                                   'avatar_url': null,
+                                                   'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/assignment'
+                                               },
+                                               '_links'                                          : {
+                                                   'self'          : 'https://gitedu.hesge.ch/api/v4/projects/13893',
+                                                   'issues'        : 'https://gitedu.hesge.ch/api/v4/projects/13893/issues',
+                                                   'merge_requests': 'https://gitedu.hesge.ch/api/v4/projects/13893/merge_requests',
+                                                   'repo_branches' : 'https://gitedu.hesge.ch/api/v4/projects/13893/repository/branches',
+                                                   'labels'        : 'https://gitedu.hesge.ch/api/v4/projects/13893/labels',
+                                                   'events'        : 'https://gitedu.hesge.ch/api/v4/projects/13893/events',
+                                                   'members'       : 'https://gitedu.hesge.ch/api/v4/projects/13893/members',
+                                                   'cluster_agents': 'https://gitedu.hesge.ch/api/v4/projects/13893/cluster_agents'
+                                               },
+                                               'packages_enabled'                                : true,
+                                               'empty_repo'                                      : true,
+                                               'archived'                                        : false,
+                                               'visibility'                                      : 'private',
+                                               'resolve_outdated_diff_discussions'               : false,
+                                               'container_expiration_policy'                     : {
+                                                   'cadence'        : '1d',
+                                                   'enabled'        : false,
+                                                   'keep_n'         : 10,
+                                                   'older_than'     : '90d',
+                                                   'name_regex'     : '.*',
+                                                   'name_regex_keep': null,
+                                                   'next_run_at'    : '2023-11-08T21:35:48.543+01:00'
+                                               },
+                                               'issues_enabled'                                  : true,
+                                               'merge_requests_enabled'                          : true,
+                                               'wiki_enabled'                                    : false,
+                                               'jobs_enabled'                                    : true,
+                                               'snippets_enabled'                                : true,
+                                               'container_registry_enabled'                      : true,
+                                               'service_desk_enabled'                            : false,
+                                               'service_desk_address'                            : null,
+                                               'can_create_merge_request_in'                     : true,
+                                               'issues_access_level'                             : 'enabled',
+                                               'repository_access_level'                         : 'enabled',
+                                               'merge_requests_access_level'                     : 'enabled',
+                                               'forking_access_level'                            : 'enabled',
+                                               'wiki_access_level'                               : 'disabled',
+                                               'builds_access_level'                             : 'enabled',
+                                               'snippets_access_level'                           : 'enabled',
+                                               'pages_access_level'                              : 'private',
+                                               'analytics_access_level'                          : 'enabled',
+                                               'container_registry_access_level'                 : 'enabled',
+                                               'security_and_compliance_access_level'            : 'private',
+                                               'releases_access_level'                           : 'enabled',
+                                               'environments_access_level'                       : 'enabled',
+                                               'feature_flags_access_level'                      : 'enabled',
+                                               'infrastructure_access_level'                     : 'enabled',
+                                               'monitor_access_level'                            : 'enabled',
+                                               'emails_disabled'                                 : null,
+                                               'shared_runners_enabled'                          : true,
+                                               'lfs_enabled'                                     : true,
+                                               'creator_id'                                      : 1076,
+                                               'import_url'                                      : 'https://gitedu.hesge.ch/dojodev/template/empty_template.git',
+                                               'import_type'                                     : 'git',
+                                               'import_status'                                   : 'scheduled',
+                                               'import_error'                                    : null,
+                                               'open_issues_count'                               : 0,
+                                               'description_html'                                : '<p data-sourcepos="1:1-1:27" dir="auto">Dojo assignment repository.</p>\n<p data-sourcepos="3:1-3:53" dir="auto">Name of the assignment: Technique de compilation - TP</p>',
+                                               'updated_at'                                      : '2023-11-07T21:35:48.454+01:00',
+                                               'ci_default_git_depth'                            : 20,
+                                               'ci_forward_deployment_enabled'                   : true,
+                                               'ci_job_token_scope_enabled'                      : false,
+                                               'ci_separated_caches'                             : true,
+                                               'ci_allow_fork_pipelines_to_run_in_parent_project': true,
+                                               'build_git_strategy'                              : 'fetch',
+                                               'keep_latest_artifact'                            : true,
+                                               'restrict_user_defined_variables'                 : false,
+                                               'runners_token'                                   : 'GR1348941qn9Ju1u5yTSLoWUTWLZy',
+                                               'runner_token_expiration_interval'                : null,
+                                               'group_runners_enabled'                           : true,
+                                               'auto_cancel_pending_pipelines'                   : 'enabled',
+                                               'build_timeout'                                   : 3600,
+                                               'auto_devops_enabled'                             : false,
+                                               'auto_devops_deploy_strategy'                     : 'continuous',
+                                               'ci_config_path'                                  : '',
+                                               'public_jobs'                                     : true,
+                                               'shared_with_groups'                              : [],
+                                               'only_allow_merge_if_pipeline_succeeds'           : false,
+                                               'allow_merge_on_skipped_pipeline'                 : null,
+                                               'request_access_enabled'                          : true,
+                                               'only_allow_merge_if_all_discussions_are_resolved': false,
+                                               'remove_source_branch_after_merge'                : true,
+                                               'printing_merge_request_link_enabled'             : true,
+                                               'merge_method'                                    : 'merge',
+                                               'squash_option'                                   : 'default_off',
+                                               'enforce_auth_checks_on_uploads'                  : true,
+                                               'suggestion_commit_message'                       : null,
+                                               'merge_commit_template'                           : null,
+                                               'squash_commit_template'                          : null,
+                                               'issue_branch_template'                           : null,
+                                               'autoclose_referenced_issues'                     : true
+                                           },
+                                           gitlabLastInfo    : {
+                                               'id'                                              : 13893,
+                                               'description'                                     : 'Dojo assignment repository.\n\nName of the assignment: Technique de compilation - TP',
+                                               'name'                                            : 'Technique de compilation - TP',
+                                               'name_with_namespace'                             : 'DojoDev / Assignment / Technique de compilation - TP',
+                                               'path'                                            : 'technique-de-compilation-tp',
+                                               'path_with_namespace'                             : 'dojodev/assignment/technique-de-compilation-tp',
+                                               'created_at'                                      : '2023-11-07T21:35:48.454+01:00',
+                                               'default_branch'                                  : 'main',
+                                               'tag_list'                                        : [],
+                                               'topics'                                          : [],
+                                               'ssh_url_to_repo'                                 : 'ssh://git@ssh.hesge.ch:10572/dojodev/assignment/technique-de-compilation-tp.git',
+                                               'http_url_to_repo'                                : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp.git',
+                                               'web_url'                                         : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp',
+                                               'readme_url'                                      : null,
+                                               'forks_count'                                     : 0,
+                                               'avatar_url'                                      : null,
+                                               'star_count'                                      : 0,
+                                               'last_activity_at'                                : '2023-11-07T21:35:48.454+01:00',
+                                               'namespace'                                       : {
+                                                   'id'        : 14190,
+                                                   'name'      : 'Assignment',
+                                                   'path'      : 'assignment',
+                                                   'kind'      : 'group',
+                                                   'full_path' : 'dojodev/assignment',
+                                                   'parent_id' : 14189,
+                                                   'avatar_url': null,
+                                                   'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/assignment'
+                                               },
+                                               '_links'                                          : {
+                                                   'self'          : 'https://gitedu.hesge.ch/api/v4/projects/13893',
+                                                   'issues'        : 'https://gitedu.hesge.ch/api/v4/projects/13893/issues',
+                                                   'merge_requests': 'https://gitedu.hesge.ch/api/v4/projects/13893/merge_requests',
+                                                   'repo_branches' : 'https://gitedu.hesge.ch/api/v4/projects/13893/repository/branches',
+                                                   'labels'        : 'https://gitedu.hesge.ch/api/v4/projects/13893/labels',
+                                                   'events'        : 'https://gitedu.hesge.ch/api/v4/projects/13893/events',
+                                                   'members'       : 'https://gitedu.hesge.ch/api/v4/projects/13893/members',
+                                                   'cluster_agents': 'https://gitedu.hesge.ch/api/v4/projects/13893/cluster_agents'
+                                               },
+                                               'packages_enabled'                                : true,
+                                               'empty_repo'                                      : true,
+                                               'archived'                                        : false,
+                                               'visibility'                                      : 'private',
+                                               'resolve_outdated_diff_discussions'               : false,
+                                               'container_expiration_policy'                     : {
+                                                   'cadence'        : '1d',
+                                                   'enabled'        : false,
+                                                   'keep_n'         : 10,
+                                                   'older_than'     : '90d',
+                                                   'name_regex'     : '.*',
+                                                   'name_regex_keep': null,
+                                                   'next_run_at'    : '2023-11-08T21:35:48.543+01:00'
+                                               },
+                                               'issues_enabled'                                  : true,
+                                               'merge_requests_enabled'                          : true,
+                                               'wiki_enabled'                                    : false,
+                                               'jobs_enabled'                                    : true,
+                                               'snippets_enabled'                                : true,
+                                               'container_registry_enabled'                      : true,
+                                               'service_desk_enabled'                            : false,
+                                               'service_desk_address'                            : null,
+                                               'can_create_merge_request_in'                     : true,
+                                               'issues_access_level'                             : 'enabled',
+                                               'repository_access_level'                         : 'enabled',
+                                               'merge_requests_access_level'                     : 'enabled',
+                                               'forking_access_level'                            : 'enabled',
+                                               'wiki_access_level'                               : 'disabled',
+                                               'builds_access_level'                             : 'enabled',
+                                               'snippets_access_level'                           : 'enabled',
+                                               'pages_access_level'                              : 'private',
+                                               'analytics_access_level'                          : 'enabled',
+                                               'container_registry_access_level'                 : 'enabled',
+                                               'security_and_compliance_access_level'            : 'private',
+                                               'releases_access_level'                           : 'enabled',
+                                               'environments_access_level'                       : 'enabled',
+                                               'feature_flags_access_level'                      : 'enabled',
+                                               'infrastructure_access_level'                     : 'enabled',
+                                               'monitor_access_level'                            : 'enabled',
+                                               'emails_disabled'                                 : null,
+                                               'shared_runners_enabled'                          : true,
+                                               'lfs_enabled'                                     : true,
+                                               'creator_id'                                      : 1076,
+                                               'import_url'                                      : 'https://gitedu.hesge.ch/dojodev/template/empty_template.git',
+                                               'import_type'                                     : 'git',
+                                               'import_status'                                   : 'scheduled',
+                                               'import_error'                                    : null,
+                                               'open_issues_count'                               : 0,
+                                               'description_html'                                : '<p data-sourcepos="1:1-1:27" dir="auto">Dojo assignment repository.</p>\n<p data-sourcepos="3:1-3:53" dir="auto">Name of the assignment: Technique de compilation - TP</p>',
+                                               'updated_at'                                      : '2023-11-07T21:35:48.454+01:00',
+                                               'ci_default_git_depth'                            : 20,
+                                               'ci_forward_deployment_enabled'                   : true,
+                                               'ci_job_token_scope_enabled'                      : false,
+                                               'ci_separated_caches'                             : true,
+                                               'ci_allow_fork_pipelines_to_run_in_parent_project': true,
+                                               'build_git_strategy'                              : 'fetch',
+                                               'keep_latest_artifact'                            : true,
+                                               'restrict_user_defined_variables'                 : false,
+                                               'runners_token'                                   : 'GR1348941qn9Ju1u5yTSLoWUTWLZy',
+                                               'runner_token_expiration_interval'                : null,
+                                               'group_runners_enabled'                           : true,
+                                               'auto_cancel_pending_pipelines'                   : 'enabled',
+                                               'build_timeout'                                   : 3600,
+                                               'auto_devops_enabled'                             : false,
+                                               'auto_devops_deploy_strategy'                     : 'continuous',
+                                               'ci_config_path'                                  : '',
+                                               'public_jobs'                                     : true,
+                                               'shared_with_groups'                              : [],
+                                               'only_allow_merge_if_pipeline_succeeds'           : false,
+                                               'allow_merge_on_skipped_pipeline'                 : null,
+                                               'request_access_enabled'                          : true,
+                                               'only_allow_merge_if_all_discussions_are_resolved': false,
+                                               'remove_source_branch_after_merge'                : true,
+                                               'printing_merge_request_link_enabled'             : true,
+                                               'merge_method'                                    : 'merge',
+                                               'squash_option'                                   : 'default_off',
+                                               'enforce_auth_checks_on_uploads'                  : true,
+                                               'suggestion_commit_message'                       : null,
+                                               'merge_commit_template'                           : null,
+                                               'squash_commit_template'                          : null,
+                                               'issue_branch_template'                           : null,
+                                               'autoclose_referenced_issues'                     : true
+                                           },
+                                           gitlabLastInfoDate: new Date('2023-11-07T20:35:54.692Z'),
+                                           published         : true
+                                       }
+                                   });
+    }
+}
+
+async function exercises() {
+    if ( !SharedConfig.production ) {
+        await db.exercise.upsert({
+                                     where : { id: 'dc7e1433-23f8-4c8a-a7f3-478b65fa9815' },
+                                     update: {},
+                                     create: {
+                                         id                : 'dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                         assignmentName    : 'Technique de compilation - TP',
+                                         name              : 'DojoEx - Technique de compilation - TP - michael.minelli',
+                                         gitlabId          : 14232,
+                                         gitlabLink        : 'https://gitedu.hesge.ch/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                         gitlabCreationInfo: {
+                                             'id'                                              : 14232,
+                                             'description'                                     : 'Dojo exercise repository based on the the assignment: Technique de compilation - TP',
+                                             'name'                                            : 'DojoEx - Technique de compilation - TP - michael.minelli',
+                                             'name_with_namespace'                             : 'DojoDev / Exercise / DojoEx - Technique de compilation - TP - michael.minelli',
+                                             'path'                                            : 'dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                             'path_with_namespace'                             : 'dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                             'created_at'                                      : '2023-12-14T17:58:48.185+01:00',
+                                             'default_branch'                                  : 'main',
+                                             'tag_list'                                        : [],
+                                             'topics'                                          : [],
+                                             'ssh_url_to_repo'                                 : 'ssh://git@ssh.hesge.ch:10572/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815.git',
+                                             'http_url_to_repo'                                : 'https://gitedu.hesge.ch/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815.git',
+                                             'web_url'                                         : 'https://gitedu.hesge.ch/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                             'readme_url'                                      : null,
+                                             'forks_count'                                     : 0,
+                                             'avatar_url'                                      : null,
+                                             'star_count'                                      : 0,
+                                             'last_activity_at'                                : '2023-12-14T17:58:48.185+01:00',
+                                             'namespace'                                       : {
+                                                 'id'        : 14191,
+                                                 'name'      : 'Exercise',
+                                                 'path'      : 'exercise',
+                                                 'kind'      : 'group',
+                                                 'full_path' : 'dojodev/exercise',
+                                                 'parent_id' : 14189,
+                                                 'avatar_url': null,
+                                                 'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/exercise'
+                                             },
+                                             '_links'                                          : {
+                                                 'self'          : 'https://gitedu.hesge.ch/api/v4/projects/14232',
+                                                 'issues'        : 'https://gitedu.hesge.ch/api/v4/projects/14232/issues',
+                                                 'merge_requests': 'https://gitedu.hesge.ch/api/v4/projects/14232/merge_requests',
+                                                 'repo_branches' : 'https://gitedu.hesge.ch/api/v4/projects/14232/repository/branches',
+                                                 'labels'        : 'https://gitedu.hesge.ch/api/v4/projects/14232/labels',
+                                                 'events'        : 'https://gitedu.hesge.ch/api/v4/projects/14232/events',
+                                                 'members'       : 'https://gitedu.hesge.ch/api/v4/projects/14232/members',
+                                                 'cluster_agents': 'https://gitedu.hesge.ch/api/v4/projects/14232/cluster_agents'
+                                             },
+                                             'packages_enabled'                                : true,
+                                             'empty_repo'                                      : true,
+                                             'archived'                                        : false,
+                                             'visibility'                                      : 'private',
+                                             'resolve_outdated_diff_discussions'               : false,
+                                             'container_expiration_policy'                     : {
+                                                 'cadence'        : '1d',
+                                                 'enabled'        : false,
+                                                 'keep_n'         : 10,
+                                                 'older_than'     : '90d',
+                                                 'name_regex'     : '.*',
+                                                 'name_regex_keep': null,
+                                                 'next_run_at'    : '2023-12-15T17:58:48.207+01:00'
+                                             },
+                                             'issues_enabled'                                  : true,
+                                             'merge_requests_enabled'                          : true,
+                                             'wiki_enabled'                                    : false,
+                                             'jobs_enabled'                                    : true,
+                                             'snippets_enabled'                                : true,
+                                             'container_registry_enabled'                      : true,
+                                             'service_desk_enabled'                            : false,
+                                             'service_desk_address'                            : null,
+                                             'can_create_merge_request_in'                     : true,
+                                             'issues_access_level'                             : 'enabled',
+                                             'repository_access_level'                         : 'enabled',
+                                             'merge_requests_access_level'                     : 'enabled',
+                                             'forking_access_level'                            : 'enabled',
+                                             'wiki_access_level'                               : 'disabled',
+                                             'builds_access_level'                             : 'enabled',
+                                             'snippets_access_level'                           : 'enabled',
+                                             'pages_access_level'                              : 'private',
+                                             'analytics_access_level'                          : 'enabled',
+                                             'container_registry_access_level'                 : 'enabled',
+                                             'security_and_compliance_access_level'            : 'private',
+                                             'releases_access_level'                           : 'enabled',
+                                             'environments_access_level'                       : 'enabled',
+                                             'feature_flags_access_level'                      : 'enabled',
+                                             'infrastructure_access_level'                     : 'enabled',
+                                             'monitor_access_level'                            : 'enabled',
+                                             'emails_disabled'                                 : null,
+                                             'shared_runners_enabled'                          : true,
+                                             'lfs_enabled'                                     : true,
+                                             'creator_id'                                      : 1076,
+                                             'forked_from_project'                             : {
+                                                 'id'                 : 13893,
+                                                 'description'        : 'Dojo assignment repository.\n\nName of the assignment: Technique de compilation - TP',
+                                                 'name'               : 'Technique de compilation - TP',
+                                                 'name_with_namespace': 'DojoDev / Assignment / Technique de compilation - TP',
+                                                 'path'               : 'technique-de-compilation-tp',
+                                                 'path_with_namespace': 'dojodev/assignment/technique-de-compilation-tp',
+                                                 'created_at'         : '2023-11-07T21:35:48.454+01:00',
+                                                 'default_branch'     : 'main',
+                                                 'tag_list'           : [],
+                                                 'topics'             : [],
+                                                 'ssh_url_to_repo'    : 'ssh://git@ssh.hesge.ch:10572/dojodev/assignment/technique-de-compilation-tp.git',
+                                                 'http_url_to_repo'   : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp.git',
+                                                 'web_url'            : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp',
+                                                 'readme_url'         : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp/-/blob/main/README.md',
+                                                 'forks_count'        : 1,
+                                                 'avatar_url'         : null,
+                                                 'star_count'         : 0,
+                                                 'last_activity_at'   : '2023-11-14T13:14:13.820+01:00',
+                                                 'namespace'          : {
+                                                     'id'        : 14190,
+                                                     'name'      : 'Assignment',
+                                                     'path'      : 'assignment',
+                                                     'kind'      : 'group',
+                                                     'full_path' : 'dojodev/assignment',
+                                                     'parent_id' : 14189,
+                                                     'avatar_url': null,
+                                                     'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/assignment'
+                                                 }
+                                             },
+                                             'mr_default_target_self'                          : false,
+                                             'import_url'                                      : null,
+                                             'import_type'                                     : null,
+                                             'import_status'                                   : 'scheduled',
+                                             'import_error'                                    : null,
+                                             'open_issues_count'                               : 0,
+                                             'description_html'                                : '<p data-sourcepos="1:1-1:83" dir="auto">Dojo exercise repository based on the the assignment: Technique de compilation - TP</p>',
+                                             'updated_at'                                      : '2023-12-14T17:58:48.185+01:00',
+                                             'ci_default_git_depth'                            : 20,
+                                             'ci_forward_deployment_enabled'                   : true,
+                                             'ci_job_token_scope_enabled'                      : false,
+                                             'ci_separated_caches'                             : true,
+                                             'ci_allow_fork_pipelines_to_run_in_parent_project': true,
+                                             'build_git_strategy'                              : 'fetch',
+                                             'keep_latest_artifact'                            : true,
+                                             'restrict_user_defined_variables'                 : false,
+                                             'runners_token'                                   : 'GR1348941tdWz3ZxaqbRBmjL5A6r2',
+                                             'runner_token_expiration_interval'                : null,
+                                             'group_runners_enabled'                           : true,
+                                             'auto_cancel_pending_pipelines'                   : 'enabled',
+                                             'build_timeout'                                   : 3600,
+                                             'auto_devops_enabled'                             : false,
+                                             'auto_devops_deploy_strategy'                     : 'continuous',
+                                             'ci_config_path'                                  : '',
+                                             'public_jobs'                                     : true,
+                                             'shared_with_groups'                              : [],
+                                             'only_allow_merge_if_pipeline_succeeds'           : false,
+                                             'allow_merge_on_skipped_pipeline'                 : null,
+                                             'request_access_enabled'                          : true,
+                                             'only_allow_merge_if_all_discussions_are_resolved': false,
+                                             'remove_source_branch_after_merge'                : true,
+                                             'printing_merge_request_link_enabled'             : true,
+                                             'merge_method'                                    : 'merge',
+                                             'squash_option'                                   : 'default_off',
+                                             'enforce_auth_checks_on_uploads'                  : true,
+                                             'suggestion_commit_message'                       : null,
+                                             'merge_commit_template'                           : null,
+                                             'squash_commit_template'                          : null,
+                                             'issue_branch_template'                           : null,
+                                             'autoclose_referenced_issues'                     : true
+                                         },
+                                         gitlabLastInfo    : {
+                                             'id'                                              : 14232,
+                                             'description'                                     : 'Dojo exercise repository based on the the assignment: Technique de compilation - TP',
+                                             'name'                                            : 'DojoEx - Technique de compilation - TP - michael.minelli',
+                                             'name_with_namespace'                             : 'DojoDev / Exercise / DojoEx - Technique de compilation - TP - michael.minelli',
+                                             'path'                                            : 'dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                             'path_with_namespace'                             : 'dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                             'created_at'                                      : '2023-12-14T17:58:48.185+01:00',
+                                             'default_branch'                                  : 'main',
+                                             'tag_list'                                        : [],
+                                             'topics'                                          : [],
+                                             'ssh_url_to_repo'                                 : 'ssh://git@ssh.hesge.ch:10572/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815.git',
+                                             'http_url_to_repo'                                : 'https://gitedu.hesge.ch/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815.git',
+                                             'web_url'                                         : 'https://gitedu.hesge.ch/dojodev/exercise/dojo-ex_technique-de-compilation-tp_dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                             'readme_url'                                      : null,
+                                             'forks_count'                                     : 0,
+                                             'avatar_url'                                      : null,
+                                             'star_count'                                      : 0,
+                                             'last_activity_at'                                : '2023-12-14T17:58:48.185+01:00',
+                                             'namespace'                                       : {
+                                                 'id'        : 14191,
+                                                 'name'      : 'Exercise',
+                                                 'path'      : 'exercise',
+                                                 'kind'      : 'group',
+                                                 'full_path' : 'dojodev/exercise',
+                                                 'parent_id' : 14189,
+                                                 'avatar_url': null,
+                                                 'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/exercise'
+                                             },
+                                             '_links'                                          : {
+                                                 'self'          : 'https://gitedu.hesge.ch/api/v4/projects/14232',
+                                                 'issues'        : 'https://gitedu.hesge.ch/api/v4/projects/14232/issues',
+                                                 'merge_requests': 'https://gitedu.hesge.ch/api/v4/projects/14232/merge_requests',
+                                                 'repo_branches' : 'https://gitedu.hesge.ch/api/v4/projects/14232/repository/branches',
+                                                 'labels'        : 'https://gitedu.hesge.ch/api/v4/projects/14232/labels',
+                                                 'events'        : 'https://gitedu.hesge.ch/api/v4/projects/14232/events',
+                                                 'members'       : 'https://gitedu.hesge.ch/api/v4/projects/14232/members',
+                                                 'cluster_agents': 'https://gitedu.hesge.ch/api/v4/projects/14232/cluster_agents'
+                                             },
+                                             'packages_enabled'                                : true,
+                                             'empty_repo'                                      : true,
+                                             'archived'                                        : false,
+                                             'visibility'                                      : 'private',
+                                             'resolve_outdated_diff_discussions'               : false,
+                                             'container_expiration_policy'                     : {
+                                                 'cadence'        : '1d',
+                                                 'enabled'        : false,
+                                                 'keep_n'         : 10,
+                                                 'older_than'     : '90d',
+                                                 'name_regex'     : '.*',
+                                                 'name_regex_keep': null,
+                                                 'next_run_at'    : '2023-12-15T17:58:48.207+01:00'
+                                             },
+                                             'issues_enabled'                                  : true,
+                                             'merge_requests_enabled'                          : true,
+                                             'wiki_enabled'                                    : false,
+                                             'jobs_enabled'                                    : true,
+                                             'snippets_enabled'                                : true,
+                                             'container_registry_enabled'                      : true,
+                                             'service_desk_enabled'                            : false,
+                                             'service_desk_address'                            : null,
+                                             'can_create_merge_request_in'                     : true,
+                                             'issues_access_level'                             : 'enabled',
+                                             'repository_access_level'                         : 'enabled',
+                                             'merge_requests_access_level'                     : 'enabled',
+                                             'forking_access_level'                            : 'enabled',
+                                             'wiki_access_level'                               : 'disabled',
+                                             'builds_access_level'                             : 'enabled',
+                                             'snippets_access_level'                           : 'enabled',
+                                             'pages_access_level'                              : 'private',
+                                             'analytics_access_level'                          : 'enabled',
+                                             'container_registry_access_level'                 : 'enabled',
+                                             'security_and_compliance_access_level'            : 'private',
+                                             'releases_access_level'                           : 'enabled',
+                                             'environments_access_level'                       : 'enabled',
+                                             'feature_flags_access_level'                      : 'enabled',
+                                             'infrastructure_access_level'                     : 'enabled',
+                                             'monitor_access_level'                            : 'enabled',
+                                             'emails_disabled'                                 : null,
+                                             'shared_runners_enabled'                          : true,
+                                             'lfs_enabled'                                     : true,
+                                             'creator_id'                                      : 1076,
+                                             'forked_from_project'                             : {
+                                                 'id'                 : 13893,
+                                                 'description'        : 'Dojo assignment repository.\n\nName of the assignment: Technique de compilation - TP',
+                                                 'name'               : 'Technique de compilation - TP',
+                                                 'name_with_namespace': 'DojoDev / Assignment / Technique de compilation - TP',
+                                                 'path'               : 'technique-de-compilation-tp',
+                                                 'path_with_namespace': 'dojodev/assignment/technique-de-compilation-tp',
+                                                 'created_at'         : '2023-11-07T21:35:48.454+01:00',
+                                                 'default_branch'     : 'main',
+                                                 'tag_list'           : [],
+                                                 'topics'             : [],
+                                                 'ssh_url_to_repo'    : 'ssh://git@ssh.hesge.ch:10572/dojodev/assignment/technique-de-compilation-tp.git',
+                                                 'http_url_to_repo'   : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp.git',
+                                                 'web_url'            : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp',
+                                                 'readme_url'         : 'https://gitedu.hesge.ch/dojodev/assignment/technique-de-compilation-tp/-/blob/main/README.md',
+                                                 'forks_count'        : 1,
+                                                 'avatar_url'         : null,
+                                                 'star_count'         : 0,
+                                                 'last_activity_at'   : '2023-11-14T13:14:13.820+01:00',
+                                                 'namespace'          : {
+                                                     'id'        : 14190,
+                                                     'name'      : 'Assignment',
+                                                     'path'      : 'assignment',
+                                                     'kind'      : 'group',
+                                                     'full_path' : 'dojodev/assignment',
+                                                     'parent_id' : 14189,
+                                                     'avatar_url': null,
+                                                     'web_url'   : 'https://gitedu.hesge.ch/groups/dojodev/assignment'
+                                                 }
+                                             },
+                                             'mr_default_target_self'                          : false,
+                                             'import_url'                                      : null,
+                                             'import_type'                                     : null,
+                                             'import_status'                                   : 'scheduled',
+                                             'import_error'                                    : null,
+                                             'open_issues_count'                               : 0,
+                                             'description_html'                                : '<p data-sourcepos="1:1-1:83" dir="auto">Dojo exercise repository based on the the assignment: Technique de compilation - TP</p>',
+                                             'updated_at'                                      : '2023-12-14T17:58:48.185+01:00',
+                                             'ci_default_git_depth'                            : 20,
+                                             'ci_forward_deployment_enabled'                   : true,
+                                             'ci_job_token_scope_enabled'                      : false,
+                                             'ci_separated_caches'                             : true,
+                                             'ci_allow_fork_pipelines_to_run_in_parent_project': true,
+                                             'build_git_strategy'                              : 'fetch',
+                                             'keep_latest_artifact'                            : true,
+                                             'restrict_user_defined_variables'                 : false,
+                                             'runners_token'                                   : 'GR1348941tdWz3ZxaqbRBmjL5A6r2',
+                                             'runner_token_expiration_interval'                : null,
+                                             'group_runners_enabled'                           : true,
+                                             'auto_cancel_pending_pipelines'                   : 'enabled',
+                                             'build_timeout'                                   : 3600,
+                                             'auto_devops_enabled'                             : false,
+                                             'auto_devops_deploy_strategy'                     : 'continuous',
+                                             'ci_config_path'                                  : '',
+                                             'public_jobs'                                     : true,
+                                             'shared_with_groups'                              : [],
+                                             'only_allow_merge_if_pipeline_succeeds'           : false,
+                                             'allow_merge_on_skipped_pipeline'                 : null,
+                                             'request_access_enabled'                          : true,
+                                             'only_allow_merge_if_all_discussions_are_resolved': false,
+                                             'remove_source_branch_after_merge'                : true,
+                                             'printing_merge_request_link_enabled'             : true,
+                                             'merge_method'                                    : 'merge',
+                                             'squash_option'                                   : 'default_off',
+                                             'enforce_auth_checks_on_uploads'                  : true,
+                                             'suggestion_commit_message'                       : null,
+                                             'merge_commit_template'                           : null,
+                                             'squash_commit_template'                          : null,
+                                             'issue_branch_template'                           : null,
+                                             'autoclose_referenced_issues'                     : true
+                                         },
+                                         gitlabLastInfoDate: new Date('2023-12-14T14:54:35.692Z'),
+                                         secret            : 'ea01568d-2b84-49b7-8603-7d58346f21c6'
+                                     }
+                                 });
+    }
+}
+
+async function results() {
+    if ( !SharedConfig.production ) {
+        await db.result.upsert({
+                                   where : {
+                                       exerciseId_dateTime: {
+                                           exerciseId: 'dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                           dateTime  : new Date('2023-12-14T14:55:35.692Z')
+                                       }
+                                   },
+                                   update: {},
+                                   create: {
+                                       exerciseId: 'dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                       dateTime  : new Date('2023-12-14T14:55:35.692Z'),
+                                       commit    : {
+                                           'shortSha'    : '0444bfb5',
+                                           'description' : '',
+                                           'refName'     : 'main',
+                                           'refProtected': 'true',
+                                           'sha'         : '0444bfb5e986a15b9dadd96c06a6e08b92d230b4',
+                                           'timestamp'   : '2023-12-08T13:57:37+01:00',
+                                           'title'       : 'Add .gitlab-ci.yml (DO NOT MODIFY THIS FILE)',
+                                           'author'      : 'Dojo <hepia.dojo@protonmail.com>',
+                                           'branch'      : 'main',
+                                           'refSlug'     : 'main',
+                                           'beforeSha'   : '2a48bd3c2cc2f810bf10d2b948acab9229253068',
+                                           'message'     : 'Add .gitlab-ci.yml (DO NOT MODIFY THIS FILE)'
+                                       },
+                                       exitCode  : 1,
+                                       files     : [ {
+                                           'mode'     : 33188,
+                                           'size'     : 10546,
+                                           'mtime'    : '2023-12-08T12:58:31.109Z',
+                                           'birthtime': '2023-12-08T12:58:31.109Z',
+                                           'ext'      : 'txt',
+                                           'name'     : 'dockerComposeLogs.txt',
+                                           'path'     : 'Dojo/dockerComposeLogs.txt'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 493,
+                                           'mtime'    : '2023-12-08T12:58:31.562Z',
+                                           'birthtime': '2023-12-08T12:58:31.562Z',
+                                           'ext'      : 'json',
+                                           'name'     : 'results.json',
+                                           'path'     : 'Dojo/results.json'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 5593,
+                                           'mtime'    : '2023-12-08T12:58:30.891Z',
+                                           'birthtime': '2023-12-08T12:58:30.891Z',
+                                           'ext'      : 'txt',
+                                           'name'     : 'detailedResults.txt',
+                                           'path'     : 'Exercise/detailedResults.txt'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:25.855Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_1.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_1.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:25.983Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_1.output',
+                                           'path'     : 'Exercise/TestsResults/test_1.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:25.702Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_1.source',
+                                           'path'     : 'Exercise/TestsResults/test_1.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:30.247Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_10.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_10.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:30.376Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_10.output',
+                                           'path'     : 'Exercise/TestsResults/test_10.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:30.098Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_10.source',
+                                           'path'     : 'Exercise/TestsResults/test_10.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:30.737Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_11.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_11.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:30.584Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_11.source',
+                                           'path'     : 'Exercise/TestsResults/test_11.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:30.890Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_11.output',
+                                           'path'     : 'Exercise/TestsResults/test_11.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:26.322Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_2.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_2.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:26.455Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_2.output',
+                                           'path'     : 'Exercise/TestsResults/test_2.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 639,
+                                           'mtime'    : '2023-12-08T12:58:26.178Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_2.source',
+                                           'path'     : 'Exercise/TestsResults/test_2.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:26.781Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_3.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_3.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:26.884Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_3.output',
+                                           'path'     : 'Exercise/TestsResults/test_3.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:26.637Z',
+                                           'birthtime': '2023-12-08T12:58:30.892Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_3.source',
+                                           'path'     : 'Exercise/TestsResults/test_3.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:27.228Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_4.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_4.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:27.331Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_4.output',
+                                           'path'     : 'Exercise/TestsResults/test_4.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:27.092Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_4.source',
+                                           'path'     : 'Exercise/TestsResults/test_4.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:27.688Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_5.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_5.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:27.820Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_5.output',
+                                           'path'     : 'Exercise/TestsResults/test_5.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 639,
+                                           'mtime'    : '2023-12-08T12:58:27.533Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_5.source',
+                                           'path'     : 'Exercise/TestsResults/test_5.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:28.177Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_6.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_6.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:28.322Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_6.output',
+                                           'path'     : 'Exercise/TestsResults/test_6.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 639,
+                                           'mtime'    : '2023-12-08T12:58:28.033Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_6.source',
+                                           'path'     : 'Exercise/TestsResults/test_6.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:28.696Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_7.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_7.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:28.871Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_7.output',
+                                           'path'     : 'Exercise/TestsResults/test_7.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:28.538Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_7.source',
+                                           'path'     : 'Exercise/TestsResults/test_7.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:29.229Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_8.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_8.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:29.352Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_8.output',
+                                           'path'     : 'Exercise/TestsResults/test_8.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:29.087Z',
+                                           'birthtime': '2023-12-08T12:58:30.893Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_8.source',
+                                           'path'     : 'Exercise/TestsResults/test_8.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 149,
+                                           'mtime'    : '2023-12-08T12:58:29.723Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_9.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_9.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1,
+                                           'mtime'    : '2023-12-08T12:58:29.886Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_9.output',
+                                           'path'     : 'Exercise/TestsResults/test_9.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 468,
+                                           'mtime'    : '2023-12-08T12:58:29.570Z',
+                                           'birthtime': '2023-12-08T12:58:30.894Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_9.source',
+                                           'path'     : 'Exercise/TestsResults/test_9.source'
+                                       } ],
+                                       results   : {
+                                           'successfulTests'    : 0,
+                                           'failedTests'        : 16,
+                                           'successfulTestsList': [],
+                                           'failedTestsList'    : [ 'Test 1', 'Test 2', 'Test 3', 'Test 4', 'Test 5', 'Test 6', 'Test 7', 'Test 8', 'Test 9', 'Test 10', 'Test 11', 'Semantic error 1', 'Semantic error 2', 'Semantic error 3', 'Semantic error 4', 'Semantic error 5' ],
+                                           'success'            : false,
+                                           'containerExitCode'  : 1
+                                       },
+                                       success   : false
+                                   }
+                               });
+
+        await db.result.upsert({
+                                   where : {
+                                       exerciseId_dateTime: {
+                                           exerciseId: 'dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                           dateTime  : new Date('2023-12-14T15:35:35.692Z')
+                                       }
+                                   },
+                                   update: {},
+                                   create: {
+                                       exerciseId: 'dc7e1433-23f8-4c8a-a7f3-478b65fa9815',
+                                       dateTime  : new Date('2023-12-14T15:35:35.692Z'),
+                                       commit    : {
+                                           'shortSha'    : 'bacb58a8',
+                                           'description' : '',
+                                           'refName'     : 'main',
+                                           'refProtected': 'true',
+                                           'sha'         : 'bacb58a801f93ab9eb08a4a5949a498588c656ff',
+                                           'timestamp'   : '2023-12-08T14:05:39+01:00',
+                                           'title'       : 'Commit final',
+                                           'author'      : 'MichaΓ«l Minelli <michael@minelli.me>',
+                                           'branch'      : 'main',
+                                           'refSlug'     : 'main',
+                                           'beforeSha'   : '0444bfb5e986a15b9dadd96c06a6e08b92d230b4',
+                                           'message'     : 'Commit final\n'
+                                       },
+                                       exitCode  : 0,
+                                       files     : [ {
+                                           'mode'     : 33188,
+                                           'size'     : 10256,
+                                           'mtime'    : '2023-12-08T13:06:36.546Z',
+                                           'birthtime': '2023-12-08T13:06:36.546Z',
+                                           'ext'      : 'txt',
+                                           'name'     : 'dockerComposeLogs.txt',
+                                           'path'     : 'Dojo/dockerComposeLogs.txt'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 492,
+                                           'mtime'    : '2023-12-08T13:06:36.960Z',
+                                           'birthtime': '2023-12-08T13:06:36.960Z',
+                                           'ext'      : 'json',
+                                           'name'     : 'results.json',
+                                           'path'     : 'Dojo/results.json'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 852,
+                                           'mtime'    : '2023-12-08T13:06:36.336Z',
+                                           'birthtime': '2023-12-08T13:06:36.336Z',
+                                           'ext'      : 'txt',
+                                           'name'     : 'detailedResults.txt',
+                                           'path'     : 'Exercise/detailedResults.txt'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 783,
+                                           'mtime'    : '2023-12-08T13:06:30.478Z',
+                                           'birthtime': '2023-12-08T13:06:36.337Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_1.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_1.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 31,
+                                           'mtime'    : '2023-12-08T13:06:30.591Z',
+                                           'birthtime': '2023-12-08T13:06:36.337Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_1.output',
+                                           'path'     : 'Exercise/TestsResults/test_1.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 115,
+                                           'mtime'    : '2023-12-08T13:06:30.274Z',
+                                           'birthtime': '2023-12-08T13:06:36.337Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_1.source',
+                                           'path'     : 'Exercise/TestsResults/test_1.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 919,
+                                           'mtime'    : '2023-12-08T13:06:35.694Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_10.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_10.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 45,
+                                           'mtime'    : '2023-12-08T13:06:35.812Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_10.output',
+                                           'path'     : 'Exercise/TestsResults/test_10.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 147,
+                                           'mtime'    : '2023-12-08T13:06:35.509Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_10.source',
+                                           'path'     : 'Exercise/TestsResults/test_10.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 517,
+                                           'mtime'    : '2023-12-08T13:06:36.221Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_11.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_11.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 8,
+                                           'mtime'    : '2023-12-08T13:06:36.333Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_11.output',
+                                           'path'     : 'Exercise/TestsResults/test_11.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 121,
+                                           'mtime'    : '2023-12-08T13:06:36.041Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_11.source',
+                                           'path'     : 'Exercise/TestsResults/test_11.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 915,
+                                           'mtime'    : '2023-12-08T13:06:31.011Z',
+                                           'birthtime': '2023-12-08T13:06:36.338Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_2.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_2.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 23,
+                                           'mtime'    : '2023-12-08T13:06:31.120Z',
+                                           'birthtime': '2023-12-08T13:06:36.338Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_2.output',
+                                           'path'     : 'Exercise/TestsResults/test_2.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 192,
+                                           'mtime'    : '2023-12-08T13:06:30.843Z',
+                                           'birthtime': '2023-12-08T13:06:36.338Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_2.source',
+                                           'path'     : 'Exercise/TestsResults/test_2.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1730,
+                                           'mtime'    : '2023-12-08T13:06:31.592Z',
+                                           'birthtime': '2023-12-08T13:06:36.338Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_3.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_3.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 32,
+                                           'mtime'    : '2023-12-08T13:06:31.695Z',
+                                           'birthtime': '2023-12-08T13:06:36.338Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_3.output',
+                                           'path'     : 'Exercise/TestsResults/test_3.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 331,
+                                           'mtime'    : '2023-12-08T13:06:31.399Z',
+                                           'birthtime': '2023-12-08T13:06:36.338Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_3.source',
+                                           'path'     : 'Exercise/TestsResults/test_3.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1392,
+                                           'mtime'    : '2023-12-08T13:06:32.151Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_4.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_4.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 41,
+                                           'mtime'    : '2023-12-08T13:06:32.268Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_4.output',
+                                           'path'     : 'Exercise/TestsResults/test_4.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 280,
+                                           'mtime'    : '2023-12-08T13:06:31.953Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_4.source',
+                                           'path'     : 'Exercise/TestsResults/test_4.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 14810,
+                                           'mtime'    : '2023-12-08T13:06:32.728Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_5.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_5.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 315,
+                                           'mtime'    : '2023-12-08T13:06:32.892Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_5.output',
+                                           'path'     : 'Exercise/TestsResults/test_5.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1383,
+                                           'mtime'    : '2023-12-08T13:06:32.533Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_5.source',
+                                           'path'     : 'Exercise/TestsResults/test_5.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1374,
+                                           'mtime'    : '2023-12-08T13:06:33.396Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_6.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_6.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 15,
+                                           'mtime'    : '2023-12-08T13:06:33.504Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_6.output',
+                                           'path'     : 'Exercise/TestsResults/test_6.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 410,
+                                           'mtime'    : '2023-12-08T13:06:33.180Z',
+                                           'birthtime': '2023-12-08T13:06:36.339Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_6.source',
+                                           'path'     : 'Exercise/TestsResults/test_6.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1471,
+                                           'mtime'    : '2023-12-08T13:06:33.958Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_7.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_7.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 68,
+                                           'mtime'    : '2023-12-08T13:06:34.060Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_7.output',
+                                           'path'     : 'Exercise/TestsResults/test_7.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 417,
+                                           'mtime'    : '2023-12-08T13:06:33.764Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_7.source',
+                                           'path'     : 'Exercise/TestsResults/test_7.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 1301,
+                                           'mtime'    : '2023-12-08T13:06:34.524Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_8.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_8.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 72,
+                                           'mtime'    : '2023-12-08T13:06:34.654Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_8.output',
+                                           'path'     : 'Exercise/TestsResults/test_8.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 352,
+                                           'mtime'    : '2023-12-08T13:06:34.336Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_8.source',
+                                           'path'     : 'Exercise/TestsResults/test_8.source'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 771,
+                                           'mtime'    : '2023-12-08T13:06:35.117Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'bytecode',
+                                           'name'     : 'test_9.bytecode',
+                                           'path'     : 'Exercise/TestsResults/test_9.bytecode'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 31,
+                                           'mtime'    : '2023-12-08T13:06:35.257Z',
+                                           'birthtime': '2023-12-08T13:06:36.341Z',
+                                           'ext'      : 'output',
+                                           'name'     : 'test_9.output',
+                                           'path'     : 'Exercise/TestsResults/test_9.output'
+                                       }, {
+                                           'mode'     : 33188,
+                                           'size'     : 132,
+                                           'mtime'    : '2023-12-08T13:06:34.916Z',
+                                           'birthtime': '2023-12-08T13:06:36.340Z',
+                                           'ext'      : 'source',
+                                           'name'     : 'test_9.source',
+                                           'path'     : 'Exercise/TestsResults/test_9.source'
+                                       } ],
+                                       results   : {
+                                           'successfulTests'    : 16,
+                                           'failedTests'        : 0,
+                                           'successfulTestsList': [ 'Test 1', 'Test 2', 'Test 3', 'Test 4', 'Test 5', 'Test 6', 'Test 7', 'Test 8', 'Test 9', 'Test 10', 'Test 11', 'Semantic error 1', 'Semantic error 2', 'Semantic error 3', 'Semantic error 4', 'Semantic error 5' ],
+                                           'failedTestsList'    : [],
+                                           'success'            : true,
+                                           'containerExitCode'  : 0
+                                       },
+                                       success   : true
+                                   }
+                               });
+    }
+}
\ No newline at end of file
diff --git a/ExpressAPI/src/middlewares/SecurityMiddleware.ts b/ExpressAPI/src/middlewares/SecurityMiddleware.ts
index f7e807081162bf0a0429daf8c5172dcada2de2ee..37e6e4af13cb1905766ce82231ba7da531882049 100644
--- a/ExpressAPI/src/middlewares/SecurityMiddleware.ts
+++ b/ExpressAPI/src/middlewares/SecurityMiddleware.ts
@@ -10,7 +10,7 @@ class SecurityMiddleware {
     check(checkIfConnected: boolean, ...checkTypes: Array<SecurityCheckType>): (req: express.Request, res: express.Response, next: express.NextFunction) => void {
         return async (req: express.Request, res: express.Response, next: express.NextFunction) => {
             if ( checkIfConnected ) {
-                if ( req.session.profile === null ) {
+                if ( req.session.profile === null || req.session.profile === undefined ) {
                     return req.session.sendResponse(res, StatusCodes.UNAUTHORIZED);
                 }
             }
diff --git a/ExpressAPI/src/routes/ExerciseRoutes.ts b/ExpressAPI/src/routes/ExerciseRoutes.ts
index 1b9bc1d28023449c88f8cd065635f6cfadaa6f6b..b337158b4563d6e6eeb8cda9e3f5f5b61810223b 100644
--- a/ExpressAPI/src/routes/ExerciseRoutes.ts
+++ b/ExpressAPI/src/routes/ExerciseRoutes.ts
@@ -77,7 +77,7 @@ class ExerciseRoutes implements RoutesManager {
     }
 
     private getExerciseName(assignment: Assignment, members: Array<GitlabUser>, suffix: number): string {
-        return `DojoEx - ${ assignment.name } - ${ members.map(member => member.username).join(' + ') }${ suffix > 0 ? ` - ${ suffix }` : '' }`;
+        return `DojoEx - ${ assignment.name } - ${ members.map(member => member.username).sort((a, b) => a.localeCompare(b)).join(' + ') }${ suffix > 0 ? ` - ${ suffix }` : '' }`;
     }
 
     private getExercisePath(assignment: Assignment, exerciseId: string): string {
diff --git a/README.md b/README.md
index ad28ab2253f953e7b60c1f24c18f671797b172c8..1ee8483dfccaf4a186f0f247d0237b82c05ab895 100644
--- a/README.md
+++ b/README.md
@@ -1 +1,39 @@
-# DojoBackendAPI
\ No newline at end of file
+# DojoBackendAPI
+
+## Development environment
+
+### Env vars
+
+You can decrypt env var stored in the `.env.vault` file with the following commands in the `ExpressAPI` folder:
+```bash
+> npx dotenv-vault local keys
+ environment DOTENV_KEY
+ ─────────── ─────────────────────────────────────────────────────────────────────────
+ development dotenv://:key_1234@dotenv.local/vault/.env.vault?environment=development
+
+Set DOTENV_KEY on your server
+
+> npx dotenv-vault local decrypt dotenv://:key_1234@dotenv.local/vault/.env.vault?environment=development > .env.development
+```
+
+**The `.env.keys` file have to be requested to the project maintainers.**
+
+### Database
+
+For development, you can use the docker-compose file in the `Resources/DevInfra/` folder.
+
+```bash
+docker-compose -f Resources/DevInfra/docker-compose.yml up -d
+```
+
+This will run a MariaDB database on port `59231` with the following credentials: `root:9buz7f312479g6234f1gnioubervw79b8z`
+
+A second container is created with the Adminer tool on port `62394`.
+
+#### Structure creation and seeding
+
+The following command will create the database structure and seed it with some exemple data.
+
+```bash
+npm run database:deploy:dev
+```
\ No newline at end of file
diff --git a/Resources/DevInfra/docker-compose.yml b/Resources/DevInfra/docker-compose.yml
new file mode 100644
index 0000000000000000000000000000000000000000..555bdf64aaf207e88cd82eb603485777675595bf
--- /dev/null
+++ b/Resources/DevInfra/docker-compose.yml
@@ -0,0 +1,38 @@
+version: '3.8'
+services:
+    dojo-database:
+        container_name: dojo-database
+        image: mariadb:11.0
+        environment:
+            MARIADB_ROOT_PASSWORD: '9buz7f312479g6234f1gnioubervw79b8z'
+        networks:
+            dojo-network:
+                aliases:
+                    - dojo-database
+        volumes:
+            - dojo-database:/var/lib/mysql
+        ports:
+            - "59231:3306"
+        restart: always
+
+    adminer:
+        container_name: adminer
+        image: adminer:latest
+        environment:
+            - ADMINER_DEFAULT_SERVER=dojo-database
+            - TZ=Europe/Zurich
+            - ADMINER_PLUGINS=dump-alter dump-bz2 dump-date dump-json dump-xml dump-zip edit-foreign edit-textarea foreign-system json-column sql-log struct-comments tables-filter
+        networks:
+            dojo-network:
+                aliases:
+                    - adminer
+        depends_on:
+            - dojo-database
+        ports:
+            - "62394:8080"
+        restart: always
+
+networks:
+    dojo-network:
+volumes:
+    dojo-database:
\ No newline at end of file