From 848eaa5887bac226e07a74fdbb8570f3c3cada65 Mon Sep 17 00:00:00 2001 From: Philipp Nagy Date: Sat, 17 Feb 2024 14:01:11 +0100 Subject: [PATCH] prompt mock import --- docs/mockoon.json | 312 +++++++++++++++ docs/ng-openapi-gen.json | 5 + docs/openapi_spec.yaml | 360 ++++++++++++----- package-lock.json | 227 +++++++++++ package.json | 5 +- src/app/api/api-configuration.ts | 20 + src/app/api/api.module.ts | 52 +++ src/app/api/api.service.ts | 62 +++ src/app/api/base-service.ts | 34 ++ ...ion-course-iteration-id-allocations-get.ts | 35 ++ ...on-course-iteration-id-allocations-post.ts | 37 ++ ...ration-course-iteration-id-projects-get.ts | 35 ++ ...teration-course-iteration-id-skills-get.ts | 35 ++ ...ration-course-iteration-id-students-get.ts | 35 ++ src/app/api/models.ts | 14 + src/app/api/models/allocation.ts | 10 + src/app/api/models/comment.ts | 8 + src/app/api/models/device.ts | 9 + src/app/api/models/gender.ts | 8 + src/app/api/models/language-proficiency.ts | 8 + src/app/api/models/language.ts | 7 + src/app/api/models/project-preference.ts | 6 + src/app/api/models/project.ts | 6 + src/app/api/models/skill-proficiency.ts | 12 + src/app/api/models/skill.ts | 7 + src/app/api/models/student-skill.ts | 7 + src/app/api/models/student.ts | 32 ++ src/app/api/request-builder.ts | 368 ++++++++++++++++++ src/app/api/services.ts | 4 + src/app/api/services/allocations.service.ts | 90 +++++ src/app/api/services/projects.service.ts | 55 +++ src/app/api/services/skills.service.ts | 55 +++ src/app/api/services/students.service.ts | 55 +++ src/app/api/strict-http-response.ts | 10 + src/app/app.component.html | 5 + src/app/app.component.ts | 16 + src/app/app.module.ts | 47 ++- .../import-overlay.component.html | 26 +- .../import-overlay.component.ts | 59 ++- .../shared/interceptors/auth.interceptor.ts | 22 ++ .../business-logic-layer/team.service.ts | 2 +- .../services/project-to-team.service.ts | 24 ++ src/app/shared/services/prompt.service.ts | 38 ++ .../services/student-to-person.service.ts | 173 ++++++++ src/scss/_utility.scss | 5 + 45 files changed, 2306 insertions(+), 136 deletions(-) create mode 100644 docs/mockoon.json create mode 100644 docs/ng-openapi-gen.json create mode 100644 src/app/api/api-configuration.ts create mode 100644 src/app/api/api.module.ts create mode 100644 src/app/api/api.service.ts create mode 100644 src/app/api/base-service.ts create mode 100644 src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get.ts create mode 100644 src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-post.ts create mode 100644 src/app/api/fn/projects/v-2-course-iteration-course-iteration-id-projects-get.ts create mode 100644 src/app/api/fn/skills/v-2-course-iteration-course-iteration-id-skills-get.ts create mode 100644 src/app/api/fn/students/v-2-course-iteration-course-iteration-id-students-get.ts create mode 100644 src/app/api/models.ts create mode 100644 src/app/api/models/allocation.ts create mode 100644 src/app/api/models/comment.ts create mode 100644 src/app/api/models/device.ts create mode 100644 src/app/api/models/gender.ts create mode 100644 src/app/api/models/language-proficiency.ts create mode 100644 src/app/api/models/language.ts create mode 100644 src/app/api/models/project-preference.ts create mode 100644 src/app/api/models/project.ts create mode 100644 src/app/api/models/skill-proficiency.ts create mode 100644 src/app/api/models/skill.ts create mode 100644 src/app/api/models/student-skill.ts create mode 100644 src/app/api/models/student.ts create mode 100644 src/app/api/request-builder.ts create mode 100644 src/app/api/services.ts create mode 100644 src/app/api/services/allocations.service.ts create mode 100644 src/app/api/services/projects.service.ts create mode 100644 src/app/api/services/skills.service.ts create mode 100644 src/app/api/services/students.service.ts create mode 100644 src/app/api/strict-http-response.ts create mode 100644 src/app/shared/interceptors/auth.interceptor.ts create mode 100644 src/app/shared/services/project-to-team.service.ts create mode 100644 src/app/shared/services/prompt.service.ts create mode 100644 src/app/shared/services/student-to-person.service.ts diff --git a/docs/mockoon.json b/docs/mockoon.json new file mode 100644 index 00000000..24924b56 --- /dev/null +++ b/docs/mockoon.json @@ -0,0 +1,312 @@ +{ + "uuid": "e117822d-8744-4bf9-ad02-b5967c883da7", + "lastMigration": 32, + "name": "TEASE & PROMPT", + "endpointPrefix": "tease", + "latency": 0, + "port": 3001, + "hostname": "", + "folders": [], + "routes": [ + { + "uuid": "bdbbb2a3-be52-4764-9ff8-ee8e2f285ad7", + "type": "http", + "documentation": "Projects", + "method": "get", + "endpoint": "v2/courseIteration/:courseIterationID/projects", + "responses": [ + { + "uuid": "7d24684a-eabe-4697-a6a6-3b3991576232", + "body": "[\n {\n \"name\": \"QUAR\",\n \"id\": \"ios23quar\"\n },\n {\n \"name\": \"ALLZ\",\n \"id\": \"ios23allz\"\n },\n {\n \"name\": \"BSH\",\n \"id\": \"ios23bsh\"\n },\n {\n \"name\": \"iHaus\",\n \"id\": \"ios23ihaus\"\n },\n {\n \"name\": \"MED\",\n \"id\": \"ios23med\"\n },\n {\n \"name\": \"BMW\",\n \"id\": \"ios23bmw\"\n },\n {\n \"name\": \"ZF FH\",\n \"id\": \"ios23zffh\"\n },\n {\n \"name\": \"McKin\",\n \"id\": \"ios23mckin\"\n },\n {\n \"name\": \"LMU\",\n \"id\": \"ios23lmu\"\n },\n {\n \"name\": \"IMT\",\n \"id\": \"ios23imt\"\n },\n {\n \"name\": \"TSYS\",\n \"id\": \"ios23tsys\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "Successfully retrieved course iteration projects", + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "bfb39908-cd03-4287-9d05-2db745f6778b", + "body": "{}", + "latency": 0, + "statusCode": 401, + "label": "", + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "header", + "modifier": "Authorization", + "value": "Bearer xxx", + "invert": true, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + }, + { + "uuid": "155784cb-796f-4fd1-b86c-992b08fa2ca4", + "body": "{}", + "latency": 0, + "statusCode": 403, + "label": "", + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [ + { + "target": "params", + "modifier": "courseIterationID", + "value": "ios23", + "invert": true, + "operator": "equals" + } + ], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": false, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "d1f856e6-ac66-4a32-b0d0-67ef7ede4345", + "type": "http", + "documentation": "Students", + "method": "get", + "endpoint": "v2/courseIteration/:courseIterationID/students", + "responses": [ + { + "uuid": "2a1f64e7-4e97-44a0-aeac-beab2b927bf1", + "body": "[\n {\n \"id\": \"tum_id_1\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.firstName' }}\",\n \"email\": \"vorname.nachname@1\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_2\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@2\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 7,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23med\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_3\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@3\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 4,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Intermediate\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23allz\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_4\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@4\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23mckin\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_5\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@5\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_6\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@6\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_7\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@7\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 6,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_8\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@8\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_9\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@9\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSE\",\n \"studyProgram\": \"Bachelor\",\n \"semester\": 6,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_10\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@10\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_11\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@11\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Advanced\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bmw\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_12\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@12\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_13\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@13\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_14\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@14\",\n \"gender\": \"Male\",\n \"nationality\": \"BLR\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_15\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@15\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_16\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@16\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23mckin\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_17\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@17\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"B1/B2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_18\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@18\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_19\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@19\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_20\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@20\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Mechanical Engineering, Electrical Engineering \",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_21\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@21\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Intermediate\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_22\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@22\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 7,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_23\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@23\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 7,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Intermediate\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Watch\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_24\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@24\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"Eng\",\n \"studyProgram\": \"neering Science\",\n \"semester\": 6,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bmw\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_25\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@25\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_26\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@26\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_27\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@27\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_28\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@28\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_29\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@29\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Expert\",\n \"devices\": [\n \"IPad\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_30\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@30\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Intermediate\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_31\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@31\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_32\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@32\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23mckin\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_33\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@33\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23ihaus\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_34\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@34\",\n \"gender\": \"Male\",\n \"nationality\": \"USA\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Advanced\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_35\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@35\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_36\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@36\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Games Engineering\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"B1/B2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_37\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@37\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_38\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@38\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Expert\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_39\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@39\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_40\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@40\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bmw\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_41\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@41\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23allz\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_42\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@42\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23allz\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_43\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@43\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23mckin\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_44\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@44\",\n \"gender\": \"Male\",\n \"nationality\": \"BLR\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_45\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@45\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_46\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@46\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bsh\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_47\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@47\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Watch\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bmw\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_48\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@48\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPhone\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_49\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@49\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Intermediate\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23allz\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_50\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@50\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_51\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@51\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23allz\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_52\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@52\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_53\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@53\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_54\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@54\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_55\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@55\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23zffh\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_56\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@56\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Advanced\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_57\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@57\",\n \"gender\": \"Male\",\n \"nationality\": \"USA\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"IPhone\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bmw\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_58\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@58\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_59\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@59\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_60\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@60\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Expert\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23zffh\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_61\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@61\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_62\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@62\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23imt\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_63\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@63\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bsh\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_64\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@64\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 1,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"C1/C2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_65\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@65\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"B1/B2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_66\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@66\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Advanced\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_67\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@67\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_68\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@68\",\n \"gender\": \"Female\",\n \"nationality\": \"USA\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 2,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_69\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@69\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Expert\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_70\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@70\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"MSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 4,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"A1/A2\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Intermediate\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_71\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@71\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23quar\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_72\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@72\",\n \"gender\": \"Female\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPhone\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23tsys\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_73\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@73\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Novice\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23allz\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": \"Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Aenean commodo ligula eget dolor. Aenean massa. Cum sociis natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus. Donec qu \",\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_74\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@74\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23imt\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_75\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@75\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23zffh\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_76\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@76\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_77\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@77\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_78\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@78\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"B1/B2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [\n \"IPad\",\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_79\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@79\",\n \"gender\": \"Male\",\n \"nationality\": \"USA\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 5,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Advanced\",\n \"devices\": [\n \"IPhone\",\n \"Mac\"\n ],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23lmu\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n },\n {\n \"id\": \"tum_id_80\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.lastName' }}\",\n \"email\": \"vorname.nachname@80\",\n \"gender\": \"Male\",\n \"nationality\": \"DEU\",\n \"studyDegree\": \"BSc\",\n \"studyProgram\": \"Informatics\",\n \"semester\": 3,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"C1/C2\"\n }\n ],\n \"introSelfAssessment\": \"Novice\",\n \"introCourseProficiency\": \"Intermediate\",\n \"devices\": [],\n \"skills\": [\n {\n \"id\": \"id1\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id2\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"id3\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id4\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id5\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id6\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"id7\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"id8\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"projectPreferences\": [\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 11,\n \"projectId\": \"ios23bsh\"\n }\n ],\n \"studentComments\": [],\n \"tutorComments\": [\n {\n \"author\": \"Tutor\",\n \"description\": \"Intro course\",\n \"text\": null,\n \"date\": \"2024-01-12\"\n }\n ]\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "Successfully retrieved course iteration students", + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "58a920d4-100b-41ad-b49c-f6de19f4a9ac", + "type": "http", + "documentation": "Allocation", + "method": "post", + "endpoint": "v2/courseIteration/:courseIterationID/allocations", + "responses": [ + { + "uuid": "9d050a85-e149-492d-9891-ceea8a105a6b", + "body": "", + "latency": 0, + "statusCode": 200, + "label": "OK", + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "396e6d1c-9343-4095-b829-b21a4155dc98", + "type": "http", + "documentation": "Allocation", + "method": "get", + "endpoint": "v2/courseIteration/:courseIterationID/allocations", + "responses": [ + { + "uuid": "3493ddb2-d652-4fc8-bcbb-b2bbbf4ed92b", + "body": "[\n {\n \"projectId\": \"ios23quar\",\n \"studentIds\": [\n \"tum_id_1\",\n \"tum_id_2\",\n \"tum_id_30\",\n \"tum_id_31\",\n \"tum_id_32\",\n \"tum_id_33\"\n ]\n },\n {\n \"projectId\": \"ios23allz\",\n \"studentIds\": []\n },\n {\n \"projectId\": \"ios23bsh\",\n \"studentIds\": [\n \"tum_id_23\"\n ]\n },\n {\n \"projectId\": \"ios23ihaus\",\n \"studentIds\": [\n \"tum_id_22\"\n ]\n },\n {\n \"projectId\": \"ios23med\",\n \"studentIds\": [\n \"tum_id_21\"\n ]\n },\n {\n \"projectId\": \"ios23bmw\",\n \"studentIds\": [\n \"tum_id_20\"\n ]\n },\n {\n \"projectId\": \"ios23zffh\",\n \"studentIds\": [\n \"tum_id_19\"\n ]\n },\n {\n \"projectId\": \"ios23mckin\",\n \"studentIds\": [\n \"tum_id_18\"\n ]\n },\n {\n \"projectId\": \"ios23lmu\",\n \"studentIds\": [\n \"tum_id_17\"\n ]\n },\n {\n \"projectId\": \"ios23imt\",\n \"studentIds\": [\n \"tum_id_16\"\n ]\n },\n {\n \"projectId\": \"ios23tsys\",\n \"studentIds\": [\n \"tum_id_15\"\n ]\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "An array of arrays, each inner array contains the unique identifiers of students that were allocated to the same project", + "headers": [ + { + "key": "Content-Type", + "value": "application/json" + }, + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + }, + { + "uuid": "5e9616c9-120d-4941-93d4-1e82c258e3ec", + "type": "http", + "documentation": "Skills", + "method": "get", + "endpoint": "v2/courseIteration/:courseIterationID/skills", + "responses": [ + { + "uuid": "06a4e900-aa56-4586-8e58-b3c7979945a4", + "body": "[\n {\n \"title\": \"Games Engineering\",\n \"id\": \"id1\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Cloud infrastructure\",\n \"id\": \"id2\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Server-side development\",\n \"id\": \"id3\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Docker, Kubernetes\",\n \"id\": \"id4\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Machine Learning\",\n \"id\": \"id5\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Web Development\",\n \"id\": \"id6\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Computer Graphics / Vision\",\n \"id\": \"id7\",\n \"description\": \"XXX\"\n },\n {\n \"title\": \"Flutter\",\n \"id\": \"id8\",\n \"description\": \"XXX\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "OK", + "headers": [ + { + "key": "Access-Control-Allow-Origin", + "value": "http://localhost" + }, + { + "key": "Content-Type", + "value": "application/json" + } + ], + "bodyType": "INLINE", + "filePath": "", + "databucketID": "", + "sendFileAsBody": false, + "rules": [], + "rulesOperator": "OR", + "disableTemplating": false, + "fallbackTo404": false, + "default": true, + "crudKey": "id", + "callbacks": [] + } + ], + "responseMode": null + } + ], + "rootChildren": [ + { + "type": "route", + "uuid": "bdbbb2a3-be52-4764-9ff8-ee8e2f285ad7" + }, + { + "type": "route", + "uuid": "d1f856e6-ac66-4a32-b0d0-67ef7ede4345" + }, + { + "type": "route", + "uuid": "58a920d4-100b-41ad-b49c-f6de19f4a9ac" + }, + { + "type": "route", + "uuid": "396e6d1c-9343-4095-b829-b21a4155dc98" + }, + { + "type": "route", + "uuid": "5e9616c9-120d-4941-93d4-1e82c258e3ec" + } + ], + "proxyMode": false, + "proxyHost": "", + "proxyRemovePrefix": false, + "tlsOptions": { + "enabled": false, + "type": "CERT", + "pfxPath": "", + "certPath": "", + "keyPath": "", + "caPath": "", + "passphrase": "" + }, + "cors": true, + "headers": [], + "proxyReqHeaders": [ + { + "key": "", + "value": "" + } + ], + "proxyResHeaders": [ + { + "key": "", + "value": "" + } + ], + "data": [], + "callbacks": [] +} diff --git a/docs/ng-openapi-gen.json b/docs/ng-openapi-gen.json new file mode 100644 index 00000000..ebf567b3 --- /dev/null +++ b/docs/ng-openapi-gen.json @@ -0,0 +1,5 @@ +{ + "apiService": "ApiService", + "input": "docs/openapi_spec.yaml", + "output": "src/app/api" +} diff --git a/docs/openapi_spec.yaml b/docs/openapi_spec.yaml index 5973f208..bbab7b66 100644 --- a/docs/openapi_spec.yaml +++ b/docs/openapi_spec.yaml @@ -1,131 +1,234 @@ openapi: 3.1.0 info: title: TEASE & PROMPT - version: 1.1.0 + version: 2.1.0 description: |- Work-in-progress example API to enable the TEASE UI to communicate with a service (PROMPT) that can deliver information on students participating in the iPraktikum at TUM. --- Using this API you can retrieve information on students and their associated attributes. servers: - - url: https://my.api.com/id/{number} + - url: https://prompt.ase.cit.tum.de/tease paths: - /v1/students: + /v2/courseIteration/{courseIterationId}/projects: get: tags: - - Students - summary: Get data of all iPraktikum students - description: Retrieve collected information on all students accepted to this semesters cohort of students participating in the iPraktikum course at TUM, this data will populate the UI and also be used in the initial algorithmic allocation + - Projects + summary: Retrieve projects from a specific course iteration + description: Returns projects from a course iteration based on the provided ID. + parameters: + - in: path + name: courseIterationId + required: true + description: Unique identifier of the course iteration + schema: + type: string responses: '200': - description: An array of students in JSON format + description: Successfully retrieved course iteration projects content: application/json: schema: type: array items: - $ref: '#/components/schemas/Student' - /v1/projects: + $ref: '#/components/schemas/Project' + /v2/courseIteration/{courseIterationId}/students: get: tags: - - Projects - summary: Get the names of the iPraktikum projects - description: "Send a list of all projects/teams that students can work on during this semesters iteration of the iPraktikum course at TUM" + - Students + summary: Retrieve students from a specific course iteration + description: Returns students from a course iteration based on the provided ID. + parameters: + - in: path + name: courseIterationId + required: true + description: Unique identifier of the course iteration + schema: + type: string responses: '200': - description: An array of project (names) in JSON format + description: Successfully retrieved course iteration students content: application/json: schema: type: array items: - $ref: '#/components/schemas/Project' - /v1/allocation: + $ref: '#/components/schemas/Student' + /v2/courseIteration/{courseIterationId}/allocations: post: tags: - - Allocation Result + - Allocations summary: Submit the final result of the matching/allocation description: After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + parameters: + - in: path + name: courseIterationId + required: true + description: Unique identifier of the course iteration + schema: + type: string + requestBody: + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Allocation' + responses: + '200': + description: OK + get: + tags: + - Allocations + summary: Retrieve the final result of the matching/allocation + description: After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + parameters: + - in: path + name: courseIterationId + required: true + description: Unique identifier of the course iteration + schema: + type: string responses: '200': description: An array of arrays, each inner array contains the unique identifiers of students that were allocated to the same project content: application/json: schema: - $ref: '#/components/schemas/Allocation' + type: array + items: + $ref: '#/components/schemas/Allocation' + /v2/courseIteration/{courseIterationId}/skills: + get: + tags: + - Skills + summary: Retrieve the skills from a specific course iteration + description: After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + parameters: + - in: path + name: courseIterationId + required: true + description: Unique identifier of the course iteration + schema: + type: string + responses: + '200': + description: OK + content: + application/json: + schema: + type: array + items: + $ref: '#/components/schemas/Skill' components: schemas: Student: type: object description: A person enrolled in the iPraktikum course at TUM properties: + id: + type: string + format: tum id firstName: type: string lastName: type: string - image: - type: string - format: base64 - email: - type: string - tumId: - type: string gender: $ref: '#/components/schemas/Gender' nationality: type: string + format: iso 3166-1 alpha-2 + email: + type: string studyProgram: type: string + studyDegree: + type: string semester: type: integer - germanLanguageLevel: - $ref: '#/components/schemas/LanguageProficiency' - englishLanguageLevel: - $ref: '#/components/schemas/LanguageProficiency' - introSelfAssessment: - $ref: '#/components/schemas/SkillProficiencyLevel' - devices: + languages: type: array items: - $ref: '#/components/schemas/Device' + $ref: '#/components/schemas/Language' + introSelfAssessment: + $ref: '#/components/schemas/SkillProficiency' + introCourseProficiency: + $ref: '#/components/schemas/SkillProficiency' skills: type: array items: - $ref: '#/components/schemas/Skill' - projectPriorities: + $ref: '#/components/schemas/StudentSkill' + devices: type: array items: - $ref: '#/components/schemas/Project' + $ref: '#/components/schemas/Device' studentComments: - type: string - # Aassessment given by a tutor, or the overwritten rating by an instructor, TEASE itself does not differentiate - supervisorAssessment: - description: General assessment given either initially by a tutor or overwritten at a later point by an instructor during the matching process, TEASE does not differentiate between the original tutor assessment and subsequent supervisor assessments but on the side of PROMPT the original tutor assessment should be kept saved in some form - $ref: '#/components/schemas/SkillProficiencyLevel' + type: array + items: + $ref: '#/components/schemas/Comment' tutorComments: - type: string - example: - firstName: Aerandir - lastName: Brandybuck - image: "iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAYAAABzenr0AAABhWlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw0AcxV9Ta4tUHOyg4pChOlmQKuKoVShChVArtOpgcumH0KQhSXFxFFwLDn4sVh1cnHV1cBUEwQ8QVxcnRRcp8X9JoUWsB8f9eHfvcfcOEOplplld44Cm22Y6mRCzuRUx+IoABhFCHN0ys4xZSUqh4/i6h4+vdzGe1fncn6NXzVsM8InEM8wwbeJ14qlN2+C8TxxhJVklPiceM+mCxI9cVzx+41x0WeCZETOTniOOEIvFNlbamJVMjXiSOKpqOuULWY9VzluctXKVNe/JXxjO68tLXKc5jCQWsAgJIhRUsYEybMRo1UmxkKb9RAf/kOuXyKWQawOMHPOoQIPs+sH/4He3VmEi7iWFE0DgxXE+RoDgLtCoOc73seM0TgD/M3Clt/yVOjD9SXqtpUWPgL5t4OK6pSl7wOUOMPBkyKbsSn6aQqEAvJ/RN+WA/lugZ9XrrbmP0wcgQ12lboCDQ2C0SNlrHd4dau/t3zPN/n4AXNxynqXamwQAAAAGYktHRAD/AP8A/6C9p5MAAAAJcEhZcwAAFiUAABYlAUlSJPAAAAisSURBVFjDRZfLkiRJUkWPqpk/IyIzMuvR1dUMw/DY9ICw4hv4P/6CFX/AgsWIIMIWAWSQbmGqurvemRmZEeHuZqrKwqNmXMQXvnFVM9N77jX553/6l8AMECICJJAoJISGhc5PDE9vOL3/T978+L+8f3zkUI2n2fGmJbTFSiGksN3tGfpn+LygVLq2QdNAHp7z/T/8I7J/DqLIpZaIkAkQEQBEQRAI6OLIsHyhl5np7gNPH98zz48sy8TDdOasPRotTeqQNGA2s9SWNDvzdKb4kTG2tE1myGceP/zIi82I9VsCJQABcogQAiKg4uBBtjPD8hPy5X+oZeL0+TOlPlGsEDlBN1BJRBjEQi0LRJBIZFVmZhY3/DTRNQ0pTfz+v/6DZuzY/+q3mAqgAOSqzrp8R11QOzP98t9c9XdMp4+U44nz9ETqG7TpmKdKjUTTtlg4xSaWeUJTImUBdwxbV5QCD8PF0FYpdkajUkxBMxGgSPD1ERHK+Z5eHzge/g/ECM2UUO6PxrEkam6QtifRkqxBitAmITcGGGWaUM9shh1tM9K1HW4GBG/f/sD5fI8kQSShquSEEgEQZK20zZlnt0pXXzIfzwQT890Jl4H+ds8Nzk4GhJ5aKvNyxnwmkgKCWSWqUWtBk4LCvEzkLDAfWeyJbfqWiLQOoYYSBIQipozthn7ZcPf2R7zOLNLiOqD9ll4HGhIpjfTjHk+OR2VaZkQahmEEBffCND1yPD5yd/+ZaTqzlIJY4XQ6sLl11lULGQkIkIjLVCpRKp/e/cRPnw/45huub56TdIPPGTWh6RIZQXREc2YzGJoSWbe4CSk5PizY1cK2f8fbn35gjoV5mSg2Y1QkKkomx1odJRAqKSrZlaDlFBua/haTHZSMm6MeaAReK6oZBMQV8USIoZ7AEk3aIl64HeGu/cT59AFF6dsRglWEEmgK0AAhkDAylc8fPvLmD+/wtkXbFqLBEUIcy8EilVInzBbcHHfHTXFTIgRCCFeUhiw9+6vnJG3JbUM37nC7zFzO5JQSZnbpKtBYmKcjuhlgaMmSsRAijJBAVJnDcQkSgkoip45qQeCEKCIKBMQqcdWGTb8luo6mGy+nHrg7OWT9QILwwrwcuTvc4W1Danpy0xHVWMqM24LmFtEgNNE1gQOEEnFei6cMChEOEqAr5VQzHgqSVggJRATZLkyMWDH8dDrQbBr8vmPsrsgotRp1mql1xiiUpSKhTJtH9je37K72lFJJyWlzg7D+fCWlgzsRTt93F88RvDpEJSuJCEdDaELpuo4ngt3VDnJLVCOjjP1IsYS2LSm1LMeZcj5zuPvI2Lcs88zp6SN3+TOb8ZbNZkdqgsAwLwRB7jogr96HEyFk47JVYXjA4i0PUzCMPaYNZVbMg+M8M81nyunM1W5PWSpNagkLVJShHzjc3VMf71nqgeO8Zxh6urblXCZMjZtvXiPagq875G5kkcBYGSDzjD0uvH75Z1y9HBC95v3PD3x4d2B3vWffPkObFiXz4A/4PNH0K8iG4YrNtvLu+IY8L2yuMjlllloInN3LFzx//Ss88uV4VgfOEeu0NvdH7Hf/Tns+IH/Ts//NnnkRxhykZKg0tNoByjJPRJ3R7OS8IlVI7G9e0ww3AJRlgdzQdYlmeOQv//bvEbnBLP3RdyKCLBGkCNrDxPih0Fpwd3emnIPjwxOPHx+gGFVmcEVCWOYzIhVNoJqR1GGqNH1mm7aoNGhapVt8Yrze02+esViHhBDYGn6ArBEo0Iwj0Q1sfr9gW5i+LByWhclkPaBaqeXEOthBK4mIQEPRUJKvCJaUEM2sVHFEhLEZaaIjUiLcsACRrw1ooCJw1VP//JrHTw+cgOPdGetbqiiBIoD5pfPiLHOhWqW2BT8b3faK3f4FXXtNSi21nnE38Mr54wP+7Yl8M2ApE1TcV0jllDIiQXWw37ziUzkwLwfK4ZHWR0QyKSnEWtxxPAlN37Ht9ozjlm4YCOnwEOZlJnvFo2AsqAXXMtKaMLtDasi5xZaCmZFzzrhXSgb97hXN8YH4w5kShVoXnBXBaIDHCrY2kbThev+Mthloug7JmblUapkxApdYt3t2djc3yHbERFGCnBqsFWqt5LZtMReKwND3jN//Hem71xzvfuaXX97iHsAltnnAYjiw2IxXZxh3bHc7unFcDS59FXVAEqRt2X73LXXoyTljFwa0baZtMznUVzarsgQ03UhsAj8/UAPcL+gkqASHwwP3nz4TXeLq2Z5meiDeGS9evOT65TeQGy7uQtKW4foZfr3Dmwa9SM/c/8SBLInVI1ZeiydS15OS0uUEiwGKqUJO3Nzect1f0242xFXH/f0XTo8HpvPCZlpot2sDnoQ87ti8fEUlofGnGACOmawkTLqSyUUJCVJSFPBa2Qwt03n6yklEFcmQG6GrQn9qedb9Gv2rjnSdKfh6WipcffOM3cu/IGJL8Vhpf7l3iAgi0ORMnm3B3TFfwSIRLOeJU6nM4liXKGaXHB+IQ6gxnZ+I2djubkntFk9gBMkVTR3j7hVGvyZfWSXssjJFZF2MCuRqhpkTYUhqsHDMAzDOxyekClRDvs5VVvJ1y/Bsi9Ki3Yh1iSqORyAI7WYHOmBFiFRRyQiZuhTQQFUhAgvIIYEkCFdKLSSHduiYPOFFiVKQNUNdrk8KKmiTyc2I5g2uEFFwU5CMaIdoi6QEOKVWAiVrxi8ENLM1ltepEOGrQ7ldEjKI5IttXgpHEO6UatRlQS3R9aASEJkaDi4kTZSnI9iaASyCiIR9vREKxEUNKSl5mea1AKy087URCUXM1oFcd/+PHu61cCifaMtELjPSdHTNSJ86NIIv7z/w89MX/vq336PtgPuK8+p6mSUhcEpZ0DXVra/IepNJuqBS17RsFw2IrAqKWFUhawIWlC41DHmg8Yyi3Lx6xQ8/vuHffvevPBx/QXMhqdOIkwUER2Kl6v8DhzhPSk7slXkAAAAASUVORK5CYII=" - email: aerandir.brandybuck@tum.de - tumId: 046035297 - gender: Prefer not to say - nationality: DE - studyProgram: IN-B - semester: 6 - germanLanguageLevel: Native - englishLanguageLevel: B1/B2 - introSelfAssessment: Intermediate - devices: [IPhone, Mac] - skills: - - { title: iOS, description: Development of applications for the iOS mobile operating system, skillLevel: Novice} - - { title: CI/CD, description: Continuous integration and delivery/deployment using automated tools, skillLevel: Intermediate} - projectPriorities: - - { name: Quartett, id: ios2223quartett} - - { name: BSH, id: ios2223bsh} - studentComments: I would prefer to work in an international team (diverse nationalities), thanks! - supervisorAssessment: Novice - tutorComments: Motivated, good at accepting constructive criticism + type: array + items: + $ref: '#/components/schemas/Comment' + projectPreferences: + type: array + items: + $ref: '#/components/schemas/ProjectPreference' + required: + - id + - firstName + - lastName + - gender + - nationality + - email + - studyProgram + - studyDegree + - semester + - languages + - introSelfAssessment + - introCourseProficiency + - skills + - devices + - studentComments + - tutorComments + - projectPreferences + examples: + - id: tum_id_1 + firstName: Aerandir + lastName: Brandybuck + email: aerandir.brandybuck@tum.de + gender: Prefer not to say + nationality: DE + studyProgram: Information Systems + studyDegree: Bachelor + semester: 5 + languages: + - language: en + proficiency: C1/C2 + - language: de + proficiency: Native + introSelfAssessment: Intermediate + introCourseProficiency: Novice + devices: [IPhone, Mac] + skills: + - { id: key_iOS, proficiency: Novice} + - { id: key_CI/CD, proficiency: Intermediate} + projectPreferences: + - { priority: 1, projectId: ios2223quartett} + - { priority: 2, projectId: ios2223bsh} + studentComments: + - author: Aerandir Brandybuck + description: Reason for first choice + text: I love cars + date: 2024-02-15 + - author: Aerandir Brandybuck + description: Intro course + text: I would prefer to work in an international team + date: 2024-01-11 + tutorComments: + - author: Liam Nguyen + description: Intro course + text: Motivated, good at accepting constructive criticism + date: 2024-01-12 Project: type: object properties: @@ -133,9 +236,27 @@ components: type: string id: type: string - example: - name: Quartett - id: ios2223quartett + required: + - name + - id + examples: + - name: Quartett + id: ios2223quartett + - name: BSH + id: ios2223bsh + ProjectPreference: + type: object + properties: + projectId: + type: string + priority: + type: integer + required: + - projectId + - priority + examples: + - projectId: ios2223bsh + priority: 1 Device: type: string enum: @@ -143,6 +264,7 @@ components: - IPad - Mac - Watch + - Raspberry Pi Skill: type: object properties: @@ -150,29 +272,51 @@ components: type: string description: type: string - # self assessment for skill as reported by the student - skillLevel: - $ref: '#/components/schemas/SkillProficiencyLevel' - example: - title: UI/UX - description: Development/design of user interfaces and the user experience - skillLevel: Advanced - SkillProficiencyLevel: + id: + type: string + required: + - description + - title + - id + examples: + - title: UI/UX + id: key + description: Development/design of user interfaces and the user experience + StudentSkill: + type: object + properties: + id: + type: string + proficiency: + $ref: '#/components/schemas/SkillProficiency' + required: + - id + - proficiency + examples: + - id: key + proficiency: Advanced + SkillProficiency: type: string - description: Proficiency in some skillset, also used to for assessments of students, in particular their performance in the Swift/iOS intro course, for the self assessment we also this enum internally o store a students answer, but the UI should display strings that make more sense, see the deprecated SelfAssessmentLevel enum below + description: Proficiency in a skill enum: - Novice - Intermediate - Advanced - Expert - # deprecated, see SkillProficiencyLevel - # SelfAssessmentLevel: - # enum: - # - Not challenging at all - # - Hardly challenging - # - Medium challenging - # - Very challenging - # - Extremely challenging + Language: + type: object + properties: + language: + type: string + format: ISO 639-1 + proficiency: + $ref: '#/components/schemas/LanguageProficiency' + required: + - language + - proficiency + examples: + - language: en + proficiency: Native LanguageProficiency: type: string enum: @@ -187,29 +331,43 @@ components: - Male - Other - Prefer not to say - StudentReference: + Comment: type: object - description: Object to only send a subset of the properties of the Student object, used for sending data about the allocation back to PROMPT, contains solely a property to uniquely identify a student as well as the last assessment stored in TEASE (to let PROMPT know about changes made to the assessment) properties: - studentId: + author: + type: string + description: + type: string + text: type: string - supervisorAssessment: - $ref: '#/components/schemas/SkillProficiencyLevel' - example: - studentId: 056036237 - supervisorAssessment: Expert + date: + type: string + required: + - author + - description + - text + - date + examples: + - author: Aerandir Brandybuck + description: Reason for first choice + text: I love cars + date: 2024-02-15 Allocation: - type: array - description: All projects with their respective assigned students - items: - $ref: '#/components/schemas/ProjectAllocation' - ProjectAllocation: type: object description: A project with references to the students assigned to this project as part of the matching result properties: - project: - $ref: '#/components/schemas/Project' - students: + projectId: + type: string + studentIds: type: array items: - $ref: '#/components/schemas/StudentReference' \ No newline at end of file + type: string + format: tum id + required: + - projectId + - studentIds + examples: + - projectId: ios2223quartett + studendIds: + - "9d0e016b-5019-41fe-9ae9-8b6784080693" + - "704f39d9-3936-4005-a0ca-2cc2fe989cec" \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index caf3c1d5..c66d9471 100644 --- a/package-lock.json +++ b/package-lock.json @@ -44,12 +44,14 @@ "@angular/cli": "17.0.7", "@angular/compiler-cli": "17.0.7", "@angular/localize": "17.0.7", + "@cypress/schematic": "^2.5.1", "@types/crypto-js": "^4.2.1", "@typescript-eslint/eslint-plugin": "^6.10.0", "@typescript-eslint/parser": "^6.10.0", "eslint": "^8.53.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-prettier": "5.0.0", + "ng-openapi-gen": "^0.51.0", "prettier": "^3.0.3", "prettier-eslint": "^16.1.1", "typescript": "5.2.2" @@ -674,6 +676,36 @@ "rxjs": "^6.5.3 || ^7.4.0" } }, + "node_modules/@apidevtools/json-schema-ref-parser": { + "version": "9.0.9", + "resolved": "https://registry.npmjs.org/@apidevtools/json-schema-ref-parser/-/json-schema-ref-parser-9.0.9.tgz", + "integrity": "sha512-GBD2Le9w2+lVFoc4vswGI/TjkNIZSVp7+9xPf+X3uidBfWnAeUWmquteSyt0+VCrhNMWj/FTABISQrD3Z/YA+w==", + "dev": true, + "dependencies": { + "@jsdevtools/ono": "^7.1.3", + "@types/json-schema": "^7.0.6", + "call-me-maybe": "^1.0.1", + "js-yaml": "^4.1.0" + } + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/@apidevtools/json-schema-ref-parser/node_modules/js-yaml": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", + "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", + "dev": true, + "dependencies": { + "argparse": "^2.0.1" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, "node_modules/@assemblyscript/loader": { "version": "0.10.1", "resolved": "https://registry.npmjs.org/@assemblyscript/loader/-/loader-0.10.1.tgz", @@ -2337,6 +2369,38 @@ "node": ">=6.9.0" } }, + "node_modules/@cypress/schematic": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@cypress/schematic/-/schematic-2.5.1.tgz", + "integrity": "sha512-tO2lUnr5C0udB4xpewndlTMkEHHdgyvSNLI9+bTdYbxCby8MlxrFpewxmqPIfH21ZmOQP8XghD5uMd3l732ESA==", + "dev": true, + "dependencies": { + "jsonc-parser": "^3.0.0", + "rxjs": "~6.6.0" + }, + "peerDependencies": { + "@angular/cli": ">=14", + "@angular/core": ">=14" + } + }, + "node_modules/@cypress/schematic/node_modules/rxjs": { + "version": "6.6.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-6.6.7.tgz", + "integrity": "sha512-hTdwr+7yYNIT5n4AMYp85KA6yw2Va0FLa3Rguvbpa4W3I5xynaBZo41cM3XM+4Q6fRMj3sBYIR1VAmZMXYJvRQ==", + "dev": true, + "dependencies": { + "tslib": "^1.9.0" + }, + "engines": { + "npm": ">=2.0.0" + } + }, + "node_modules/@cypress/schematic/node_modules/tslib": { + "version": "1.14.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", + "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", + "dev": true + }, "node_modules/@discoveryjs/json-ext": { "version": "0.5.7", "resolved": "https://registry.npmjs.org/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz", @@ -3049,6 +3113,12 @@ "@jridgewell/sourcemap-codec": "^1.4.14" } }, + "node_modules/@jsdevtools/ono": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@jsdevtools/ono/-/ono-7.1.3.tgz", + "integrity": "sha512-4JQNk+3mVzK3xh2rqd6RB4J46qUR19azEHBneZyTZM+c456qOrbbM/5xcR8huNCCcbVt7+UmizG6GuUvPvKUYg==", + "dev": true + }, "node_modules/@leichtgewicht/ip-codec": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/@leichtgewicht/ip-codec/-/ip-codec-2.0.4.tgz", @@ -6351,6 +6421,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/call-me-maybe": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-me-maybe/-/call-me-maybe-1.0.2.tgz", + "integrity": "sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==", + "dev": true + }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -7823,6 +7899,12 @@ "node": ">=6" } }, + "node_modules/eol": { + "version": "0.9.1", + "resolved": "https://registry.npmjs.org/eol/-/eol-0.9.1.tgz", + "integrity": "sha512-Ds/TEoZjwggRoz/Q2O7SE3i4Jm66mqTDfmdHdq/7DKVk3bro9Q8h6WdXKdPqFLMoqxrDK5SVRzHVPOS6uuGtrg==", + "dev": true + }, "node_modules/err-code": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/err-code/-/err-code-2.0.3.tgz", @@ -9154,6 +9236,36 @@ "integrity": "sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==", "dev": true }, + "node_modules/handlebars": { + "version": "4.7.8", + "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", + "integrity": "sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ==", + "dev": true, + "dependencies": { + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" + } + }, + "node_modules/handlebars/node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -10229,6 +10341,12 @@ "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, + "node_modules/json-schema": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", + "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", + "dev": true + }, "node_modules/json-schema-traverse": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz", @@ -11327,6 +11445,96 @@ "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, + "node_modules/ng-openapi-gen": { + "version": "0.51.0", + "resolved": "https://registry.npmjs.org/ng-openapi-gen/-/ng-openapi-gen-0.51.0.tgz", + "integrity": "sha512-u85yX2/is1+DC6Mk6iySWPXc4o34Sx0oLvt7/Y2v4kPJ2SQDjhejbBkdzrchqTVpF/SL74IEw3OtprYXONB5xA==", + "dev": true, + "dependencies": { + "@apidevtools/json-schema-ref-parser": "~9.0.9", + "argparse": "^2.0.1", + "eol": "^0.9.1", + "fs-extra": "^10.0.1", + "handlebars": "^4.7.7", + "jsesc": "^3.0.2", + "json-schema": "^0.4.0", + "lodash": "^4.17.21", + "typescript": "~5.0.4" + }, + "bin": { + "ng-openapi-gen": "lib/index.js" + }, + "peerDependencies": { + "@angular/core": ">=12.0.0", + "rxjs": ">=6.0.0" + } + }, + "node_modules/ng-openapi-gen/node_modules/argparse": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", + "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", + "dev": true + }, + "node_modules/ng-openapi-gen/node_modules/fs-extra": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", + "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/ng-openapi-gen/node_modules/jsesc": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", + "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "dev": true, + "bin": { + "jsesc": "bin/jsesc" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/ng-openapi-gen/node_modules/jsonfile": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", + "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", + "dev": true, + "dependencies": { + "universalify": "^2.0.0" + }, + "optionalDependencies": { + "graceful-fs": "^4.1.6" + } + }, + "node_modules/ng-openapi-gen/node_modules/typescript": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.0.4.tgz", + "integrity": "sha512-cW9T5W9xY37cc+jfEnaUvX91foxtHkza3Nw3wkoF4sSlKn0MONdkdEndig/qPBWXNkmplh3NzayQzCiHM4/hqw==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=12.20" + } + }, + "node_modules/ng-openapi-gen/node_modules/universalify": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz", + "integrity": "sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==", + "dev": true, + "engines": { + "node": ">= 10.0.0" + } + }, "node_modules/ng2-dragula": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/ng2-dragula/-/ng2-dragula-5.0.1.tgz", @@ -14739,6 +14947,19 @@ "node": "*" } }, + "node_modules/uglify-js": { + "version": "3.17.4", + "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.17.4.tgz", + "integrity": "sha512-T9q82TJI9e/C1TAxYvfb16xO120tMVFZrGA3f9/P4424DNu6ypK103y0GPFVa17yotwSyZW5iYXgjYHkGrJW/g==", + "dev": true, + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/undici": { "version": "5.27.2", "resolved": "https://registry.npmjs.org/undici/-/undici-5.27.2.tgz", @@ -15799,6 +16020,12 @@ "integrity": "sha512-CC1bOL87PIWSBhDcTrdeLo6eGT7mCFtrg0uIJtqJUFyK+eJnzl8A1niH56uu7KMa5XFrtiV+AQuHO3n7DsHnLQ==", "dev": true }, + "node_modules/wordwrap": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", + "integrity": "sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q==", + "dev": true + }, "node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", diff --git a/package.json b/package.json index 6d12fe42..10208b74 100644 --- a/package.json +++ b/package.json @@ -19,7 +19,8 @@ "lint:fix": "eslint --fix --ext .ts \"src/{app,test}/**/*.ts\"", "update": "npm-upgrade", "prettier:write": "prettier --write \"src/{app,test}/**/*.{json,ts,js,css,scss,html}\"", - "prettier:check": "prettier --check \"src/{app,test}/**/*.{json,ts,js,css,scss,html}\"" + "prettier:check": "prettier --check \"src/{app,test}/**/*.{json,ts,js,css,scss,html}\"", + "openapi:generate": "ng-openapi-gen -c docs/ng-openapi-gen.json" }, "contributors": [ "Stephan Krusche ", @@ -78,12 +79,14 @@ "@angular/cli": "17.0.7", "@angular/compiler-cli": "17.0.7", "@angular/localize": "17.0.7", + "@cypress/schematic": "^2.5.1", "@types/crypto-js": "^4.2.1", "@typescript-eslint/eslint-plugin": "^6.10.0", "@typescript-eslint/parser": "^6.10.0", "eslint": "^8.53.0", "eslint-config-prettier": "9.0.0", "eslint-plugin-prettier": "5.0.0", + "ng-openapi-gen": "^0.51.0", "prettier": "^3.0.3", "prettier-eslint": "^16.1.1", "typescript": "5.2.2" diff --git a/src/app/api/api-configuration.ts b/src/app/api/api-configuration.ts new file mode 100644 index 00000000..4f0dfe13 --- /dev/null +++ b/src/app/api/api-configuration.ts @@ -0,0 +1,20 @@ +/* tslint:disable */ +/* eslint-disable */ +import { Injectable } from '@angular/core'; + +/** + * Global configuration + */ +@Injectable({ + providedIn: 'root', +}) +export class ApiConfiguration { + rootUrl: string = 'https://prompt.ase.cit.tum.de/tease'; +} + +/** + * Parameters for `ApiModule.forRoot()` + */ +export interface ApiConfigurationParams { + rootUrl?: string; +} diff --git a/src/app/api/api.module.ts b/src/app/api/api.module.ts new file mode 100644 index 00000000..6a85b3d7 --- /dev/null +++ b/src/app/api/api.module.ts @@ -0,0 +1,52 @@ +/* tslint:disable */ +/* eslint-disable */ +import { NgModule, ModuleWithProviders, SkipSelf, Optional } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { ApiConfiguration, ApiConfigurationParams } from './api-configuration'; + +import { ProjectsService } from './services/projects.service'; +import { StudentsService } from './services/students.service'; +import { AllocationsService } from './services/allocations.service'; +import { SkillsService } from './services/skills.service'; + +/** + * Module that provides all services and configuration. + */ +@NgModule({ + imports: [], + exports: [], + declarations: [], + providers: [ + ProjectsService, + StudentsService, + AllocationsService, + SkillsService, + ApiConfiguration + ], +}) +export class ApiModule { + static forRoot(params: ApiConfigurationParams): ModuleWithProviders { + return { + ngModule: ApiModule, + providers: [ + { + provide: ApiConfiguration, + useValue: params + } + ] + } + } + + constructor( + @Optional() @SkipSelf() parentModule: ApiModule, + @Optional() http: HttpClient + ) { + if (parentModule) { + throw new Error('ApiModule is already loaded. Import in your base AppModule only.'); + } + if (!http) { + throw new Error('You need to import the HttpClientModule in your AppModule! \n' + + 'See also https://github.com/angular/angular/issues/20575'); + } + } +} diff --git a/src/app/api/api.service.ts b/src/app/api/api.service.ts new file mode 100644 index 00000000..80cd5919 --- /dev/null +++ b/src/app/api/api.service.ts @@ -0,0 +1,62 @@ +/* tslint:disable */ +/* eslint-disable */ +import { Injectable } from '@angular/core'; +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { ApiConfiguration } from './api-configuration'; +import { StrictHttpResponse } from './strict-http-response'; + +export type ApiFnOptional = (http: HttpClient, rootUrl: string, params?: P, context?: HttpContext) => Observable>; +export type ApiFnRequired = (http: HttpClient, rootUrl: string, params: P, context?: HttpContext) => Observable>; + +/** + * Helper service to call API functions directly + */ +@Injectable({ providedIn: 'root' }) +export class ApiService { + constructor( + private config: ApiConfiguration, + private http: HttpClient + ) { + } + + private _rootUrl?: string; + + /** + * Returns the root url for API operations. If not set directly here, + * will fallback to `ApiConfiguration.rootUrl`. + */ + get rootUrl(): string { + return this._rootUrl || this.config.rootUrl; + } + + /** + * Sets the root URL for API operations + */ + set rootUrl(rootUrl: string) { + this._rootUrl = rootUrl; + } + + /** + * Executes an API call, returning the response body only + */ + invoke(fn: ApiFnRequired, params: P, context?: HttpContext): Observable; + invoke(fn: ApiFnOptional, params?: P, context?: HttpContext): Observable; + invoke(fn: ApiFnRequired | ApiFnOptional, params: P, context?: HttpContext): Observable { + return this.invoke$Response(fn, params, context) + .pipe(map(r => r.body)); + } + + /** + * Executes an API call, returning the entire response + */ + invoke$Response(fn: ApiFnRequired, params: P, context?: HttpContext): Observable>; + invoke$Response(fn: ApiFnOptional, params?: P, context?: HttpContext): Observable>; + invoke$Response(fn: ApiFnRequired | ApiFnOptional, params: P, context?: HttpContext): Observable> { + return fn(this.http, this.rootUrl, params, context) + .pipe( + filter(r => r instanceof HttpResponse), + map(r => r as StrictHttpResponse)); + } +} diff --git a/src/app/api/base-service.ts b/src/app/api/base-service.ts new file mode 100644 index 00000000..24c2c727 --- /dev/null +++ b/src/app/api/base-service.ts @@ -0,0 +1,34 @@ +/* tslint:disable */ +/* eslint-disable */ +import { Injectable } from '@angular/core'; +import { HttpClient } from '@angular/common/http'; +import { ApiConfiguration } from './api-configuration'; + +/** + * Base class for services + */ +@Injectable() +export class BaseService { + constructor( + protected config: ApiConfiguration, + protected http: HttpClient + ) { + } + + private _rootUrl?: string; + + /** + * Returns the root url for all operations in this service. If not set directly in this + * service, will fallback to `ApiConfiguration.rootUrl`. + */ + get rootUrl(): string { + return this._rootUrl || this.config.rootUrl; + } + + /** + * Sets the root URL for API operations in this service. + */ + set rootUrl(rootUrl: string) { + this._rootUrl = rootUrl; + } +} diff --git a/src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get.ts b/src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get.ts new file mode 100644 index 00000000..8aed5cf7 --- /dev/null +++ b/src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Allocation } from '../../models/allocation'; + +export interface V2CourseIterationCourseIterationIdAllocationsGet$Params { + +/** + * Unique identifier of the course iteration + */ + courseIterationId: string; +} + +export function v2CourseIterationCourseIterationIdAllocationsGet(http: HttpClient, rootUrl: string, params: V2CourseIterationCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, v2CourseIterationCourseIterationIdAllocationsGet.PATH, 'get'); + if (params) { + rb.path('courseIterationId', params.courseIterationId, {}); + } + + return http.request( + rb.build({ responseType: 'json', accept: 'application/json', context }) + ).pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }) + ); +} + +v2CourseIterationCourseIterationIdAllocationsGet.PATH = '/v2/courseIteration/{courseIterationId}/allocations'; diff --git a/src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-post.ts b/src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-post.ts new file mode 100644 index 00000000..1a694cd7 --- /dev/null +++ b/src/app/api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-post.ts @@ -0,0 +1,37 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Allocation } from '../../models/allocation'; + +export interface V2CourseIterationCourseIterationIdAllocationsPost$Params { + +/** + * Unique identifier of the course iteration + */ + courseIterationId: string; + body?: Array +} + +export function v2CourseIterationCourseIterationIdAllocationsPost(http: HttpClient, rootUrl: string, params: V2CourseIterationCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable> { + const rb = new RequestBuilder(rootUrl, v2CourseIterationCourseIterationIdAllocationsPost.PATH, 'post'); + if (params) { + rb.path('courseIterationId', params.courseIterationId, {}); + rb.body(params.body, 'application/json'); + } + + return http.request( + rb.build({ responseType: 'text', accept: '*/*', context }) + ).pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return (r as HttpResponse).clone({ body: undefined }) as StrictHttpResponse; + }) + ); +} + +v2CourseIterationCourseIterationIdAllocationsPost.PATH = '/v2/courseIteration/{courseIterationId}/allocations'; diff --git a/src/app/api/fn/projects/v-2-course-iteration-course-iteration-id-projects-get.ts b/src/app/api/fn/projects/v-2-course-iteration-course-iteration-id-projects-get.ts new file mode 100644 index 00000000..9441265e --- /dev/null +++ b/src/app/api/fn/projects/v-2-course-iteration-course-iteration-id-projects-get.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Project } from '../../models/project'; + +export interface V2CourseIterationCourseIterationIdProjectsGet$Params { + +/** + * Unique identifier of the course iteration + */ + courseIterationId: string; +} + +export function v2CourseIterationCourseIterationIdProjectsGet(http: HttpClient, rootUrl: string, params: V2CourseIterationCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, v2CourseIterationCourseIterationIdProjectsGet.PATH, 'get'); + if (params) { + rb.path('courseIterationId', params.courseIterationId, {}); + } + + return http.request( + rb.build({ responseType: 'json', accept: 'application/json', context }) + ).pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }) + ); +} + +v2CourseIterationCourseIterationIdProjectsGet.PATH = '/v2/courseIteration/{courseIterationId}/projects'; diff --git a/src/app/api/fn/skills/v-2-course-iteration-course-iteration-id-skills-get.ts b/src/app/api/fn/skills/v-2-course-iteration-course-iteration-id-skills-get.ts new file mode 100644 index 00000000..2317c20c --- /dev/null +++ b/src/app/api/fn/skills/v-2-course-iteration-course-iteration-id-skills-get.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Skill } from '../../models/skill'; + +export interface V2CourseIterationCourseIterationIdSkillsGet$Params { + +/** + * Unique identifier of the course iteration + */ + courseIterationId: string; +} + +export function v2CourseIterationCourseIterationIdSkillsGet(http: HttpClient, rootUrl: string, params: V2CourseIterationCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, v2CourseIterationCourseIterationIdSkillsGet.PATH, 'get'); + if (params) { + rb.path('courseIterationId', params.courseIterationId, {}); + } + + return http.request( + rb.build({ responseType: 'json', accept: 'application/json', context }) + ).pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }) + ); +} + +v2CourseIterationCourseIterationIdSkillsGet.PATH = '/v2/courseIteration/{courseIterationId}/skills'; diff --git a/src/app/api/fn/students/v-2-course-iteration-course-iteration-id-students-get.ts b/src/app/api/fn/students/v-2-course-iteration-course-iteration-id-students-get.ts new file mode 100644 index 00000000..27bf151d --- /dev/null +++ b/src/app/api/fn/students/v-2-course-iteration-course-iteration-id-students-get.ts @@ -0,0 +1,35 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext, HttpResponse } from '@angular/common/http'; +import { Observable } from 'rxjs'; +import { filter, map } from 'rxjs/operators'; +import { StrictHttpResponse } from '../../strict-http-response'; +import { RequestBuilder } from '../../request-builder'; + +import { Student } from '../../models/student'; + +export interface V2CourseIterationCourseIterationIdStudentsGet$Params { + +/** + * Unique identifier of the course iteration + */ + courseIterationId: string; +} + +export function v2CourseIterationCourseIterationIdStudentsGet(http: HttpClient, rootUrl: string, params: V2CourseIterationCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, v2CourseIterationCourseIterationIdStudentsGet.PATH, 'get'); + if (params) { + rb.path('courseIterationId', params.courseIterationId, {}); + } + + return http.request( + rb.build({ responseType: 'json', accept: 'application/json', context }) + ).pipe( + filter((r: any): r is HttpResponse => r instanceof HttpResponse), + map((r: HttpResponse) => { + return r as StrictHttpResponse>; + }) + ); +} + +v2CourseIterationCourseIterationIdStudentsGet.PATH = '/v2/courseIteration/{courseIterationId}/students'; diff --git a/src/app/api/models.ts b/src/app/api/models.ts new file mode 100644 index 00000000..2c869337 --- /dev/null +++ b/src/app/api/models.ts @@ -0,0 +1,14 @@ +/* tslint:disable */ +/* eslint-disable */ +export { Allocation } from './models/allocation'; +export { Comment } from './models/comment'; +export { Device } from './models/device'; +export { Gender } from './models/gender'; +export { Language } from './models/language'; +export { LanguageProficiency } from './models/language-proficiency'; +export { Project } from './models/project'; +export { ProjectPreference } from './models/project-preference'; +export { Skill } from './models/skill'; +export { SkillProficiency } from './models/skill-proficiency'; +export { Student } from './models/student'; +export { StudentSkill } from './models/student-skill'; diff --git a/src/app/api/models/allocation.ts b/src/app/api/models/allocation.ts new file mode 100644 index 00000000..692b3d73 --- /dev/null +++ b/src/app/api/models/allocation.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ + +/** + * A project with references to the students assigned to this project as part of the matching result + */ +export interface Allocation { + projectId: string; + studentIds: Array; +} diff --git a/src/app/api/models/comment.ts b/src/app/api/models/comment.ts new file mode 100644 index 00000000..17043d30 --- /dev/null +++ b/src/app/api/models/comment.ts @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ +export interface Comment { + author: string; + date: string; + description: string; + text: string; +} diff --git a/src/app/api/models/device.ts b/src/app/api/models/device.ts new file mode 100644 index 00000000..e80c7e79 --- /dev/null +++ b/src/app/api/models/device.ts @@ -0,0 +1,9 @@ +/* tslint:disable */ +/* eslint-disable */ +export enum Device { + IPhone = 'IPhone', + IPad = 'IPad', + Mac = 'Mac', + Watch = 'Watch', + RaspberryPi = 'Raspberry Pi' +} diff --git a/src/app/api/models/gender.ts b/src/app/api/models/gender.ts new file mode 100644 index 00000000..2bc79e61 --- /dev/null +++ b/src/app/api/models/gender.ts @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ +export enum Gender { + Female = 'Female', + Male = 'Male', + Other = 'Other', + PreferNotToSay = 'Prefer not to say' +} diff --git a/src/app/api/models/language-proficiency.ts b/src/app/api/models/language-proficiency.ts new file mode 100644 index 00000000..d780b289 --- /dev/null +++ b/src/app/api/models/language-proficiency.ts @@ -0,0 +1,8 @@ +/* tslint:disable */ +/* eslint-disable */ +export enum LanguageProficiency { + A1A2 = 'A1/A2', + B1B2 = 'B1/B2', + C1C2 = 'C1/C2', + Native = 'Native' +} diff --git a/src/app/api/models/language.ts b/src/app/api/models/language.ts new file mode 100644 index 00000000..01d6c641 --- /dev/null +++ b/src/app/api/models/language.ts @@ -0,0 +1,7 @@ +/* tslint:disable */ +/* eslint-disable */ +import { LanguageProficiency } from '../models/language-proficiency'; +export interface Language { + language: string; + proficiency: LanguageProficiency; +} diff --git a/src/app/api/models/project-preference.ts b/src/app/api/models/project-preference.ts new file mode 100644 index 00000000..98bb8052 --- /dev/null +++ b/src/app/api/models/project-preference.ts @@ -0,0 +1,6 @@ +/* tslint:disable */ +/* eslint-disable */ +export interface ProjectPreference { + priority: number; + projectId: string; +} diff --git a/src/app/api/models/project.ts b/src/app/api/models/project.ts new file mode 100644 index 00000000..04ccc92a --- /dev/null +++ b/src/app/api/models/project.ts @@ -0,0 +1,6 @@ +/* tslint:disable */ +/* eslint-disable */ +export interface Project { + id: string; + name: string; +} diff --git a/src/app/api/models/skill-proficiency.ts b/src/app/api/models/skill-proficiency.ts new file mode 100644 index 00000000..9f194fb7 --- /dev/null +++ b/src/app/api/models/skill-proficiency.ts @@ -0,0 +1,12 @@ +/* tslint:disable */ +/* eslint-disable */ + +/** + * Proficiency in a skill + */ +export enum SkillProficiency { + Novice = 'Novice', + Intermediate = 'Intermediate', + Advanced = 'Advanced', + Expert = 'Expert' +} diff --git a/src/app/api/models/skill.ts b/src/app/api/models/skill.ts new file mode 100644 index 00000000..17718e7b --- /dev/null +++ b/src/app/api/models/skill.ts @@ -0,0 +1,7 @@ +/* tslint:disable */ +/* eslint-disable */ +export interface Skill { + description: string; + id: string; + title: string; +} diff --git a/src/app/api/models/student-skill.ts b/src/app/api/models/student-skill.ts new file mode 100644 index 00000000..9d820947 --- /dev/null +++ b/src/app/api/models/student-skill.ts @@ -0,0 +1,7 @@ +/* tslint:disable */ +/* eslint-disable */ +import { SkillProficiency } from '../models/skill-proficiency'; +export interface StudentSkill { + id: string; + proficiency: SkillProficiency; +} diff --git a/src/app/api/models/student.ts b/src/app/api/models/student.ts new file mode 100644 index 00000000..2620ce8c --- /dev/null +++ b/src/app/api/models/student.ts @@ -0,0 +1,32 @@ +/* tslint:disable */ +/* eslint-disable */ +import { Comment } from '../models/comment'; +import { Device } from '../models/device'; +import { Gender } from '../models/gender'; +import { Language } from '../models/language'; +import { ProjectPreference } from '../models/project-preference'; +import { SkillProficiency } from '../models/skill-proficiency'; +import { StudentSkill } from '../models/student-skill'; + +/** + * A person enrolled in the iPraktikum course at TUM + */ +export interface Student { + devices: Array; + email: string; + firstName: string; + gender: Gender; + id: string; + introCourseProficiency: SkillProficiency; + introSelfAssessment: SkillProficiency; + languages: Array; + lastName: string; + nationality: string; + projectPreferences: Array; + semester: number; + skills: Array; + studentComments: Array; + studyDegree: string; + studyProgram: string; + tutorComments: Array; +} diff --git a/src/app/api/request-builder.ts b/src/app/api/request-builder.ts new file mode 100644 index 00000000..5b7a63b8 --- /dev/null +++ b/src/app/api/request-builder.ts @@ -0,0 +1,368 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpRequest, HttpParameterCodec, HttpParams, HttpHeaders, HttpContext } from '@angular/common/http'; + +/** + * Custom parameter codec to correctly handle the plus sign in parameter + * values. See https://github.com/angular/angular/issues/18261 + */ +class ParameterCodec implements HttpParameterCodec { + encodeKey(key: string): string { + return encodeURIComponent(key); + } + + encodeValue(value: string): string { + return encodeURIComponent(value); + } + + decodeKey(key: string): string { + return decodeURIComponent(key); + } + + decodeValue(value: string): string { + return decodeURIComponent(value); + } +} +const ParameterCodecInstance = new ParameterCodec(); + +/** + * Defines the options for appending a parameter + */ +interface ParameterOptions { + style?: string; + explode?: boolean; +} + +/** + * Base class for a parameter + */ +abstract class Parameter { + constructor(public name: string, public value: any, public options: ParameterOptions, defaultStyle: string, defaultExplode: boolean) { + this.options = options || {}; + if (this.options.style === null || this.options.style === undefined) { + this.options.style = defaultStyle; + } + if (this.options.explode === null || this.options.explode === undefined) { + this.options.explode = defaultExplode; + } + } + + serializeValue(value: any, separator = ','): string { + if (value === null || value === undefined) { + return ''; + } else if (value instanceof Array) { + return value.map(v => this.serializeValue(v).split(separator).join(encodeURIComponent(separator))).join(separator); + } else if (typeof value === 'object') { + const array: string[] = []; + for (const key of Object.keys(value)) { + let propVal = value[key]; + if (propVal !== null && propVal !== undefined) { + propVal = this.serializeValue(propVal).split(separator).join(encodeURIComponent(separator)); + if (this.options.explode) { + array.push(`${key}=${propVal}`); + } else { + array.push(key); + array.push(propVal); + } + } + } + return array.join(separator); + } else { + return String(value); + } + } +} + +/** + * A parameter in the operation path + */ +class PathParameter extends Parameter { + constructor(name: string, value: any, options: ParameterOptions) { + super(name, value, options, 'simple', false); + } + + append(path: string): string { + let value = this.value; + if (value === null || value === undefined) { + value = ''; + } + let prefix = this.options.style === 'label' ? '.' : ''; + let separator = this.options.explode ? prefix === '' ? ',' : prefix : ','; + let alreadySerialized = false; + if (this.options.style === 'matrix') { + // The parameter name is just used as prefix, except in some cases... + prefix = `;${this.name}=`; + if (this.options.explode && typeof value === 'object') { + prefix = ';'; + if (value instanceof Array) { + // For arrays we have to repeat the name for each element + value = value.map(v => `${this.name}=${this.serializeValue(v, ';')}`); + value = value.join(';'); + alreadySerialized = true; + } else { + // For objects we have to put each the key / value pairs + value = this.serializeValue(value, ';'); + alreadySerialized = true + } + } + } + value = prefix + (alreadySerialized ? value : this.serializeValue(value, separator)); + // Replace both the plain variable and the corresponding variant taking in the prefix and explode into account + path = path.replace(`{${this.name}}`, value); + path = path.replace(`{${prefix}${this.name}${this.options.explode ? '*' : ''}}`, value); + return path; + } + + // @ts-ignore + serializeValue(value: any, separator = ','): string { + var result = typeof value === 'string' ? encodeURIComponent(value) : super.serializeValue(value, separator); + result = result.replace(/%3D/g, '='); + result = result.replace(/%3B/g, ';'); + result = result.replace(/%2C/g, ','); + return result; + } +} + +/** + * A parameter in the query + */ +class QueryParameter extends Parameter { + constructor(name: string, value: any, options: ParameterOptions) { + super(name, value, options, 'form', true); + } + + append(params: HttpParams): HttpParams { + if (this.value instanceof Array) { + // Array serialization + if (this.options.explode) { + for (const v of this.value) { + params = params.append(this.name, this.serializeValue(v)); + } + } else { + const separator = this.options.style === 'spaceDelimited' + ? ' ' : this.options.style === 'pipeDelimited' + ? '|' : ','; + return params.append(this.name, this.serializeValue(this.value, separator)); + } + } else if (this.value !== null && typeof this.value === 'object') { + // Object serialization + if (this.options.style === 'deepObject') { + // Append a parameter for each key, in the form `name[key]` + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + params = params.append(`${this.name}[${key}]`, this.serializeValue(propVal)); + } + } + } else if (this.options.explode) { + // Append a parameter for each key without using the parameter name + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + params = params.append(key, this.serializeValue(propVal)); + } + } + } else { + // Append a single parameter whose values are a comma-separated list of key,value,key,value... + const array: any[] = []; + for (const key of Object.keys(this.value)) { + const propVal = this.value[key]; + if (propVal !== null && propVal !== undefined) { + array.push(key); + array.push(propVal); + } + } + params = params.append(this.name, this.serializeValue(array)); + } + } else if (this.value !== null && this.value !== undefined) { + // Plain value + params = params.append(this.name, this.serializeValue(this.value)); + } + return params; + } +} + +/** + * A parameter in the HTTP request header + */ +class HeaderParameter extends Parameter { + constructor(name: string, value: any, options: ParameterOptions) { + super(name, value, options, 'simple', false); + } + + append(headers: HttpHeaders): HttpHeaders { + if (this.value !== null && this.value !== undefined) { + if (this.value instanceof Array) { + for (const v of this.value) { + headers = headers.append(this.name, this.serializeValue(v)); + } + } else { + headers = headers.append(this.name, this.serializeValue(this.value)); + } + } + return headers; + } +} + +/** + * Helper to build http requests from parameters + */ +export class RequestBuilder { + + private _path = new Map(); + private _query = new Map(); + private _header = new Map(); + _bodyContent: any | null; + _bodyContentType?: string; + + constructor( + public rootUrl: string, + public operationPath: string, + public method: string) { + } + + /** + * Sets a path parameter + */ + path(name: string, value: any, options?: ParameterOptions): void { + this._path.set(name, new PathParameter(name, value, options || {})); + } + + /** + * Sets a query parameter + */ + query(name: string, value: any, options?: ParameterOptions): void { + this._query.set(name, new QueryParameter(name, value, options || {})); + } + + /** + * Sets a header parameter + */ + header(name: string, value: any, options?: ParameterOptions): void { + this._header.set(name, new HeaderParameter(name, value, options || {})); + } + + /** + * Sets the body content, along with the content type + */ + body(value: any, contentType = 'application/json'): void { + if (value instanceof Blob) { + this._bodyContentType = value.type; + } else { + this._bodyContentType = contentType; + } + if (this._bodyContentType === 'application/x-www-form-urlencoded' && value !== null && typeof value === 'object') { + // Handle URL-encoded data + const pairs: Array<[string, string]> = []; + for (const key of Object.keys(value)) { + let val = value[key]; + if (!(val instanceof Array)) { + val = [val]; + } + for (const v of val) { + const formValue = this.formDataValue(v); + if (formValue !== null) { + pairs.push([key, formValue]); + } + } + } + this._bodyContent = pairs.map(p => `${encodeURIComponent(p[0])}=${encodeURIComponent(p[1])}`).join('&'); + } else if (this._bodyContentType === 'multipart/form-data') { + // Handle multipart form data + const formData = new FormData(); + if (value !== null && value !== undefined) { + for (const key of Object.keys(value)) { + const val = value[key]; + if (val instanceof Array) { + for (const v of val) { + const toAppend = this.formDataValue(v); + if (toAppend !== null) { + formData.append(key, toAppend); + } + } + } else { + const toAppend = this.formDataValue(val); + if (toAppend !== null) { + formData.set(key, toAppend); + } + } + } + } + this._bodyContent = formData; + } else { + // The body is the plain content + this._bodyContent = value; + } + } + + private formDataValue(value: any): any { + if (value === null || value === undefined) { + return null; + } + if (value instanceof Blob) { + return value; + } + if (typeof value === 'object') { + return new Blob([JSON.stringify(value)], {type: 'application/json'}) + } + return String(value); + } + + /** + * Builds the request with the current set parameters + */ + build(options?: { + /** Which content types to accept */ + accept?: string; + + /** The expected response type */ + responseType?: 'json' | 'text' | 'blob' | 'arraybuffer'; + + /** Whether to report progress on uploads / downloads */ + reportProgress?: boolean; + + /** Allow passing HttpContext for HttpClient */ + context?: HttpContext; + }): HttpRequest { + + options = options || {}; + + // Path parameters + let path = this.operationPath; + for (const pathParam of this._path.values()) { + path = pathParam.append(path); + } + const url = this.rootUrl + path; + + // Query parameters + let httpParams = new HttpParams({ + encoder: ParameterCodecInstance + }); + for (const queryParam of this._query.values()) { + httpParams = queryParam.append(httpParams); + } + + // Header parameters + let httpHeaders = new HttpHeaders(); + if (options.accept) { + httpHeaders = httpHeaders.append('Accept', options.accept); + } + for (const headerParam of this._header.values()) { + httpHeaders = headerParam.append(httpHeaders); + } + + // Request content headers + if (this._bodyContentType && !(this._bodyContent instanceof FormData)) { + httpHeaders = httpHeaders.set('Content-Type', this._bodyContentType); + } + + // Perform the request + return new HttpRequest(this.method.toUpperCase(), url, this._bodyContent, { + params: httpParams, + headers: httpHeaders, + responseType: options.responseType, + reportProgress: options.reportProgress, + context: options.context + }); + } +} diff --git a/src/app/api/services.ts b/src/app/api/services.ts new file mode 100644 index 00000000..6a0d3a76 --- /dev/null +++ b/src/app/api/services.ts @@ -0,0 +1,4 @@ +export { ProjectsService } from './services/projects.service'; +export { StudentsService } from './services/students.service'; +export { AllocationsService } from './services/allocations.service'; +export { SkillsService } from './services/skills.service'; diff --git a/src/app/api/services/allocations.service.ts b/src/app/api/services/allocations.service.ts new file mode 100644 index 00000000..20a27bd7 --- /dev/null +++ b/src/app/api/services/allocations.service.ts @@ -0,0 +1,90 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { Allocation } from '../models/allocation'; +import { v2CourseIterationCourseIterationIdAllocationsGet } from '../fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get'; +import { V2CourseIterationCourseIterationIdAllocationsGet$Params } from '../fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get'; +import { v2CourseIterationCourseIterationIdAllocationsPost } from '../fn/allocations/v-2-course-iteration-course-iteration-id-allocations-post'; +import { V2CourseIterationCourseIterationIdAllocationsPost$Params } from '../fn/allocations/v-2-course-iteration-course-iteration-id-allocations-post'; + +@Injectable({ providedIn: 'root' }) +export class AllocationsService extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `v2CourseIterationCourseIterationIdAllocationsGet()` */ + static readonly V2CourseIterationCourseIterationIdAllocationsGetPath = '/v2/courseIteration/{courseIterationId}/allocations'; + + /** + * Retrieve the final result of the matching/allocation. + * + * After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `v2CourseIterationCourseIterationIdAllocationsGet()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdAllocationsGet$Response(params: V2CourseIterationCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable>> { + return v2CourseIterationCourseIterationIdAllocationsGet(this.http, this.rootUrl, params, context); + } + + /** + * Retrieve the final result of the matching/allocation. + * + * After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `v2CourseIterationCourseIterationIdAllocationsGet$Response()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdAllocationsGet(params: V2CourseIterationCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable> { + return this.v2CourseIterationCourseIterationIdAllocationsGet$Response(params, context).pipe( + map((r: StrictHttpResponse>): Array => r.body) + ); + } + + /** Path part for operation `v2CourseIterationCourseIterationIdAllocationsPost()` */ + static readonly V2CourseIterationCourseIterationIdAllocationsPostPath = '/v2/courseIteration/{courseIterationId}/allocations'; + + /** + * Submit the final result of the matching/allocation. + * + * After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `v2CourseIterationCourseIterationIdAllocationsPost()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + v2CourseIterationCourseIterationIdAllocationsPost$Response(params: V2CourseIterationCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable> { + return v2CourseIterationCourseIterationIdAllocationsPost(this.http, this.rootUrl, params, context); + } + + /** + * Submit the final result of the matching/allocation. + * + * After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `v2CourseIterationCourseIterationIdAllocationsPost$Response()` instead. + * + * This method sends `application/json` and handles request body of type `application/json`. + */ + v2CourseIterationCourseIterationIdAllocationsPost(params: V2CourseIterationCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable { + return this.v2CourseIterationCourseIterationIdAllocationsPost$Response(params, context).pipe( + map((r: StrictHttpResponse): void => r.body) + ); + } + +} diff --git a/src/app/api/services/projects.service.ts b/src/app/api/services/projects.service.ts new file mode 100644 index 00000000..fffb6c85 --- /dev/null +++ b/src/app/api/services/projects.service.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { Project } from '../models/project'; +import { v2CourseIterationCourseIterationIdProjectsGet } from '../fn/projects/v-2-course-iteration-course-iteration-id-projects-get'; +import { V2CourseIterationCourseIterationIdProjectsGet$Params } from '../fn/projects/v-2-course-iteration-course-iteration-id-projects-get'; + +@Injectable({ providedIn: 'root' }) +export class ProjectsService extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `v2CourseIterationCourseIterationIdProjectsGet()` */ + static readonly V2CourseIterationCourseIterationIdProjectsGetPath = '/v2/courseIteration/{courseIterationId}/projects'; + + /** + * Retrieve projects from a specific course iteration. + * + * Returns projects from a course iteration based on the provided ID. + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `v2CourseIterationCourseIterationIdProjectsGet()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdProjectsGet$Response(params: V2CourseIterationCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable>> { + return v2CourseIterationCourseIterationIdProjectsGet(this.http, this.rootUrl, params, context); + } + + /** + * Retrieve projects from a specific course iteration. + * + * Returns projects from a course iteration based on the provided ID. + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `v2CourseIterationCourseIterationIdProjectsGet$Response()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdProjectsGet(params: V2CourseIterationCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable> { + return this.v2CourseIterationCourseIterationIdProjectsGet$Response(params, context).pipe( + map((r: StrictHttpResponse>): Array => r.body) + ); + } + +} diff --git a/src/app/api/services/skills.service.ts b/src/app/api/services/skills.service.ts new file mode 100644 index 00000000..8488dd73 --- /dev/null +++ b/src/app/api/services/skills.service.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { Skill } from '../models/skill'; +import { v2CourseIterationCourseIterationIdSkillsGet } from '../fn/skills/v-2-course-iteration-course-iteration-id-skills-get'; +import { V2CourseIterationCourseIterationIdSkillsGet$Params } from '../fn/skills/v-2-course-iteration-course-iteration-id-skills-get'; + +@Injectable({ providedIn: 'root' }) +export class SkillsService extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `v2CourseIterationCourseIterationIdSkillsGet()` */ + static readonly V2CourseIterationCourseIterationIdSkillsGetPath = '/v2/courseIteration/{courseIterationId}/skills'; + + /** + * Retrieve the skills from a specific course iteration. + * + * After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `v2CourseIterationCourseIterationIdSkillsGet()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdSkillsGet$Response(params: V2CourseIterationCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable>> { + return v2CourseIterationCourseIterationIdSkillsGet(this.http, this.rootUrl, params, context); + } + + /** + * Retrieve the skills from a specific course iteration. + * + * After the allocation is concluded, TEASE can report the results (which team each student was assigned to) to PROMPT without needing to repeat/send back all of the information that was initially sent + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `v2CourseIterationCourseIterationIdSkillsGet$Response()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdSkillsGet(params: V2CourseIterationCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable> { + return this.v2CourseIterationCourseIterationIdSkillsGet$Response(params, context).pipe( + map((r: StrictHttpResponse>): Array => r.body) + ); + } + +} diff --git a/src/app/api/services/students.service.ts b/src/app/api/services/students.service.ts new file mode 100644 index 00000000..db0f7999 --- /dev/null +++ b/src/app/api/services/students.service.ts @@ -0,0 +1,55 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpClient, HttpContext } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; +import { map } from 'rxjs/operators'; + +import { BaseService } from '../base-service'; +import { ApiConfiguration } from '../api-configuration'; +import { StrictHttpResponse } from '../strict-http-response'; + +import { Student } from '../models/student'; +import { v2CourseIterationCourseIterationIdStudentsGet } from '../fn/students/v-2-course-iteration-course-iteration-id-students-get'; +import { V2CourseIterationCourseIterationIdStudentsGet$Params } from '../fn/students/v-2-course-iteration-course-iteration-id-students-get'; + +@Injectable({ providedIn: 'root' }) +export class StudentsService extends BaseService { + constructor(config: ApiConfiguration, http: HttpClient) { + super(config, http); + } + + /** Path part for operation `v2CourseIterationCourseIterationIdStudentsGet()` */ + static readonly V2CourseIterationCourseIterationIdStudentsGetPath = '/v2/courseIteration/{courseIterationId}/students'; + + /** + * Retrieve students from a specific course iteration. + * + * Returns students from a course iteration based on the provided ID. + * + * This method provides access to the full `HttpResponse`, allowing access to response headers. + * To access only the response body, use `v2CourseIterationCourseIterationIdStudentsGet()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdStudentsGet$Response(params: V2CourseIterationCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable>> { + return v2CourseIterationCourseIterationIdStudentsGet(this.http, this.rootUrl, params, context); + } + + /** + * Retrieve students from a specific course iteration. + * + * Returns students from a course iteration based on the provided ID. + * + * This method provides access only to the response body. + * To access the full response (for headers, for example), `v2CourseIterationCourseIterationIdStudentsGet$Response()` instead. + * + * This method doesn't expect any request body. + */ + v2CourseIterationCourseIterationIdStudentsGet(params: V2CourseIterationCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable> { + return this.v2CourseIterationCourseIterationIdStudentsGet$Response(params, context).pipe( + map((r: StrictHttpResponse>): Array => r.body) + ); + } + +} diff --git a/src/app/api/strict-http-response.ts b/src/app/api/strict-http-response.ts new file mode 100644 index 00000000..42589fac --- /dev/null +++ b/src/app/api/strict-http-response.ts @@ -0,0 +1,10 @@ +/* tslint:disable */ +/* eslint-disable */ +import { HttpResponse } from '@angular/common/http'; + +/** + * Constrains the http response to not have the body defined as `T | null`, but `T` only. + */ +export type StrictHttpResponse = HttpResponse & { + readonly body: T; +} diff --git a/src/app/app.component.html b/src/app/app.component.html index a50c2441..5a2ef820 100644 --- a/src/app/app.component.html +++ b/src/app/app.component.html @@ -7,6 +7,11 @@
+ + + diff --git a/src/app/app.component.ts b/src/app/app.component.ts index 9e328ff7..30558d89 100644 --- a/src/app/app.component.ts +++ b/src/app/app.component.ts @@ -118,4 +118,20 @@ export class AppComponent implements OverlayServiceHost { this.overlayVisible = false; this.overlayHostDirective.viewContainerRef.clear(); } + + // TODO: Remove before merging #86, #75 + areTokensSet(): boolean { + return localStorage.getItem('jwt_token') !== null && localStorage.getItem('course_iteration') !== null; + } + + // TODO: Remove before merging #86, #75 + async toggleTokens() { + if (this.areTokensSet()) { + localStorage.removeItem('jwt_token'); + localStorage.removeItem('course_iteration'); + } else { + localStorage.setItem('jwt_token', 'xxx'); + localStorage.setItem('course_iteration', 'ios23'); + } + } } diff --git a/src/app/app.module.ts b/src/app/app.module.ts index 8294bfe7..892aae0a 100644 --- a/src/app/app.module.ts +++ b/src/app/app.module.ts @@ -1,34 +1,48 @@ -import { NgModule } from '@angular/core'; +import { NgModule, Provider, forwardRef } from '@angular/core'; import { BrowserModule } from '@angular/platform-browser'; +import { HttpClientModule, HTTP_INTERCEPTORS } from '@angular/common/http'; +import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; +import { ReactiveFormsModule } from '@angular/forms'; -import { AppRoutingModule } from './app-routing.module'; -import { AppComponent } from './app.component'; -import { BrowserAnimationsModule } from '@angular/platform-browser/animations'; import { MatButtonModule } from '@angular/material/button'; import { MatIconModule } from '@angular/material/icon'; +import { MatTooltipModule } from '@angular/material/tooltip'; +import { MatMenuModule } from '@angular/material/menu'; + +import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; +import { DragulaModule } from 'ng2-dragula'; + +import { AppComponent } from './app.component'; +import { HighlightingToolbarComponent } from './highlighting-toolbar/highlighting-toolbar.component'; + +import { AppRoutingModule } from './app-routing.module'; import { SharedModule } from './shared/shared.module'; +import { DashboardModule } from './dashboard/dashboard.module'; +import { ApiModule } from './api/api.module'; + import { TeamService } from './shared/layers/business-logic-layer/team.service'; import { ConstraintService } from './shared/layers/business-logic-layer/constraint.service'; -import { DashboardModule } from './dashboard/dashboard.module'; -import { NgbModule } from '@ng-bootstrap/ng-bootstrap'; -import { OverlayHostDirective } from './overlay-host.directive'; import { OverlayService } from './overlay.service'; import { PersonStatisticsService } from './shared/layers/business-logic-layer/person-statistics.service'; -import { DragulaModule } from 'ng2-dragula'; import { TeamGenerationService } from './shared/layers/business-logic-layer/team-generation/team-generation.service'; import { LPTeamGenerationService } from './shared/layers/business-logic-layer/team-generation/lp-team-generation.service'; -import { HighlightingToolbarComponent } from './highlighting-toolbar/highlighting-toolbar.component'; -import { Location, LocationStrategy, PathLocationStrategy } from '@angular/common'; -import { ReactiveFormsModule } from '@angular/forms'; -import { MatTooltipModule } from '@angular/material/tooltip'; -import { MatMenuModule } from '@angular/material/menu'; +import { PromptService } from './shared/services/prompt.service'; + +import { OverlayHostDirective } from './overlay-host.directive'; +import { environment } from '../environments/environment'; +import { AuthInterceptor } from './shared/interceptors/auth.interceptor'; + +export const API_INTERCEPTOR_PROVIDER: Provider = { + provide: HTTP_INTERCEPTORS, + useExisting: forwardRef(() => AuthInterceptor), + multi: true, +}; @NgModule({ declarations: [AppComponent, OverlayHostDirective, HighlightingToolbarComponent], imports: [ /* external modules */ BrowserModule, - BrowserAnimationsModule, MatButtonModule, MatIconModule, NgbModule, @@ -36,16 +50,21 @@ import { MatMenuModule } from '@angular/material/menu'; DragulaModule.forRoot(), ReactiveFormsModule, MatTooltipModule, + HttpClientModule, /* own modules */ SharedModule, DashboardModule, MatMenuModule, + environment.production ? ApiModule : ApiModule.forRoot({ rootUrl: 'http://localhost:3001/tease' }), ], providers: [ TeamService, ConstraintService, OverlayService, PersonStatisticsService, + PromptService, + AuthInterceptor, + API_INTERCEPTOR_PROVIDER, [Location, { provide: LocationStrategy, useClass: PathLocationStrategy }], { provide: TeamGenerationService, useClass: LPTeamGenerationService }, ], diff --git a/src/app/dashboard/import-overlay/import-overlay.component.html b/src/app/dashboard/import-overlay/import-overlay.component.html index 183f9135..ae41c127 100644 --- a/src/app/dashboard/import-overlay/import-overlay.component.html +++ b/src/app/dashboard/import-overlay/import-overlay.component.html @@ -18,22 +18,16 @@
Importing new data replaces the current dataset.
} -
-
-
Example Data
-
You can use example data to explore and test the app.
- -
-
-
-
CSV File
-
Data can be loaded from a file in the CSV format.
- -
+
+ + @if (this.isPromptImportAvailable()) { + + } +
diff --git a/src/app/dashboard/import-overlay/import-overlay.component.ts b/src/app/dashboard/import-overlay/import-overlay.component.ts index 8887a75a..9b0e8956 100644 --- a/src/app/dashboard/import-overlay/import-overlay.component.ts +++ b/src/app/dashboard/import-overlay/import-overlay.component.ts @@ -3,6 +3,10 @@ import { OverlayComponent } from '../../overlay.service'; import { TeamService } from '../../shared/layers/business-logic-layer/team.service'; import { ExamplePersonPropertyCsvRemotePath } from '../../shared/constants/csv.constants'; import { ConstraintLoggingService } from '../../shared/layers/business-logic-layer/constraint-logging.service'; +import { PromptService } from 'src/app/shared/services/prompt.service'; +import { StudentPersonTransformerService } from 'src/app/shared/services/student-person-transformer.service'; +import { AuthInterceptor } from 'src/app/shared/interceptors/auth.interceptor'; +import { ProjectTeamTransformerService } from 'src/app/shared/services/project-team-transformer.service'; @Component({ selector: 'app-import-overlay', @@ -13,12 +17,61 @@ export class ImportOverlayComponent implements OverlayComponent { public data: { onTeamsImported: () => void; overwriteWarning: boolean }; // TODO: any should be Array @ViewChild('fileInput') fileInput: ElementRef; - constructor(private teamService: TeamService) {} + constructor( + private teamService: TeamService, + private promptService: PromptService, + private studentPersonTransformerService: StudentPersonTransformerService, + private projectTeamTransformerService: ProjectTeamTransformerService, + private authInterceptor: AuthInterceptor + ) {} - openFileInput() { + importFromCSV() { this.fileInput.nativeElement.click(); } + isPromptImportAvailable(): boolean { + return this.getJwtToken() !== null && this.getCourseIteration() !== null; + } + + getJwtToken(): string | null { + return localStorage.getItem('jwt_token'); + } + + getCourseIteration(): string | null { + return localStorage.getItem('course_iteration'); + } + + async importFromPrompt(): Promise { + const courseIterationId = this.getCourseIteration(); + const jwtToken = this.getJwtToken(); + if (!courseIterationId || !jwtToken) { + console.log('Course iteration or jwt token not set'); + return; + } + this.teamService.clearSavedData(); + ConstraintLoggingService.reset(); + + this.authInterceptor.setAccessToken(jwtToken); + + const students = await this.promptService.getStudents(courseIterationId); + const projects = await this.promptService.getProjects(courseIterationId); + const skills = await this.promptService.getSkills(courseIterationId); + const allocations = await this.promptService.getAllocations(courseIterationId); + + const persons = this.studentPersonTransformerService.transformStudentsToPersons( + students, + skills, + projects, + allocations + ); + + const teams = this.projectTeamTransformerService.projectsToTeams(projects, persons); + + this.teamService.load([persons, teams]); + + this.data.onTeamsImported(); + } + onFileChanged(event) { const files = event.target.files; if (files.length !== 1) return; @@ -30,7 +83,7 @@ export class ImportOverlayComponent implements OverlayComponent { } public loadExampleData() { - this.teamService.readRemoteData(ExamplePersonPropertyCsvRemotePath).then(success => { + this.teamService.readRemoteData(ExamplePersonPropertyCsvRemotePath).then(() => { this.data.onTeamsImported(); ConstraintLoggingService.reset(); }); diff --git a/src/app/shared/interceptors/auth.interceptor.ts b/src/app/shared/interceptors/auth.interceptor.ts new file mode 100644 index 00000000..63ac2efd --- /dev/null +++ b/src/app/shared/interceptors/auth.interceptor.ts @@ -0,0 +1,22 @@ +import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http'; +import { Injectable } from '@angular/core'; +import { Observable } from 'rxjs'; + +@Injectable() +export class AuthInterceptor implements HttpInterceptor { + private accessToken = ''; + + setAccessToken(token: string): void { + this.accessToken = token || ''; + } + + intercept(req: HttpRequest, next: HttpHandler): Observable> { + req = req.clone({ + setHeaders: { + Authorization: `Bearer ${this.accessToken}`, + }, + }); + + return next.handle(req); + } +} diff --git a/src/app/shared/layers/business-logic-layer/team.service.ts b/src/app/shared/layers/business-logic-layer/team.service.ts index 24473538..4eb01391 100644 --- a/src/app/shared/layers/business-logic-layer/team.service.ts +++ b/src/app/shared/layers/business-logic-layer/team.service.ts @@ -19,7 +19,7 @@ export class TeamService { // derived properties personsWithoutTeam: Person[]; - private load(data: [Person[], Team[]]) { + public load(data: [Person[], Team[]]) { [this.persons, this.teams] = data; this.updateDerivedProperties(); } diff --git a/src/app/shared/services/project-to-team.service.ts b/src/app/shared/services/project-to-team.service.ts new file mode 100644 index 00000000..79169148 --- /dev/null +++ b/src/app/shared/services/project-to-team.service.ts @@ -0,0 +1,24 @@ +import { Injectable } from '@angular/core'; +import { Team } from '../models/team'; +import { Project } from 'src/app/api/models'; +import { Person } from '../models/person'; + +@Injectable({ + providedIn: 'root', +}) +export class ProjectTeamTransformerService { + constructor() {} + + projectsToTeams(projects: Project[], persons: Person[]): Team[] { + const teams = projects.map(project => new Team(project.name)).sort((a, b) => a.name.localeCompare(b.name)); + persons.forEach(person => { + if (person.teamName) { + const team = teams.find(team => team.name === person.teamName); + if (team) { + team.persons.push(person); + } + } + }); + return teams; + } +} diff --git a/src/app/shared/services/prompt.service.ts b/src/app/shared/services/prompt.service.ts new file mode 100644 index 00000000..c9d0fe69 --- /dev/null +++ b/src/app/shared/services/prompt.service.ts @@ -0,0 +1,38 @@ +import { Injectable } from '@angular/core'; +import { ApiService } from '../../api/api.service'; +import { ApiFnRequired } from '../../api/api.service'; +import { v2CourseIterationCourseIterationIdProjectsGet as getProjects } from '../../api/fn/projects/v-2-course-iteration-course-iteration-id-projects-get'; +import { v2CourseIterationCourseIterationIdSkillsGet as getSkills } from '../../api/fn/skills/v-2-course-iteration-course-iteration-id-skills-get'; +import { v2CourseIterationCourseIterationIdStudentsGet as getStudents } from '../../api/fn/students/v-2-course-iteration-course-iteration-id-students-get'; +import { v2CourseIterationCourseIterationIdAllocationsGet as getAllocations } from '../../api/fn/allocations/v-2-course-iteration-course-iteration-id-allocations-get'; +import { lastValueFrom } from 'rxjs'; +import { Skill, Student, Project, Allocation } from 'src/app/api/models'; + +@Injectable({ + providedIn: 'root', +}) +export class PromptService { + constructor(private apiService: ApiService) {} + + private async fetchValue(fn: ApiFnRequired, courseIterationId: string): Promise { + const param: P = { courseIterationId: courseIterationId } as P; + const values$ = this.apiService.invoke(fn, param); + return lastValueFrom(values$); + } + + async getProjects(courseIterationId: string): Promise { + return this.fetchValue(getProjects, courseIterationId); + } + + async getSkills(courseIterationId: string): Promise { + return this.fetchValue(getSkills, courseIterationId); + } + + async getStudents(courseIterationId: string): Promise { + return this.fetchValue(getStudents, courseIterationId); + } + + async getAllocations(courseIterationId: string): Promise { + return this.fetchValue(getAllocations, courseIterationId); + } +} diff --git a/src/app/shared/services/student-to-person.service.ts b/src/app/shared/services/student-to-person.service.ts new file mode 100644 index 00000000..3990187d --- /dev/null +++ b/src/app/shared/services/student-to-person.service.ts @@ -0,0 +1,173 @@ +import { Injectable } from '@angular/core'; +import { Allocation, LanguageProficiency, Project, Student } from 'src/app/api/models'; +import { Person } from '../models/person'; +import { Gender as GenderPerson } from '../models/person'; +import { Gender as GenderStudent } from 'src/app/api/models'; +import { SkillProficiency } from 'src/app/api/models'; +import { SkillLevel } from '../models/skill'; +import { StudentSkill as SkillStudent } from 'src/app/api/models'; +import { Skill as SkillPerson } from '../models/skill'; +import { Device as DevicePerson } from '../models/device'; +import { Device as DeviceStudent } from 'src/app/api/models'; +import { Skill as SkillPrompt } from 'src/app/api/models'; +import { IconMapperService } from '../ui/icon-mapper.service'; + +@Injectable({ + providedIn: 'root', +}) +export class StudentPersonTransformerService { + private skillsPrompt: SkillPrompt[] = []; + private projectsPrompt: Project[] = []; + private allocationsPrompt: Allocation[] = []; + + constructor() {} + + public transformStudentsToPersons( + students: Student[], + skillsPrompt: SkillPrompt[], + projectsPrompt: Project[], + allocationsPrompt: Allocation[] + ): Person[] { + this.skillsPrompt = skillsPrompt; + this.projectsPrompt = projectsPrompt; + this.allocationsPrompt = allocationsPrompt; + return students.map(s => this.transformStudentToPerson(s)); + } + + private transformStudentToPerson(student: Student): Person { + const person = new Person(); + + person.firstName = student.firstName; + person.lastName = student.lastName; + person.email = student.email; + person.tumId = student.id; + person.nationality = student.nationality; + person.gender = this.getGender(student.gender); + person.gravatarUrl = IconMapperService.getGravatarIcon(student.email); + + //LanguageProficiency + person.germanLanguageLevel = this.getLanguageProficiency(student, 'de'); + person.englishLanguageLevel = this.getLanguageProficiency(student, 'en'); + + //Skills + person.skills = this.getSkills(student.skills); + person.supervisorRating = this.getSkillLevel(student.introCourseProficiency); + person.iosDev = this.getIOSDev(student.introSelfAssessment); + + //University + person.semester = student.semester; + person.major = student.studyDegree + ' ' + student.studyProgram; + + //Comments + person.tutorComments = student.tutorComments.map(c => c.text).join('\n'); + person.studentComments = student.studentComments.map(c => c.text).join('\n'); + + //Priorities + person.teamPriorities = student.projectPreferences.sort(p => p.priority).map(p => this.getProjectName(p.projectId)); + person.teamName = this.getTeamName(student.id); + + //Devices + person.devices = student.devices.map(this.getDevice).filter(d => d !== null); + + //Other + person.iOSDevExplained = 'iOSDevExplained'; + person.otherSkills = 'otherSkills'; + if (person.tumId === 'tum_id_1') { + console.log(person); + } + return person; + } + + private getTeamName(studentId: string): string { + return ( + this.allocationsPrompt + .filter(a => a.studentIds.includes(studentId)) + .map(a => this.getProjectName(a.projectId))[0] || '' + ); + } + + private getProjectName(projectId: string): string { + const project = this.projectsPrompt.find(p => p.id === projectId); + if (project) { + return project.name; + } else { + return projectId; + } + } + + private getDevice(device: DeviceStudent): DevicePerson { + switch (device) { + case DeviceStudent.IPad: + return DevicePerson.Ipad; + case DeviceStudent.IPhone: + return DevicePerson.Iphone; + case DeviceStudent.Mac: + return DevicePerson.Mac; + case DeviceStudent.Watch: + return DevicePerson.Watch; + default: + return null; + } + } + + private getSkills(studentSkills: SkillStudent[]): SkillPerson[] { + return studentSkills + .map(studentSkill => { + const skillPrompt = this.skillsPrompt.find(s => s.id === studentSkill.id); + + if (!skillPrompt) { + return null; + } + + if (skillPrompt.title === null) { + throw new Error('Skill title is null'); + } + return new SkillPerson(skillPrompt.title, this.getSkillLevel(studentSkill.proficiency), SkillLevel.None, ''); + }) + .filter(skill => skill !== null); + } + + private getIOSDev(skillProficiency: SkillProficiency): string { + switch (skillProficiency) { + case SkillProficiency.Novice: + return 'I have no experience in Apple platform development other than the intro course.'; + case SkillProficiency.Intermediate: + return 'I was involved in the development of a native Apple application, but I had another role than developer (e.g. tester).'; + case SkillProficiency.Advanced: + return 'I have been an active developer for a native Apple application.'; + case SkillProficiency.Expert: + return 'I have submitted my own native Apple application(s) to the AppStore.'; + } + } + + private getLanguageProficiency(student: Student, languageCode: string): LanguageProficiency { + const language = student.languages.filter(l => l.language === languageCode); + if (language.length) { + return language[0].proficiency; + } else { + return LanguageProficiency.A1A2; // default proficiency + } + } + + private getSkillLevel(skillProficiency: SkillProficiency): SkillLevel { + switch (skillProficiency) { + case SkillProficiency.Novice: + return SkillLevel.Low; + case SkillProficiency.Intermediate: + return SkillLevel.Medium; + case SkillProficiency.Advanced: + return SkillLevel.High; + case SkillProficiency.Expert: + return SkillLevel.VeryHigh; + } + } + + private getGender(gender: GenderStudent): GenderPerson { + switch (gender) { + case GenderStudent.Male: + return GenderPerson.Male; + default: + return GenderPerson.Female; + } + } +} diff --git a/src/scss/_utility.scss b/src/scss/_utility.scss index 4e05b156..b404ce18 100644 --- a/src/scss/_utility.scss +++ b/src/scss/_utility.scss @@ -54,3 +54,8 @@ color: $artemis-primary; } + +// TODO: Remove before merging #86, #75 +.red { + color: rgb(204, 0, 0) !important; +}