diff --git a/.github/workflows/build-and-push-docker-image-local.yml b/.github/workflows/build-and-push-docker-image-local.yml new file mode 100644 index 00000000..7d691c46 --- /dev/null +++ b/.github/workflows/build-and-push-docker-image-local.yml @@ -0,0 +1,95 @@ +name: Build and Push Docker Image + +on: + workflow_call: + inputs: + image-name: + type: string + default: ${{ github.repository }} + description: "The name for the docker image (Default: Repository name)" + docker-file: + type: string + default: Dockerfile + description: "The path to the Dockerfile (Default: ./Dockerfile)" + docker-context: + type: string + default: . + description: "The context for the Docker build (Default: .)" + build-args: + type: string + description: "List of additional build contexts (e.g., name=path)" + required: false + platforms: + type: string + description: "List of platforms for which to build the image" + default: linux/amd64,linux/arm64 + registry: + type: string + default: ghcr.io + description: "The registry to push the image to (Default: ghcr.io)" + + outputs: + image_tag: + description: "The tag of the image that was built" + value: ${{ jobs.build.outputs.image_tag }} + + secrets: + registry-user: + required: false + registry-password: + required: false + +jobs: + build: + name: Build Docker Image for ${{ inputs.image-name }} + runs-on: ubuntu-latest + permissions: + contents: read + packages: write + outputs: + image_tag: "${{ steps.output-image-tag.outputs.image_tag }}" + steps: + - name: Checkout + uses: actions/checkout@v4 + with: + fetch-depth: 1 + + - name: Set up QEMU + uses: docker/setup-qemu-action@v3 + with: + platforms: all + + - name: Install Docker Buildx + uses: docker/setup-buildx-action@v3 + + - name: Log in to the Container registry + uses: docker/login-action@v3 + with: + registry: ${{ inputs.registry }} + username: ${{ secrets.registry-user || github.actor }} + password: ${{ secrets.registry-password || secrets.GITHUB_TOKEN }} + + - name: Extract metadata (tags, labels) for Docker + id: meta + uses: docker/metadata-action@v5 + with: + images: ${{ inputs.registry }}/${{ inputs.image-name }} + tags: | + type=raw,value=latest,enable={{is_default_branch}} + type=ref,event=branch + type=ref,event=pr + + - name: Build and push Docker Image + uses: docker/build-push-action@v6 + with: + context: ${{ inputs.docker-context }} + file: ${{ inputs.docker-file }} + platforms: ${{ inputs.platforms }} + tags: ${{ steps.meta.outputs.tags }} + labels: ${{ steps.meta.outputs.labels }} + build-args: ${{ inputs.build-args }} + push: true + + - id: output-image-tag + run: | + echo "image_tag=${{ steps.meta.outputs.version }}" >> "$GITHUB_OUTPUT" diff --git a/.github/workflows/build-and-push.yml b/.github/workflows/build-and-push.yml index c5ec0155..2e62d915 100644 --- a/.github/workflows/build-and-push.yml +++ b/.github/workflows/build-and-push.yml @@ -14,7 +14,6 @@ on: jobs: build-and-push: strategy: - fail-fast: false matrix: include: - image-name: ls1intum/tease @@ -23,7 +22,8 @@ jobs: - image-name: ls1intum/tease-server docker-file: ./server/Dockerfile docker-context: ./server - uses: ls1intum/.github/.github/workflows/build-and-push-docker-image.yml@v1.1.1 + uses: ./.github/workflows/build-and-push-docker-image-local.yml + secrets: inherit with: image-name: ${{ matrix.image-name }} docker-file: ${{ matrix.docker-file }} diff --git a/client/angular.json b/client/angular.json index 2a07862f..dd328a7e 100644 --- a/client/angular.json +++ b/client/angular.json @@ -33,7 +33,7 @@ "base": "dist/tease" }, "index": "src/index.html", - "polyfills": ["zone.js", "./window-global-fix.ts"], + "polyfills": ["zone.js", "./window-global-fix.ts", "@angular/localize/init"], "tsConfig": "tsconfig.app.json", "inlineStyleLanguage": "scss", "assets": ["src/assets"], diff --git a/client/docs/mockoon.json b/client/docs/mockoon.json index fcebecc9..235d15ee 100644 --- a/client/docs/mockoon.json +++ b/client/docs/mockoon.json @@ -2,7 +2,7 @@ "uuid": "cacfd146-0b69-4ddc-99f7-2d4fdd270102", "lastMigration": 32, "name": "TEASE & PROMPT", - "endpointPrefix": "api/tease/", + "endpointPrefix": "team-allocation/api/tease", "latency": 0, "port": 3001, "hostname": "", @@ -13,11 +13,11 @@ "type": "http", "documentation": "Projects", "method": "get", - "endpoint": "course-iterations/:id/projects", + "endpoint": "course_phase/:id/projects", "responses": [ { "uuid": "3f5f8730-7157-4aec-a467-482786356c9d", - "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]", + "body": "[\n {\n \"id\": \"ecae563c-6631-46cf-8424-adf7bc07e3ab\",\n \"name\": \"Apple\"\n },\n {\n \"id\": \"da76ecac-ca53-4730-86d2-8bd9262e0dfe\",\n \"name\": \"Heun Ventures\"\n },\n {\n \"id\": \"2a95930e-0113-4c3e-abcf-7ff825a2ecf4\",\n \"name\": \"Porsche Digital\"\n },\n {\n \"id\": \"e21f9bd6-7c65-43e0-a803-1628a1cac83a\",\n \"name\": \"Siemens\"\n }\n]", "latency": 0, "statusCode": 200, "label": "Successfully retrieved course iteration projects", @@ -51,11 +51,11 @@ "type": "http", "documentation": "Students", "method": "get", - "endpoint": "course-iterations/:id/students", + "endpoint": "course_phase/:id/students", "responses": [ { "uuid": "47a527c9-1c75-4759-a4f1-9b4f0021bba4", - "body": "[\n {\n \"id\": \"tum_id_1\",\n \"firstName\": \"{{ faker 'person.firstName' }}\",\n \"lastName\": \"{{ faker 'person.firstName' }}\",\n \"email\": \"mail@tum.de\",\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\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\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\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\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\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\": \"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 \"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\": 0,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\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\": \"ios23quar\"\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\": \"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\": 0,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\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\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\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\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\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\": \"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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\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\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\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\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\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\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\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\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\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\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\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\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\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\": \"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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\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\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\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\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\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\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\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\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\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\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23med\"\n },\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\": \"ios23allz\"\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\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23mckin\"\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 \"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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23allz\"\n },\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\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\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 \"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\": 0,\n \"projectId\": \"ios23allz\"\n },\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\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\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 \"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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\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\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\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\": \"ios23bsh\"\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\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\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\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\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\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\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\": \"ios23allz\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\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\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23mckin\"\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\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\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\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\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\": \"ios23bmw\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\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\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\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 \"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\": 0,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\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\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\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\": \"ios23lmu\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\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\": \"ios23tsys\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\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\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23imt\"\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 \"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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\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\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\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\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\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\": \"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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\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 \"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\": 0,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\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 \"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\": 0,\n \"projectId\": \"ios23zffh\"\n },\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\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\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\": \"ios23lmu\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23bmw\"\n },\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\": \"ios23quar\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23allz\"\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 \"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\": 0,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\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\": \"ios23med\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23ihaus\"\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\": \"ios23bsh\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 1,\n \"projectId\": \"ios23imt\"\n },\n {\n \"priority\": 2,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 3,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 4,\n \"projectId\": \"ios23med\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23quar\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23ihaus\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23mckin\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23bsh\"\n },\n {\n \"priority\": 10,\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\": 0,\n \"projectId\": \"ios23mckin\"\n },\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\": \"ios23imt\"\n },\n {\n \"priority\": 5,\n \"projectId\": \"ios23lmu\"\n },\n {\n \"priority\": 6,\n \"projectId\": \"ios23zffh\"\n },\n {\n \"priority\": 7,\n \"projectId\": \"ios23tsys\"\n },\n {\n \"priority\": 8,\n \"projectId\": \"ios23bmw\"\n },\n {\n \"priority\": 9,\n \"projectId\": \"ios23allz\"\n },\n {\n \"priority\": 10,\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]", + "body": "[\n {\n \"id\": \"c0ce4044-2084-4acf-820a-8b1f8dc9133f\",\n \"firstName\": \"Stefan\",\n \"lastName\": \"Heun\",\n \"gender\": \"Male\",\n \"nationality\": \"DE\",\n \"email\": \"niclas.heun@tum.de\",\n \"studyDegree\": \"master\",\n \"studyProgram\": \"Computer Science\",\n \"semester\": 12,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"\",\n \"introCourseProficiency\": \"Expert\",\n \"skills\": [\n {\n \"id\": \"46ec65f7-cf5a-4073-b7ff-b6f8caeea692\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"346a0672-4c0f-45fe-b932-6371a3b91157\",\n \"proficiency\": \"Novice\"\n },\n {\n \"id\": \"5129d489-0813-4854-ad24-edd6af25e2cb\",\n \"proficiency\": \"Intermediate\"\n }\n ],\n \"devices\": [],\n \"studentComments\": [],\n \"tutorComments\": [],\n \"projectPreferences\": [\n {\n \"projectId\": \"ecae563c-6631-46cf-8424-adf7bc07e3ab\",\n \"priority\": 3\n },\n {\n \"projectId\": \"da76ecac-ca53-4730-86d2-8bd9262e0dfe\",\n \"priority\": 1\n },\n {\n \"projectId\": \"2a95930e-0113-4c3e-abcf-7ff825a2ecf4\",\n \"priority\": 2\n },\n {\n \"projectId\": \"e21f9bd6-7c65-43e0-a803-1628a1cac83a\",\n \"priority\": 4\n }\n ]\n },\n {\n \"id\": \"b06aee2f-bd87-4704-a629-19346a87d8c8\",\n \"firstName\": \"Alice\",\n \"lastName\": \"McTest\",\n \"gender\": \"Female\",\n \"nationality\": \"AO\",\n \"email\": \"prompt-dev+pr00mta@ase.cit.tum.de\",\n \"studyDegree\": \"bachelor\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 20,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"\",\n \"introCourseProficiency\": \"Advanced\",\n \"skills\": [\n {\n \"id\": \"46ec65f7-cf5a-4073-b7ff-b6f8caeea692\",\n \"proficiency\": \"Advanced\"\n },\n {\n \"id\": \"346a0672-4c0f-45fe-b932-6371a3b91157\",\n \"proficiency\": \"Expert\"\n },\n {\n \"id\": \"5129d489-0813-4854-ad24-edd6af25e2cb\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"devices\": [],\n \"studentComments\": [],\n \"tutorComments\": [],\n \"projectPreferences\": [\n {\n \"projectId\": \"ecae563c-6631-46cf-8424-adf7bc07e3ab\",\n \"priority\": 2\n },\n {\n \"projectId\": \"da76ecac-ca53-4730-86d2-8bd9262e0dfe\",\n \"priority\": 3\n },\n {\n \"projectId\": \"2a95930e-0113-4c3e-abcf-7ff825a2ecf4\",\n \"priority\": 1\n },\n {\n \"projectId\": \"e21f9bd6-7c65-43e0-a803-1628a1cac83a\",\n \"priority\": 4\n }\n ]\n },\n {\n \"id\": \"5b69e36b-a5d7-41d2-ba28-2d283a6c47be\",\n \"firstName\": \"Bob\",\n \"lastName\": \"McTest\",\n \"gender\": \"Female\",\n \"nationality\": \"AS\",\n \"email\": \"prompt-dev+pr00mtb@ase.cit.tum.de\",\n \"studyDegree\": \"master\",\n \"studyProgram\": \"Information Systems\",\n \"semester\": 12,\n \"languages\": [\n {\n \"language\": \"de\",\n \"proficiency\": \"Native\"\n },\n {\n \"language\": \"en\",\n \"proficiency\": \"Native\"\n }\n ],\n \"introSelfAssessment\": \"\",\n \"introCourseProficiency\": \"Novice\",\n \"skills\": [\n {\n \"id\": \"46ec65f7-cf5a-4073-b7ff-b6f8caeea692\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"346a0672-4c0f-45fe-b932-6371a3b91157\",\n \"proficiency\": \"Intermediate\"\n },\n {\n \"id\": \"5129d489-0813-4854-ad24-edd6af25e2cb\",\n \"proficiency\": \"Novice\"\n }\n ],\n \"devices\": [\"IPhone\"],\n \"studentComments\": [],\n \"tutorComments\": [],\n \"projectPreferences\": [\n {\n \"projectId\": \"ecae563c-6631-46cf-8424-adf7bc07e3ab\",\n \"priority\": 3\n },\n {\n \"projectId\": \"da76ecac-ca53-4730-86d2-8bd9262e0dfe\",\n \"priority\": 4\n },\n {\n \"projectId\": \"2a95930e-0113-4c3e-abcf-7ff825a2ecf4\",\n \"priority\": 1\n },\n {\n \"projectId\": \"e21f9bd6-7c65-43e0-a803-1628a1cac83a\",\n \"priority\": 2\n }\n ]\n }\n]", "latency": 0, "statusCode": 200, "label": "Successfully retrieved course iteration students", @@ -89,7 +89,7 @@ "type": "http", "documentation": "Allocation", "method": "post", - "endpoint": "course-iterations/:id/allocations", + "endpoint": "course_phase/:id/allocations", "responses": [ { "uuid": "1fa9561d-b80e-4842-b152-11286842559a", @@ -123,11 +123,11 @@ "type": "http", "documentation": "Allocation", "method": "get", - "endpoint": "course-iterations/:id/allocations", + "endpoint": "course_phase/:id/allocations", "responses": [ { "uuid": "b6ab7575-a255-4f0a-a83a-cdf1cc012a5f", - "body": "[\n {\n \"projectId\": \"ios23quar\",\n \"students\": [\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\": \"ios23bsh\",\n \"students\": [\n \"tum_id_23\"\n ]\n },\n {\n \"projectId\": \"ios23ihaus\",\n \"students\": [\n \"tum_id_22\"\n ]\n },\n {\n \"projectId\": \"ios23med\",\n \"students\": [\n \"tum_id_21\"\n ]\n },\n {\n \"projectId\": \"ios23bmw\",\n \"students\": [\n \"tum_id_1\",\n \"tum_id_20\"\n ]\n },\n {\n \"projectId\": \"ios23zffh\",\n \"students\": [\n \"tum_id_19\"\n ]\n },\n {\n \"projectId\": \"ios23mckin\",\n \"students\": [\n \"tum_id_18\"\n ]\n },\n {\n \"projectId\": \"ios23lmu\",\n \"students\": [\n \"tum_id_17\"\n ]\n },\n {\n \"projectId\": \"ios23imt\",\n \"students\": [\n \"tum_id_16\"\n ]\n },\n {\n \"projectId\": \"ios23tsys\",\n \"students\": [\n \"tum_id_15\"\n ]\n }\n]", + "body": "[]\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", @@ -161,11 +161,11 @@ "type": "http", "documentation": "Skills", "method": "get", - "endpoint": "course-iterations/:id/skills", + "endpoint": "course_phase/:id/skills", "responses": [ { "uuid": "cc20bef6-f2f4-40af-bbdc-a7ddfd671095", - "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]", + "body": "[\n {\n \"title\": \"Backend (#dasVerboteneWort)\",\n \"id\": \"346a0672-4c0f-45fe-b932-6371a3b91157\",\n \"description\": \"\"\n },\n {\n \"title\": \"Deutsche Kartoffel\",\n \"id\": \"46ec65f7-cf5a-4073-b7ff-b6f8caeea692\",\n \"description\": \"\"\n },\n {\n \"title\": \"WhatsApp\",\n \"id\": \"5129d489-0813-4854-ad24-edd6af25e2cb\",\n \"description\": \"\"\n }\n]", "latency": 0, "statusCode": 200, "label": "OK", @@ -193,6 +193,44 @@ } ], "responseMode": null + }, + { + "uuid": "b7064c96-e0cf-468e-add1-f41af8dde2b1", + "type": "http", + "documentation": "Course Iteration", + "method": "get", + "endpoint": "course-phases", + "responses": [ + { + "uuid": "74b5817d-90ee-410a-9e9b-f0325b1ba062", + "body": "[\n {\n \"id\": \"0b3205f8-ae16-4337-be8a-24f509d2c355\",\n \"semesterName\": \"ss35-Test-New Team Allocation\",\n \"kickoffSubmissionPeriodEnd\": \"2025-04-17T15:50:00\"\n },\n {\n \"id\": \"fc70aa56-13e4-467f-8efd-c4d93b6f40c1\",\n \"semesterName\": \"test-Keycloak25-New Team Allocation\",\n \"kickoffSubmissionPeriodEnd\": \"2025-04-24T16:10:00\"\n },\n {\n \"id\": \"73bf93e5-794e-4161-82be-b5dc76fcbab7\",\n \"semesterName\": \"ws24-Module Federation Workshop-New Team Allocation\",\n \"kickoffSubmissionPeriodEnd\": \"2025-04-17T08:48:00\"\n }\n]", + "latency": 0, + "statusCode": 200, + "label": "", + "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": [ @@ -215,6 +253,10 @@ { "type": "route", "uuid": "52e05d34-dc41-4d76-b243-284228c018c7" + }, + { + "type": "route", + "uuid": "b7064c96-e0cf-468e-add1-f41af8dde2b1" } ], "proxyMode": false, diff --git a/client/docs/openapi_spec.yaml b/client/docs/openapi_spec.yaml index cc4cd3e1..ad1d6004 100644 --- a/client/docs/openapi_spec.yaml +++ b/client/docs/openapi_spec.yaml @@ -7,9 +7,9 @@ info: --- Using this API you can retrieve information on students and their associated attributes. servers: - - url: https://prompt.ase.cit.tum.de/api + - url: https://prompt.aet.cit.tum.de/team-allocation/api paths: - /tease/course-iterations/{courseIterationId}/projects: + /tease/course_phase/{courseIterationId}/projects: get: tags: - Projects @@ -31,7 +31,7 @@ paths: type: array items: $ref: '#/components/schemas/Project' - /tease/course-iterations/{courseIterationId}/students: + /tease/course_phase/{courseIterationId}/students: get: tags: - Students @@ -53,7 +53,7 @@ paths: type: array items: $ref: '#/components/schemas/Student' - /tease/course-iterations/{courseIterationId}/allocations: + /tease/course_phase/{courseIterationId}/allocations: post: tags: - Allocations @@ -97,7 +97,7 @@ paths: type: array items: $ref: '#/components/schemas/Allocation' - /tease/course-iterations/{courseIterationId}/skills: + /tease/course_phase/{courseIterationId}/skills: get: tags: - Skills @@ -119,7 +119,7 @@ paths: type: array items: $ref: '#/components/schemas/Skill' - /course-iterations: + /tease/course-phases: get: tags: - Course Iterations diff --git a/client/package.json b/client/package.json index ed33d4b6..768b8f60 100644 --- a/client/package.json +++ b/client/package.json @@ -5,9 +5,9 @@ "private": true, "license": "MIT", "author": { - "name": "ASE TUM", + "name": "AET TUM", "email": "krusche@tum.de", - "url": "https://ase.cit.tum.de" + "url": "https://aet.cit.tum.de" }, "scripts": { "ng": "ng", @@ -61,7 +61,8 @@ "papaparse": "5.4.1", "rxjs": "7.8.1", "tslib": "2.6.3", - "uuid": "^10.0.0" + "uuid": "^10.0.0", + "zone.js": "^0.14.10" }, "overrides": { "semver": "7.5.4", diff --git a/client/src/app/api/api-configuration.ts b/client/src/app/api/api-configuration.ts index 422d7c4c..3486134c 100644 --- a/client/src/app/api/api-configuration.ts +++ b/client/src/app/api/api-configuration.ts @@ -9,7 +9,7 @@ import { Injectable } from '@angular/core'; providedIn: 'root', }) export class ApiConfiguration { - rootUrl: string = `${window.location.origin}/api`; + rootUrl: string = `${window.location.origin}/team-allocation/api`; } /** diff --git a/client/src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-get.ts b/client/src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-get.ts similarity index 60% rename from client/src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-get.ts rename to client/src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-get.ts index 40bf39b7..7ab2eae5 100644 --- a/client/src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-get.ts +++ b/client/src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-get.ts @@ -8,7 +8,7 @@ import { RequestBuilder } from '../../request-builder'; import { Allocation } from '../../models/allocation'; -export interface TeaseCourseIterationsCourseIterationIdAllocationsGet$Params { +export interface TeaseCoursePhaseCourseIterationIdAllocationsGet$Params { /** * Unique identifier of the course iteration @@ -16,8 +16,8 @@ export interface TeaseCourseIterationsCourseIterationIdAllocationsGet$Params { courseIterationId: string; } -export function teaseCourseIterationsCourseIterationIdAllocationsGet(http: HttpClient, rootUrl: string, params: TeaseCourseIterationsCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable>> { - const rb = new RequestBuilder(rootUrl, teaseCourseIterationsCourseIterationIdAllocationsGet.PATH, 'get'); +export function teaseCoursePhaseCourseIterationIdAllocationsGet(http: HttpClient, rootUrl: string, params: TeaseCoursePhaseCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, teaseCoursePhaseCourseIterationIdAllocationsGet.PATH, 'get'); if (params) { rb.path('courseIterationId', params.courseIterationId, {}); } @@ -32,4 +32,4 @@ export function teaseCourseIterationsCourseIterationIdAllocationsGet(http: HttpC ); } -teaseCourseIterationsCourseIterationIdAllocationsGet.PATH = '/tease/course-iterations/{courseIterationId}/allocations'; +teaseCoursePhaseCourseIterationIdAllocationsGet.PATH = '/tease/course_phase/{courseIterationId}/allocations'; diff --git a/client/src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-post.ts b/client/src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-post.ts similarity index 63% rename from client/src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-post.ts rename to client/src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-post.ts index 511dbb25..3a6e4eed 100644 --- a/client/src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-post.ts +++ b/client/src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-post.ts @@ -8,7 +8,7 @@ import { RequestBuilder } from '../../request-builder'; import { Allocation } from '../../models/allocation'; -export interface TeaseCourseIterationsCourseIterationIdAllocationsPost$Params { +export interface TeaseCoursePhaseCourseIterationIdAllocationsPost$Params { /** * Unique identifier of the course iteration @@ -17,8 +17,8 @@ export interface TeaseCourseIterationsCourseIterationIdAllocationsPost$Params { body?: Array } -export function teaseCourseIterationsCourseIterationIdAllocationsPost(http: HttpClient, rootUrl: string, params: TeaseCourseIterationsCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable> { - const rb = new RequestBuilder(rootUrl, teaseCourseIterationsCourseIterationIdAllocationsPost.PATH, 'post'); +export function teaseCoursePhaseCourseIterationIdAllocationsPost(http: HttpClient, rootUrl: string, params: TeaseCoursePhaseCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable> { + const rb = new RequestBuilder(rootUrl, teaseCoursePhaseCourseIterationIdAllocationsPost.PATH, 'post'); if (params) { rb.path('courseIterationId', params.courseIterationId, {}); rb.body(params.body, 'application/json'); @@ -34,4 +34,4 @@ export function teaseCourseIterationsCourseIterationIdAllocationsPost(http: Http ); } -teaseCourseIterationsCourseIterationIdAllocationsPost.PATH = '/tease/course-iterations/{courseIterationId}/allocations'; +teaseCoursePhaseCourseIterationIdAllocationsPost.PATH = '/tease/course_phase/{courseIterationId}/allocations'; diff --git a/client/src/app/api/fn/course-iterations/course-iterations-get.ts b/client/src/app/api/fn/course-iterations/tease-course-phases-get.ts similarity index 51% rename from client/src/app/api/fn/course-iterations/course-iterations-get.ts rename to client/src/app/api/fn/course-iterations/tease-course-phases-get.ts index 7d32648c..1318b045 100644 --- a/client/src/app/api/fn/course-iterations/course-iterations-get.ts +++ b/client/src/app/api/fn/course-iterations/tease-course-phases-get.ts @@ -8,17 +8,20 @@ import { RequestBuilder } from '../../request-builder'; import { CourseIteration } from '../../models/course-iteration'; -export interface CourseIterationsGet$Params { -} +export interface TeaseCoursePhasesGet$Params {} -export function courseIterationsGet(http: HttpClient, rootUrl: string, params?: CourseIterationsGet$Params, context?: HttpContext): Observable>> { - const rb = new RequestBuilder(rootUrl, courseIterationsGet.PATH, 'get'); +export function teaseCoursePhasesGet( + http: HttpClient, + rootUrl: string, + params?: TeaseCoursePhasesGet$Params, + context?: HttpContext +): Observable>> { + const rb = new RequestBuilder(rootUrl, teaseCoursePhasesGet.PATH, 'get'); + console.log('teaseCoursePhasesGet', teaseCoursePhasesGet.PATH, rootUrl); if (params) { } - return http.request( - rb.build({ responseType: 'json', accept: 'application/json', context }) - ).pipe( + 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>; @@ -26,4 +29,4 @@ export function courseIterationsGet(http: HttpClient, rootUrl: string, params?: ); } -courseIterationsGet.PATH = '/course-iterations'; +teaseCoursePhasesGet.PATH = '/tease/course-phases'; diff --git a/client/src/app/api/fn/projects/tease-course-iterations-course-iteration-id-projects-get.ts b/client/src/app/api/fn/projects/tease-course-phase-course-iteration-id-projects-get.ts similarity index 60% rename from client/src/app/api/fn/projects/tease-course-iterations-course-iteration-id-projects-get.ts rename to client/src/app/api/fn/projects/tease-course-phase-course-iteration-id-projects-get.ts index 1c2de841..c798da28 100644 --- a/client/src/app/api/fn/projects/tease-course-iterations-course-iteration-id-projects-get.ts +++ b/client/src/app/api/fn/projects/tease-course-phase-course-iteration-id-projects-get.ts @@ -8,7 +8,7 @@ import { RequestBuilder } from '../../request-builder'; import { Project } from '../../models/project'; -export interface TeaseCourseIterationsCourseIterationIdProjectsGet$Params { +export interface TeaseCoursePhaseCourseIterationIdProjectsGet$Params { /** * Unique identifier of the course iteration @@ -16,8 +16,8 @@ export interface TeaseCourseIterationsCourseIterationIdProjectsGet$Params { courseIterationId: string; } -export function teaseCourseIterationsCourseIterationIdProjectsGet(http: HttpClient, rootUrl: string, params: TeaseCourseIterationsCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable>> { - const rb = new RequestBuilder(rootUrl, teaseCourseIterationsCourseIterationIdProjectsGet.PATH, 'get'); +export function teaseCoursePhaseCourseIterationIdProjectsGet(http: HttpClient, rootUrl: string, params: TeaseCoursePhaseCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, teaseCoursePhaseCourseIterationIdProjectsGet.PATH, 'get'); if (params) { rb.path('courseIterationId', params.courseIterationId, {}); } @@ -32,4 +32,4 @@ export function teaseCourseIterationsCourseIterationIdProjectsGet(http: HttpClie ); } -teaseCourseIterationsCourseIterationIdProjectsGet.PATH = '/tease/course-iterations/{courseIterationId}/projects'; +teaseCoursePhaseCourseIterationIdProjectsGet.PATH = '/tease/course_phase/{courseIterationId}/projects'; diff --git a/client/src/app/api/fn/skills/tease-course-iterations-course-iteration-id-skills-get.ts b/client/src/app/api/fn/skills/tease-course-phase-course-iteration-id-skills-get.ts similarity index 61% rename from client/src/app/api/fn/skills/tease-course-iterations-course-iteration-id-skills-get.ts rename to client/src/app/api/fn/skills/tease-course-phase-course-iteration-id-skills-get.ts index 3648a134..46f71b22 100644 --- a/client/src/app/api/fn/skills/tease-course-iterations-course-iteration-id-skills-get.ts +++ b/client/src/app/api/fn/skills/tease-course-phase-course-iteration-id-skills-get.ts @@ -8,7 +8,7 @@ import { RequestBuilder } from '../../request-builder'; import { Skill } from '../../models/skill'; -export interface TeaseCourseIterationsCourseIterationIdSkillsGet$Params { +export interface TeaseCoursePhaseCourseIterationIdSkillsGet$Params { /** * Unique identifier of the course iteration @@ -16,8 +16,8 @@ export interface TeaseCourseIterationsCourseIterationIdSkillsGet$Params { courseIterationId: string; } -export function teaseCourseIterationsCourseIterationIdSkillsGet(http: HttpClient, rootUrl: string, params: TeaseCourseIterationsCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable>> { - const rb = new RequestBuilder(rootUrl, teaseCourseIterationsCourseIterationIdSkillsGet.PATH, 'get'); +export function teaseCoursePhaseCourseIterationIdSkillsGet(http: HttpClient, rootUrl: string, params: TeaseCoursePhaseCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, teaseCoursePhaseCourseIterationIdSkillsGet.PATH, 'get'); if (params) { rb.path('courseIterationId', params.courseIterationId, {}); } @@ -32,4 +32,4 @@ export function teaseCourseIterationsCourseIterationIdSkillsGet(http: HttpClient ); } -teaseCourseIterationsCourseIterationIdSkillsGet.PATH = '/tease/course-iterations/{courseIterationId}/skills'; +teaseCoursePhaseCourseIterationIdSkillsGet.PATH = '/tease/course_phase/{courseIterationId}/skills'; diff --git a/client/src/app/api/fn/students/tease-course-iterations-course-iteration-id-students-get.ts b/client/src/app/api/fn/students/tease-course-phase-course-iteration-id-students-get.ts similarity index 60% rename from client/src/app/api/fn/students/tease-course-iterations-course-iteration-id-students-get.ts rename to client/src/app/api/fn/students/tease-course-phase-course-iteration-id-students-get.ts index b07a56a3..e4ef9833 100644 --- a/client/src/app/api/fn/students/tease-course-iterations-course-iteration-id-students-get.ts +++ b/client/src/app/api/fn/students/tease-course-phase-course-iteration-id-students-get.ts @@ -8,7 +8,7 @@ import { RequestBuilder } from '../../request-builder'; import { Student } from '../../models/student'; -export interface TeaseCourseIterationsCourseIterationIdStudentsGet$Params { +export interface TeaseCoursePhaseCourseIterationIdStudentsGet$Params { /** * Unique identifier of the course iteration @@ -16,8 +16,8 @@ export interface TeaseCourseIterationsCourseIterationIdStudentsGet$Params { courseIterationId: string; } -export function teaseCourseIterationsCourseIterationIdStudentsGet(http: HttpClient, rootUrl: string, params: TeaseCourseIterationsCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable>> { - const rb = new RequestBuilder(rootUrl, teaseCourseIterationsCourseIterationIdStudentsGet.PATH, 'get'); +export function teaseCoursePhaseCourseIterationIdStudentsGet(http: HttpClient, rootUrl: string, params: TeaseCoursePhaseCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable>> { + const rb = new RequestBuilder(rootUrl, teaseCoursePhaseCourseIterationIdStudentsGet.PATH, 'get'); if (params) { rb.path('courseIterationId', params.courseIterationId, {}); } @@ -32,4 +32,4 @@ export function teaseCourseIterationsCourseIterationIdStudentsGet(http: HttpClie ); } -teaseCourseIterationsCourseIterationIdStudentsGet.PATH = '/tease/course-iterations/{courseIterationId}/students'; +teaseCoursePhaseCourseIterationIdStudentsGet.PATH = '/tease/course_phase/{courseIterationId}/students'; diff --git a/client/src/app/api/services/allocations.service.ts b/client/src/app/api/services/allocations.service.ts index d2a9bbaf..30ae9354 100644 --- a/client/src/app/api/services/allocations.service.ts +++ b/client/src/app/api/services/allocations.service.ts @@ -10,10 +10,10 @@ import { ApiConfiguration } from '../api-configuration'; import { StrictHttpResponse } from '../strict-http-response'; import { Allocation } from '../models/allocation'; -import { teaseCourseIterationsCourseIterationIdAllocationsGet } from '../fn/allocations/tease-course-iterations-course-iteration-id-allocations-get'; -import { TeaseCourseIterationsCourseIterationIdAllocationsGet$Params } from '../fn/allocations/tease-course-iterations-course-iteration-id-allocations-get'; -import { teaseCourseIterationsCourseIterationIdAllocationsPost } from '../fn/allocations/tease-course-iterations-course-iteration-id-allocations-post'; -import { TeaseCourseIterationsCourseIterationIdAllocationsPost$Params } from '../fn/allocations/tease-course-iterations-course-iteration-id-allocations-post'; +import { teaseCoursePhaseCourseIterationIdAllocationsGet } from '../fn/allocations/tease-course-phase-course-iteration-id-allocations-get'; +import { TeaseCoursePhaseCourseIterationIdAllocationsGet$Params } from '../fn/allocations/tease-course-phase-course-iteration-id-allocations-get'; +import { teaseCoursePhaseCourseIterationIdAllocationsPost } from '../fn/allocations/tease-course-phase-course-iteration-id-allocations-post'; +import { TeaseCoursePhaseCourseIterationIdAllocationsPost$Params } from '../fn/allocations/tease-course-phase-course-iteration-id-allocations-post'; @Injectable({ providedIn: 'root' }) export class AllocationsService extends BaseService { @@ -21,8 +21,8 @@ export class AllocationsService extends BaseService { super(config, http); } - /** Path part for operation `teaseCourseIterationsCourseIterationIdAllocationsGet()` */ - static readonly TeaseCourseIterationsCourseIterationIdAllocationsGetPath = '/tease/course-iterations/{courseIterationId}/allocations'; + /** Path part for operation `teaseCoursePhaseCourseIterationIdAllocationsGet()` */ + static readonly TeaseCoursePhaseCourseIterationIdAllocationsGetPath = '/tease/course_phase/{courseIterationId}/allocations'; /** * Retrieve the final result of the matching/allocation. @@ -30,12 +30,12 @@ export class AllocationsService extends BaseService { * 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 `teaseCourseIterationsCourseIterationIdAllocationsGet()` instead. + * To access only the response body, use `teaseCoursePhaseCourseIterationIdAllocationsGet()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdAllocationsGet$Response(params: TeaseCourseIterationsCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable>> { - return teaseCourseIterationsCourseIterationIdAllocationsGet(this.http, this.rootUrl, params, context); + teaseCoursePhaseCourseIterationIdAllocationsGet$Response(params: TeaseCoursePhaseCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable>> { + return teaseCoursePhaseCourseIterationIdAllocationsGet(this.http, this.rootUrl, params, context); } /** @@ -44,18 +44,18 @@ export class AllocationsService extends BaseService { * 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), `teaseCourseIterationsCourseIterationIdAllocationsGet$Response()` instead. + * To access the full response (for headers, for example), `teaseCoursePhaseCourseIterationIdAllocationsGet$Response()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdAllocationsGet(params: TeaseCourseIterationsCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable> { - return this.teaseCourseIterationsCourseIterationIdAllocationsGet$Response(params, context).pipe( + teaseCoursePhaseCourseIterationIdAllocationsGet(params: TeaseCoursePhaseCourseIterationIdAllocationsGet$Params, context?: HttpContext): Observable> { + return this.teaseCoursePhaseCourseIterationIdAllocationsGet$Response(params, context).pipe( map((r: StrictHttpResponse>): Array => r.body) ); } - /** Path part for operation `teaseCourseIterationsCourseIterationIdAllocationsPost()` */ - static readonly TeaseCourseIterationsCourseIterationIdAllocationsPostPath = '/tease/course-iterations/{courseIterationId}/allocations'; + /** Path part for operation `teaseCoursePhaseCourseIterationIdAllocationsPost()` */ + static readonly TeaseCoursePhaseCourseIterationIdAllocationsPostPath = '/tease/course_phase/{courseIterationId}/allocations'; /** * Submit the final result of the matching/allocation. @@ -63,12 +63,12 @@ export class AllocationsService extends BaseService { * 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 `teaseCourseIterationsCourseIterationIdAllocationsPost()` instead. + * To access only the response body, use `teaseCoursePhaseCourseIterationIdAllocationsPost()` instead. * * This method sends `application/json` and handles request body of type `application/json`. */ - teaseCourseIterationsCourseIterationIdAllocationsPost$Response(params: TeaseCourseIterationsCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable> { - return teaseCourseIterationsCourseIterationIdAllocationsPost(this.http, this.rootUrl, params, context); + teaseCoursePhaseCourseIterationIdAllocationsPost$Response(params: TeaseCoursePhaseCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable> { + return teaseCoursePhaseCourseIterationIdAllocationsPost(this.http, this.rootUrl, params, context); } /** @@ -77,12 +77,12 @@ export class AllocationsService extends BaseService { * 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), `teaseCourseIterationsCourseIterationIdAllocationsPost$Response()` instead. + * To access the full response (for headers, for example), `teaseCoursePhaseCourseIterationIdAllocationsPost$Response()` instead. * * This method sends `application/json` and handles request body of type `application/json`. */ - teaseCourseIterationsCourseIterationIdAllocationsPost(params: TeaseCourseIterationsCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable { - return this.teaseCourseIterationsCourseIterationIdAllocationsPost$Response(params, context).pipe( + teaseCoursePhaseCourseIterationIdAllocationsPost(params: TeaseCoursePhaseCourseIterationIdAllocationsPost$Params, context?: HttpContext): Observable { + return this.teaseCoursePhaseCourseIterationIdAllocationsPost$Response(params, context).pipe( map((r: StrictHttpResponse): void => r.body) ); } diff --git a/client/src/app/api/services/course-iterations.service.ts b/client/src/app/api/services/course-iterations.service.ts index 8edbf208..a2dc5b59 100644 --- a/client/src/app/api/services/course-iterations.service.ts +++ b/client/src/app/api/services/course-iterations.service.ts @@ -10,8 +10,8 @@ import { ApiConfiguration } from '../api-configuration'; import { StrictHttpResponse } from '../strict-http-response'; import { CourseIteration } from '../models/course-iteration'; -import { courseIterationsGet } from '../fn/course-iterations/course-iterations-get'; -import { CourseIterationsGet$Params } from '../fn/course-iterations/course-iterations-get'; +import { teaseCoursePhasesGet } from '../fn/course-iterations/tease-course-phases-get'; +import { TeaseCoursePhasesGet$Params } from '../fn/course-iterations/tease-course-phases-get'; @Injectable({ providedIn: 'root' }) export class CourseIterationsService extends BaseService { @@ -19,8 +19,8 @@ export class CourseIterationsService extends BaseService { super(config, http); } - /** Path part for operation `courseIterationsGet()` */ - static readonly CourseIterationsGetPath = '/course-iterations'; + /** Path part for operation `teaseCoursePhasesGet()` */ + static readonly TeaseCoursePhasesGetPath = '/tease/course-phases'; /** * Retrieve all course iterations. @@ -28,12 +28,12 @@ export class CourseIterationsService extends BaseService { * * * This method provides access to the full `HttpResponse`, allowing access to response headers. - * To access only the response body, use `courseIterationsGet()` instead. + * To access only the response body, use `teaseCoursePhasesGet()` instead. * * This method doesn't expect any request body. */ - courseIterationsGet$Response(params?: CourseIterationsGet$Params, context?: HttpContext): Observable>> { - return courseIterationsGet(this.http, this.rootUrl, params, context); + teaseCoursePhasesGet$Response(params?: TeaseCoursePhasesGet$Params, context?: HttpContext): Observable>> { + return teaseCoursePhasesGet(this.http, this.rootUrl, params, context); } /** @@ -42,12 +42,12 @@ export class CourseIterationsService extends BaseService { * * * This method provides access only to the response body. - * To access the full response (for headers, for example), `courseIterationsGet$Response()` instead. + * To access the full response (for headers, for example), `teaseCoursePhasesGet$Response()` instead. * * This method doesn't expect any request body. */ - courseIterationsGet(params?: CourseIterationsGet$Params, context?: HttpContext): Observable> { - return this.courseIterationsGet$Response(params, context).pipe( + teaseCoursePhasesGet(params?: TeaseCoursePhasesGet$Params, context?: HttpContext): Observable> { + return this.teaseCoursePhasesGet$Response(params, context).pipe( map((r: StrictHttpResponse>): Array => r.body) ); } diff --git a/client/src/app/api/services/projects.service.ts b/client/src/app/api/services/projects.service.ts index 40a89ca3..231cf003 100644 --- a/client/src/app/api/services/projects.service.ts +++ b/client/src/app/api/services/projects.service.ts @@ -10,8 +10,8 @@ import { ApiConfiguration } from '../api-configuration'; import { StrictHttpResponse } from '../strict-http-response'; import { Project } from '../models/project'; -import { teaseCourseIterationsCourseIterationIdProjectsGet } from '../fn/projects/tease-course-iterations-course-iteration-id-projects-get'; -import { TeaseCourseIterationsCourseIterationIdProjectsGet$Params } from '../fn/projects/tease-course-iterations-course-iteration-id-projects-get'; +import { teaseCoursePhaseCourseIterationIdProjectsGet } from '../fn/projects/tease-course-phase-course-iteration-id-projects-get'; +import { TeaseCoursePhaseCourseIterationIdProjectsGet$Params } from '../fn/projects/tease-course-phase-course-iteration-id-projects-get'; @Injectable({ providedIn: 'root' }) export class ProjectsService extends BaseService { @@ -19,8 +19,8 @@ export class ProjectsService extends BaseService { super(config, http); } - /** Path part for operation `teaseCourseIterationsCourseIterationIdProjectsGet()` */ - static readonly TeaseCourseIterationsCourseIterationIdProjectsGetPath = '/tease/course-iterations/{courseIterationId}/projects'; + /** Path part for operation `teaseCoursePhaseCourseIterationIdProjectsGet()` */ + static readonly TeaseCoursePhaseCourseIterationIdProjectsGetPath = '/tease/course_phase/{courseIterationId}/projects'; /** * Retrieve projects from a specific course iteration. @@ -28,12 +28,12 @@ export class ProjectsService extends BaseService { * 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 `teaseCourseIterationsCourseIterationIdProjectsGet()` instead. + * To access only the response body, use `teaseCoursePhaseCourseIterationIdProjectsGet()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdProjectsGet$Response(params: TeaseCourseIterationsCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable>> { - return teaseCourseIterationsCourseIterationIdProjectsGet(this.http, this.rootUrl, params, context); + teaseCoursePhaseCourseIterationIdProjectsGet$Response(params: TeaseCoursePhaseCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable>> { + return teaseCoursePhaseCourseIterationIdProjectsGet(this.http, this.rootUrl, params, context); } /** @@ -42,12 +42,12 @@ export class ProjectsService extends BaseService { * 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), `teaseCourseIterationsCourseIterationIdProjectsGet$Response()` instead. + * To access the full response (for headers, for example), `teaseCoursePhaseCourseIterationIdProjectsGet$Response()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdProjectsGet(params: TeaseCourseIterationsCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable> { - return this.teaseCourseIterationsCourseIterationIdProjectsGet$Response(params, context).pipe( + teaseCoursePhaseCourseIterationIdProjectsGet(params: TeaseCoursePhaseCourseIterationIdProjectsGet$Params, context?: HttpContext): Observable> { + return this.teaseCoursePhaseCourseIterationIdProjectsGet$Response(params, context).pipe( map((r: StrictHttpResponse>): Array => r.body) ); } diff --git a/client/src/app/api/services/skills.service.ts b/client/src/app/api/services/skills.service.ts index 0ff36a51..5a707659 100644 --- a/client/src/app/api/services/skills.service.ts +++ b/client/src/app/api/services/skills.service.ts @@ -10,8 +10,8 @@ import { ApiConfiguration } from '../api-configuration'; import { StrictHttpResponse } from '../strict-http-response'; import { Skill } from '../models/skill'; -import { teaseCourseIterationsCourseIterationIdSkillsGet } from '../fn/skills/tease-course-iterations-course-iteration-id-skills-get'; -import { TeaseCourseIterationsCourseIterationIdSkillsGet$Params } from '../fn/skills/tease-course-iterations-course-iteration-id-skills-get'; +import { teaseCoursePhaseCourseIterationIdSkillsGet } from '../fn/skills/tease-course-phase-course-iteration-id-skills-get'; +import { TeaseCoursePhaseCourseIterationIdSkillsGet$Params } from '../fn/skills/tease-course-phase-course-iteration-id-skills-get'; @Injectable({ providedIn: 'root' }) export class SkillsService extends BaseService { @@ -19,8 +19,8 @@ export class SkillsService extends BaseService { super(config, http); } - /** Path part for operation `teaseCourseIterationsCourseIterationIdSkillsGet()` */ - static readonly TeaseCourseIterationsCourseIterationIdSkillsGetPath = '/tease/course-iterations/{courseIterationId}/skills'; + /** Path part for operation `teaseCoursePhaseCourseIterationIdSkillsGet()` */ + static readonly TeaseCoursePhaseCourseIterationIdSkillsGetPath = '/tease/course_phase/{courseIterationId}/skills'; /** * Retrieve the skills from a specific course iteration. @@ -28,12 +28,12 @@ export class SkillsService extends BaseService { * 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 `teaseCourseIterationsCourseIterationIdSkillsGet()` instead. + * To access only the response body, use `teaseCoursePhaseCourseIterationIdSkillsGet()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdSkillsGet$Response(params: TeaseCourseIterationsCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable>> { - return teaseCourseIterationsCourseIterationIdSkillsGet(this.http, this.rootUrl, params, context); + teaseCoursePhaseCourseIterationIdSkillsGet$Response(params: TeaseCoursePhaseCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable>> { + return teaseCoursePhaseCourseIterationIdSkillsGet(this.http, this.rootUrl, params, context); } /** @@ -42,12 +42,12 @@ export class SkillsService extends BaseService { * 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), `teaseCourseIterationsCourseIterationIdSkillsGet$Response()` instead. + * To access the full response (for headers, for example), `teaseCoursePhaseCourseIterationIdSkillsGet$Response()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdSkillsGet(params: TeaseCourseIterationsCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable> { - return this.teaseCourseIterationsCourseIterationIdSkillsGet$Response(params, context).pipe( + teaseCoursePhaseCourseIterationIdSkillsGet(params: TeaseCoursePhaseCourseIterationIdSkillsGet$Params, context?: HttpContext): Observable> { + return this.teaseCoursePhaseCourseIterationIdSkillsGet$Response(params, context).pipe( map((r: StrictHttpResponse>): Array => r.body) ); } diff --git a/client/src/app/api/services/students.service.ts b/client/src/app/api/services/students.service.ts index 333d9d6a..56cd7d58 100644 --- a/client/src/app/api/services/students.service.ts +++ b/client/src/app/api/services/students.service.ts @@ -10,8 +10,8 @@ import { ApiConfiguration } from '../api-configuration'; import { StrictHttpResponse } from '../strict-http-response'; import { Student } from '../models/student'; -import { teaseCourseIterationsCourseIterationIdStudentsGet } from '../fn/students/tease-course-iterations-course-iteration-id-students-get'; -import { TeaseCourseIterationsCourseIterationIdStudentsGet$Params } from '../fn/students/tease-course-iterations-course-iteration-id-students-get'; +import { teaseCoursePhaseCourseIterationIdStudentsGet } from '../fn/students/tease-course-phase-course-iteration-id-students-get'; +import { TeaseCoursePhaseCourseIterationIdStudentsGet$Params } from '../fn/students/tease-course-phase-course-iteration-id-students-get'; @Injectable({ providedIn: 'root' }) export class StudentsService extends BaseService { @@ -19,8 +19,8 @@ export class StudentsService extends BaseService { super(config, http); } - /** Path part for operation `teaseCourseIterationsCourseIterationIdStudentsGet()` */ - static readonly TeaseCourseIterationsCourseIterationIdStudentsGetPath = '/tease/course-iterations/{courseIterationId}/students'; + /** Path part for operation `teaseCoursePhaseCourseIterationIdStudentsGet()` */ + static readonly TeaseCoursePhaseCourseIterationIdStudentsGetPath = '/tease/course_phase/{courseIterationId}/students'; /** * Retrieve students from a specific course iteration. @@ -28,12 +28,12 @@ export class StudentsService extends BaseService { * 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 `teaseCourseIterationsCourseIterationIdStudentsGet()` instead. + * To access only the response body, use `teaseCoursePhaseCourseIterationIdStudentsGet()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdStudentsGet$Response(params: TeaseCourseIterationsCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable>> { - return teaseCourseIterationsCourseIterationIdStudentsGet(this.http, this.rootUrl, params, context); + teaseCoursePhaseCourseIterationIdStudentsGet$Response(params: TeaseCoursePhaseCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable>> { + return teaseCoursePhaseCourseIterationIdStudentsGet(this.http, this.rootUrl, params, context); } /** @@ -42,12 +42,12 @@ export class StudentsService extends BaseService { * 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), `teaseCourseIterationsCourseIterationIdStudentsGet$Response()` instead. + * To access the full response (for headers, for example), `teaseCoursePhaseCourseIterationIdStudentsGet$Response()` instead. * * This method doesn't expect any request body. */ - teaseCourseIterationsCourseIterationIdStudentsGet(params: TeaseCourseIterationsCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable> { - return this.teaseCourseIterationsCourseIterationIdStudentsGet$Response(params, context).pipe( + teaseCoursePhaseCourseIterationIdStudentsGet(params: TeaseCoursePhaseCourseIterationIdStudentsGet$Params, context?: HttpContext): Observable> { + return this.teaseCoursePhaseCourseIterationIdStudentsGet$Response(params, context).pipe( map((r: StrictHttpResponse>): Array => r.body) ); } diff --git a/client/src/app/app.component.html b/client/src/app/app.component.html index c600991b..907f9994 100644 --- a/client/src/app/app.component.html +++ b/client/src/app/app.component.html @@ -1,8 +1,12 @@ @if (dataLoaded) { -
+
- +
+
} @else {
diff --git a/client/src/app/app.component.scss b/client/src/app/app.component.scss index 9f26e1ba..17a8e5dc 100644 --- a/client/src/app/app.component.scss +++ b/client/src/app/app.component.scss @@ -41,3 +41,13 @@ transform: translateY(50vh); opacity: 0; } + +.resizable { + height: 0.5rem; + width: 100%; + flex: none; +} + +.resizable-active { + cursor: row-resize; +} \ No newline at end of file diff --git a/client/src/app/app.component.ts b/client/src/app/app.component.ts index 7c0eca2f..3024fdc4 100644 --- a/client/src/app/app.component.ts +++ b/client/src/app/app.component.ts @@ -1,5 +1,4 @@ import { - ChangeDetectorRef, Component, ComponentFactoryResolver, OnDestroy, @@ -9,7 +8,7 @@ import { ViewEncapsulation, } from '@angular/core'; import { OverlayHostDirective } from './overlay-host.directive'; -import { OverlayComponentData, OverlayService, OverlayServiceHost } from './overlay.service'; +import { OverlayComponentData, OverlayData, OverlayService, OverlayServiceHost } from './overlay.service'; import { DragulaService } from 'ng2-dragula'; import { Allocation, Project, Skill, Student } from 'src/app/api/models'; import { StudentsService } from 'src/app/shared/data/students.service'; @@ -27,6 +26,8 @@ import { ImportOverlayComponent } from './components/import-overlay/import-overl import { LockedStudentsService } from './shared/data/locked-students.service'; import { AllocationDataService } from './shared/services/allocation-data.service'; import { CollaborationService } from './shared/services/collaboration.service'; +import { UtilityComponent } from './components/utility/utility.component'; +import { ResizeService } from './shared/services/resize.service'; @Component({ selector: 'app-root', @@ -41,6 +42,8 @@ export class AppComponent implements OverlayServiceHost, OnInit, OnDestroy { @ViewChild(OverlayHostDirective) private overlayHostDirective: OverlayHostDirective; + @ViewChild('utilityRef') + utilityComponent!: UtilityComponent; private subscriptions: Subscription[] = []; private students: Student[]; @@ -62,7 +65,8 @@ export class AppComponent implements OverlayServiceHost, OnInit, OnDestroy { private promptService: PromptService, private lockedStudentsService: LockedStudentsService, private allocationDataService: AllocationDataService, - private collaborationService: CollaborationService + private collaborationService: CollaborationService, + private resizeService: ResizeService ) { this.overlayService.host = this; } @@ -109,10 +113,13 @@ export class AppComponent implements OverlayServiceHost, OnInit, OnDestroy { if (courseIterationId) { this.collaborationService.connect(courseIterationId); } + + document.documentElement.style.setProperty('--utility-height', `${256}px`); } ngOnDestroy(): void { this.subscriptions.forEach(subscription => subscription?.unsubscribe()); + this.resizeService.cleanup(); } private handleStudentDrop(el: Element, target: Element, sibling: Element): void { @@ -132,7 +139,7 @@ export class AppComponent implements OverlayServiceHost, OnInit, OnDestroy { } /* OverlayServiceHost interface */ - public displayComponent(component: Type, data: any) { + public displayComponent(component: Type, data: OverlayData) { const componentFactory = this.componentFactoryResolver.resolveComponentFactory(component); const viewContainerRef = this.overlayHostDirective.viewContainerRef; viewContainerRef.clear(); @@ -199,4 +206,12 @@ export class AppComponent implements OverlayServiceHost, OnInit, OnDestroy { this.overlayService.displayComponent(ConfirmationOverlayComponent, overlayData); } + + startResize(event: MouseEvent): void { + if (!this.utilityComponent?.utilityContainerVisible) { + return; + } + + this.resizeService.startResize(event); + } } diff --git a/client/src/app/app.module.ts b/client/src/app/app.module.ts index a27c114d..c798c8a3 100644 --- a/client/src/app/app.module.ts +++ b/client/src/app/app.module.ts @@ -31,21 +31,32 @@ export const API_INTERCEPTOR_PROVIDER: Provider = { multi: true, }; -@NgModule({ declarations: [AppComponent, OverlayHostDirective], - bootstrap: [AppComponent], imports: [ - /* external modules */ - BrowserModule, - NgbModule, - AppRoutingModule, - DragulaModule.forRoot(), - ReactiveFormsModule, - BrowserAnimationsModule, - ToastrModule.forRoot(), - /* own modules */ - SharedModule, - ComponentsModule, - environment.production ? ApiModule : ApiModule.forRoot({ rootUrl: 'http://localhost:3001/api' }), - FontAwesomeModule], providers: [OverlayService, PromptService, AuthInterceptor, API_INTERCEPTOR_PROVIDER, provideHttpClient(withInterceptorsFromDi())] }) +@NgModule({ + declarations: [AppComponent, OverlayHostDirective], + bootstrap: [AppComponent], + imports: [ + /* external modules */ + BrowserModule, + NgbModule, + AppRoutingModule, + DragulaModule.forRoot(), + ReactiveFormsModule, + BrowserAnimationsModule, + ToastrModule.forRoot(), + /* own modules */ + SharedModule, + ComponentsModule, + environment.production ? ApiModule : ApiModule.forRoot({ rootUrl: 'http://localhost:3001/team-allocation/api' }), + FontAwesomeModule, + ], + providers: [ + OverlayService, + PromptService, + AuthInterceptor, + API_INTERCEPTOR_PROVIDER, + provideHttpClient(withInterceptorsFromDi()), + ], +}) export class AppModule { constructor(library: FaIconLibrary) { library.addIconPacks(teaseIconPack); diff --git a/client/src/app/components/constraint-builder-nationality/constraint-builder-nationality.component.ts b/client/src/app/components/constraint-builder-nationality/constraint-builder-nationality.component.ts index d8b01330..a98420a4 100644 --- a/client/src/app/components/constraint-builder-nationality/constraint-builder-nationality.component.ts +++ b/client/src/app/components/constraint-builder-nationality/constraint-builder-nationality.component.ts @@ -81,6 +81,9 @@ export class ConstraintBuilderNationalityComponent implements OverlayComponentDa id: project.id, name: project.name, })); + this.projectsService.getProjects().forEach(project => { + this.projectsSelectData.find(p => p.id === project.id).selected = true; + }); } close(): void { this.overlayService.switchComponent(ConstraintSummaryComponent); diff --git a/client/src/app/components/constraint-builder-overlay/constraint-builder-overlay.component.ts b/client/src/app/components/constraint-builder-overlay/constraint-builder-overlay.component.ts index 617ff2b5..6f2f4268 100644 --- a/client/src/app/components/constraint-builder-overlay/constraint-builder-overlay.component.ts +++ b/client/src/app/components/constraint-builder-overlay/constraint-builder-overlay.component.ts @@ -7,7 +7,6 @@ import { ThresholdWrapper, } from 'src/app/shared/matching/constraints/constraint'; import { v4 as uuidv4 } from 'uuid'; -import { Operator } from 'src/app/shared/matching/constraints/constraint-utils'; import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; import { ProjectsService } from 'src/app/shared/data/projects.service'; import { facQuestionIcon } from 'src/assets/icons/icons'; @@ -22,7 +21,7 @@ export class ConstraintBuilderOverlayComponent implements OverlayComponentData, facQuestionIcon = facQuestionIcon; data: { constraintWrapper: ConstraintWrapper; - onClosed: () => {}; + onClosed: () => void; }; id: string; projectsSelectData: SelectData[] = []; @@ -54,6 +53,10 @@ export class ConstraintBuilderOverlayComponent implements OverlayComponentData, this.projectsSelectData.find(project => project.id === projectId).selected = true; }); } else { + this.projectsService.getProjects().forEach(project => { + this.projectIds.push(project.id); + this.projectsSelectData.find(p => p.id === project.id).selected = true; + }); this.constraintFunctionWrapper = new ConstraintFunctionWrapper('', '', null, '', '', [], ''); this.thresholdWrapper = new ThresholdWrapper(0, 10); } @@ -106,7 +109,7 @@ export class ConstraintBuilderOverlayComponent implements OverlayComponentData, }); } - private createConstraintWrapper(tempConstraint: Boolean): ConstraintWrapper { + private createConstraintWrapper(tempConstraint: boolean): ConstraintWrapper { return new ConstraintWrapper( this.projectIds, this.constraintFunctionWrapper, diff --git a/client/src/app/components/constraint-builder-overlay/constraint-function-builder/constraint-function-builder.component.ts b/client/src/app/components/constraint-builder-overlay/constraint-function-builder/constraint-function-builder.component.ts index a0477bc8..b0c21a9c 100644 --- a/client/src/app/components/constraint-builder-overlay/constraint-function-builder/constraint-function-builder.component.ts +++ b/client/src/app/components/constraint-builder-overlay/constraint-function-builder/constraint-function-builder.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, OnDestroy, OnInit, Output, Input, AfterViewInit } from '@angular/core'; +import { Component, EventEmitter, OnDestroy, OnInit, Output, Input } from '@angular/core'; import { FormControl, FormGroup, Validators } from '@angular/forms'; import { Subscription } from 'rxjs'; import { Skill, Student } from 'src/app/api/models'; diff --git a/client/src/app/components/constraint-builder-overlay/constraint-threshold-builder/constraint-threshold-builder.component.ts b/client/src/app/components/constraint-builder-overlay/constraint-threshold-builder/constraint-threshold-builder.component.ts index 1bf4f7ef..3cf13329 100644 --- a/client/src/app/components/constraint-builder-overlay/constraint-threshold-builder/constraint-threshold-builder.component.ts +++ b/client/src/app/components/constraint-builder-overlay/constraint-threshold-builder/constraint-threshold-builder.component.ts @@ -1,5 +1,5 @@ import { Component, EventEmitter, Input, OnDestroy, OnInit, Output } from '@angular/core'; -import { AbstractControl, FormControl, FormGroup } from '@angular/forms'; +import { FormControl, FormGroup } from '@angular/forms'; import { Subscription } from 'rxjs'; import { ThresholdWrapper } from 'src/app/shared/matching/constraints/constraint'; import { integerValidator, positiveValidator } from 'src/app/shared/utils/validators.utils'; @@ -25,7 +25,7 @@ export class ConstraintThresholdBuilderComponent implements OnInit, OnDestroy { lowerBound: new FormControl(lowerBound, [integerValidator, positiveValidator]), upperBound: new FormControl(upperBound, [integerValidator, positiveValidator]), }); - this.thresholdChange.emit(new ThresholdWrapper(0, upperBound)); + this.thresholdChange.emit(new ThresholdWrapper(lowerBound, upperBound)); this.subscriptions.push( this.form.valueChanges.subscribe(() => { diff --git a/client/src/app/components/constraint-help/constraint-help.component.ts b/client/src/app/components/constraint-help/constraint-help.component.ts index 4f00b0f1..6dc5f1fb 100644 --- a/client/src/app/components/constraint-help/constraint-help.component.ts +++ b/client/src/app/components/constraint-help/constraint-help.component.ts @@ -25,7 +25,7 @@ interface DistributionExample { export class ConstraintHelpComponent implements OverlayComponentData { data: { constraintWrapper: ConstraintWrapper; - onClosed: () => {}; + onClosed: () => void; }; facCloseIcon = facCloseIcon; facPersonThinIcon = facPersonThinIcon; diff --git a/client/src/app/components/constraint-summary-view/constraint-summary.component.ts b/client/src/app/components/constraint-summary-view/constraint-summary.component.ts index 5d26c19a..b8d326c9 100644 --- a/client/src/app/components/constraint-summary-view/constraint-summary.component.ts +++ b/client/src/app/components/constraint-summary-view/constraint-summary.component.ts @@ -6,7 +6,6 @@ import { ProjectsService } from 'src/app/shared/data/projects.service'; import { ConstraintWrapper } from 'src/app/shared/matching/constraints/constraint'; import { facAddIcon, - facConstraintIcon, facCheckExtraBoldIcon, facDeleteIcon, facEditIcon, diff --git a/client/src/app/components/import-overlay/import-overlay.component.ts b/client/src/app/components/import-overlay/import-overlay.component.ts index 08d9ad91..6d1ac4ee 100644 --- a/client/src/app/components/import-overlay/import-overlay.component.ts +++ b/client/src/app/components/import-overlay/import-overlay.component.ts @@ -14,9 +14,7 @@ import { LockedStudentsService } from 'src/app/shared/data/locked-students.servi import { CsvParserService } from 'src/app/shared/services/csv-parser.service'; import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; import { FormControl, FormGroup, Validators } from '@angular/forms'; -import { Subscription } from 'rxjs'; import { CourseIterationsService } from 'src/app/shared/data/course-iteration.service'; -import { environment } from 'src/environments/environment'; import { CollaborationService } from 'src/app/shared/services/collaboration.service'; @Component({ diff --git a/client/src/app/components/intro-card/intro-card.component.ts b/client/src/app/components/intro-card/intro-card.component.ts index ad985a57..bba35e30 100644 --- a/client/src/app/components/intro-card/intro-card.component.ts +++ b/client/src/app/components/intro-card/intro-card.component.ts @@ -1,4 +1,4 @@ -import { Component, EventEmitter, Output } from '@angular/core'; +import { Component } from '@angular/core'; import { OverlayService } from 'src/app/overlay.service'; import { ImportOverlayComponent } from '../import-overlay/import-overlay.component'; import { facImportIcon } from 'src/assets/icons/icons'; diff --git a/client/src/app/components/navigation-bar/navigation-bar.component.html b/client/src/app/components/navigation-bar/navigation-bar.component.html index 8fc34922..af058629 100644 --- a/client/src/app/components/navigation-bar/navigation-bar.component.html +++ b/client/src/app/components/navigation-bar/navigation-bar.component.html @@ -1,4 +1,4 @@ -
+
TEASE
diff --git a/client/src/app/components/person-detail-overlay/person-detail-overlay.component.html b/client/src/app/components/person-detail-overlay/person-detail-overlay.component.html index 170c515e..0134cb8a 100644 --- a/client/src/app/components/person-detail-overlay/person-detail-overlay.component.html +++ b/client/src/app/components/person-detail-overlay/person-detail-overlay.component.html @@ -21,7 +21,7 @@

{{ name }}

- @for (skillColor of skillColors; track skillColor) { + @for (skillColor of skillColors; track $index) {
}
@@ -128,7 +128,7 @@
Skills

{{ skill.title }}

- @for (color of skill.colors; track color) { + @for (color of skill.colors; track $index) {
}
diff --git a/client/src/app/components/person-detail-overlay/person-detail-overlay.component.ts b/client/src/app/components/person-detail-overlay/person-detail-overlay.component.ts index db966255..0341d92f 100644 --- a/client/src/app/components/person-detail-overlay/person-detail-overlay.component.ts +++ b/client/src/app/components/person-detail-overlay/person-detail-overlay.component.ts @@ -1,6 +1,6 @@ -import { Component, Input, OnInit } from '@angular/core'; +import { Component, OnInit } from '@angular/core'; import { OverlayComponentData } from 'src/app/overlay.service'; -import { Student, Device, SkillProficiency, LanguageProficiency, Skill, StudentSkill } from 'src/app/api/models'; +import { Student, Device, LanguageProficiency, Skill, StudentSkill } from 'src/app/api/models'; import { OverlayService } from 'src/app/overlay.service'; import { ProjectsService } from 'src/app/shared/data/projects.service'; import { GenderService } from 'src/app/shared/helpers/gender.service'; diff --git a/client/src/app/components/projects/projects.component.html b/client/src/app/components/projects/projects.component.html index 537eb9d7..befdd7a0 100644 --- a/client/src/app/components/projects/projects.component.html +++ b/client/src/app/components/projects/projects.component.html @@ -1,5 +1,5 @@
- @for (projectData of projectsData; track projectData) { + @for (projectData of projectsData; track projectData.project.id) {
diff --git a/client/src/app/components/projects/projects.component.ts b/client/src/app/components/projects/projects.component.ts index dd2a5597..462a0286 100644 --- a/client/src/app/components/projects/projects.component.ts +++ b/client/src/app/components/projects/projects.component.ts @@ -16,7 +16,7 @@ export class ProjectsComponent implements OnInit, OnDestroy { facWarnIcon = facWarnIcon; @Input({ required: true }) projectsData: ProjectData[]; - @Input() imageExport: Boolean = false; + @Input() imageExport: boolean = false; constraintsVisible = false; lockedStudents: string[] = []; diff --git a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/gender-chart-data.service.ts b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/gender-chart-data.service.ts new file mode 100644 index 00000000..c0e60525 --- /dev/null +++ b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/gender-chart-data.service.ts @@ -0,0 +1,80 @@ +import { Injectable } from '@angular/core'; +import { ChartDataFormatter } from '../chart-data-formatter'; +import { ChartData } from 'chart.js'; +import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; +import { AllocationData, ProjectData } from 'src/app/shared/models/allocation-data'; +import { ChartProjectData, PeopleChartStudentData } from '../people-chart-data'; +import { Gender } from 'src/app/api/models'; +import { ColorService } from 'src/app/shared/constants/color.service'; + +@Injectable({ + providedIn: 'root', +}) +export class GenderChartDataService implements ChartDataFormatter { + getSelectData(): SelectData[] { + return [{ name: 'Gender', id: 'statistics-gender', group: 'Other', reference: this }]; + } + + getDoughnutData(allocationData: AllocationData): ChartData<'doughnut', number[], unknown> { + let students = allocationData.projectsData.flatMap(projectData => projectData.students); + students = students.concat(allocationData.studentsWithoutTeam); + + const gender = Object.values(Gender); + const genderMap = new Map(Object.values(gender).map(gender => [gender, 0])); + + students.forEach(student => { + genderMap.set(student.gender, (genderMap.get(student.gender) || 0) + 1); + }); + + const datasets = [ + { + data: Array.from(genderMap.values()), + backgroundColor: Array.from(genderMap.keys()).map(gender => ColorService.getGenderColor(gender)), + }, + ]; + + return { labels: gender, datasets: datasets }; + } + + getProjectData(allocationData: AllocationData): ChartProjectData[] { + const data: ChartProjectData[] = allocationData.projectsData.map(projectData => { + return this.getGenderChartProjectData(projectData); + }); + return data; + } + + private getGenderChartProjectData(projectData: ProjectData): ChartProjectData { + const studentData = this.getGenderChartStudentData(projectData); + + return { + name: projectData.project.name, + tag: null, + peopleStudentData: studentData, + }; + } + + private getGenderChartStudentData(projectData: ProjectData): PeopleChartStudentData[] { + const students = projectData.students.map(student => { + return { + gender: student.gender, + firstName: student.firstName, + lastName: student.lastName, + }; + }); + + students.sort((a, b) => a.gender.localeCompare(b.gender)); + + const studentData: PeopleChartStudentData[] = students.map(student => { + return { + color: ColorService.getGenderColor(student.gender), + tooltip: this.getGenderTooltip(student), + }; + }); + + return studentData; + } + + private getGenderTooltip(student): string { + return student.firstName + ' ' + student.lastName + ': ' + student.gender; + } +} diff --git a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/priority-chart-data.service.ts b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/priority-chart-data.service.ts index e1fe8894..daa71782 100644 --- a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/priority-chart-data.service.ts +++ b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/priority-chart-data.service.ts @@ -47,17 +47,12 @@ export class PriorityChartDataService implements ChartDataFormatter { const data: ChartProjectData[] = []; const projectCount = allocationData.projectsData.length; - let priorityMaps = this.getPriorityMaps(allocationData.projectsData); + const priorityMaps = this.getPriorityMaps(allocationData.projectsData); const highestPriorityCount = this.getHighestPriorityCount(priorityMaps); allocationData.projectsData.forEach(projectData => { const priorityMap = priorityMaps.get(projectData.project.id); - const barChartOptions = this.getChartConfigurationOptions( - projectData, - priorityMap, - projectCount, - highestPriorityCount - ); + const barChartOptions = this.getChartConfigurationOptions(projectData, projectCount, highestPriorityCount); const labels = Array.from({ length: projectCount }, (_, index) => index.toString()); @@ -147,7 +142,7 @@ export class PriorityChartDataService implements ChartDataFormatter { return priorityMaps; } - private getTooltipLabel(context: TooltipItem<'bar'>, priorityMap: number[]): string { + private getTooltipLabel(context: TooltipItem<'bar'>): string { const studentCount = context.parsed.y; const priority = context.dataIndex; return `Priority ${priority + 1}: ${studentCount}`; @@ -155,7 +150,6 @@ export class PriorityChartDataService implements ChartDataFormatter { private getChartConfigurationOptions( projectData: ProjectData, - priorityMap: number[], xMax: number, yMax: number ): ChartConfiguration<'bar'>['options'] { @@ -189,8 +183,8 @@ export class PriorityChartDataService implements ChartDataFormatter { }, tooltip: { callbacks: { - title: _ => projectData.project.name, - label: context => this.getTooltipLabel(context, priorityMap), + title: () => projectData.project.name, + label: context => this.getTooltipLabel(context), }, }, }, diff --git a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/skills-proficiency-chart-data.service.ts b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/skills-proficiency-chart-data.service.ts index 6fd3fe84..7fb06fe5 100644 --- a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/skills-proficiency-chart-data.service.ts +++ b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/skills-proficiency-chart-data.service.ts @@ -13,7 +13,6 @@ import { SkillsService } from 'src/app/shared/data/skills.service'; providedIn: 'root', }) export class SkillsProficiencyChartDataService implements ChartDataFormatter { - private readonly SKILL_PROFICIENCY_LABELS = Object.values(SkillProficiency); private readonly BACKGROUND_COLORS = [...ColorService.getSkillProficiencyColors()]; constructor(private skillsService: SkillsService) {} @@ -43,6 +42,7 @@ export class SkillsProficiencyChartDataService implements ChartDataFormatter { }, ]; + console.log({ labels: skillProficiencies, datasets: datasets }); return { labels: skillProficiencies, datasets: datasets }; } @@ -50,7 +50,6 @@ export class SkillsProficiencyChartDataService implements ChartDataFormatter { const data: ChartProjectData[] = allocationData.projectsData.map(projectData => { return this.getPeopleChartProjectData(projectData, skillId); }); - return data; } diff --git a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/study-degree-chart-data.service.ts b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/study-degree-chart-data.service.ts new file mode 100644 index 00000000..eda06c68 --- /dev/null +++ b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/study-degree-chart-data.service.ts @@ -0,0 +1,116 @@ +import { Injectable } from '@angular/core'; +import { ChartData } from 'chart.js'; +import { AllocationData, ProjectData } from 'src/app/shared/models/allocation-data'; +import { ChartDataFormatter } from '../chart-data-formatter'; +import { ChartProjectData, PeopleChartStudentData } from '../people-chart-data'; +import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; +import { ColorService } from 'src/app/shared/constants/color.service'; + +@Injectable({ + providedIn: 'root', +}) +export class StudyDegreeChartDataService implements ChartDataFormatter { + private readonly COLORS = ColorService.getSkillProficiencyColors(); + private allocationData: AllocationData; + private uniqueStudyDegrees: string[] = []; + + getSelectData(): SelectData[] { + return [ + { + name: 'Study Degree', + id: 'statistics-study-degree', + group: 'Other', + reference: this, + }, + ]; + } + + getDoughnutData(allocationData: AllocationData): ChartData<'doughnut', number[], unknown> { + this.allocationData = allocationData; + this.updateUniqueStudyDegrees(); + + let students = allocationData.projectsData.flatMap(projectData => projectData.students); + students = students.concat(allocationData.studentsWithoutTeam); + + const studyDegreeMap = new Map(this.uniqueStudyDegrees.map(degree => [degree, 0])); + + students.forEach(student => { + studyDegreeMap.set(student.studyDegree, (studyDegreeMap.get(student.studyDegree) || 0) + 1); + }); + + // Generate background colors using dynamic mapping + const backgroundColors = this.uniqueStudyDegrees.map(degree => this.getStudyDegreeColor(degree)); + + const datasets = [ + { + data: Array.from(studyDegreeMap.values()), + backgroundColor: backgroundColors, + }, + ]; + + return { labels: this.uniqueStudyDegrees, datasets: datasets }; + } + + getProjectData(allocationData: AllocationData): ChartProjectData[] { + this.allocationData = allocationData; + this.updateUniqueStudyDegrees(); + + const data: ChartProjectData[] = allocationData.projectsData.map(projectData => { + return this.getStudyDegreeChartProjectData(projectData); + }); + return data; + } + + private updateUniqueStudyDegrees(): void { + if (!this.allocationData) return; + + let students = this.allocationData.projectsData.flatMap(projectData => projectData.students); + students = students.concat(this.allocationData.studentsWithoutTeam); + + this.uniqueStudyDegrees = students + .map(student => student.studyDegree) + .filter((value, index, self) => self.indexOf(value) === index) + .sort(); // Sort for consistency + } + + private getStudyDegreeChartProjectData(projectData: ProjectData): ChartProjectData { + const studentData = this.getStudyDegreeChartStudentData(projectData); + + return { + name: projectData.project.name, + tag: null, + peopleStudentData: studentData, + }; + } + + private getStudyDegreeChartStudentData(projectData: ProjectData): PeopleChartStudentData[] { + const students = projectData.students.map(student => { + return { + studyDegree: student.studyDegree, + firstName: student.firstName, + lastName: student.lastName, + }; + }); + + students.sort((a, b) => a.studyDegree.localeCompare(b.studyDegree)); + + const studentData: PeopleChartStudentData[] = students.map(student => { + return { + color: this.getStudyDegreeColor(student.studyDegree), + tooltip: this.getStudyDegreeTooltip(student), + }; + }); + + return studentData; + } + + private getStudyDegreeColor(studyDegree: string): string { + // Find the index of the degree in the sorted unique degrees array + const index = this.uniqueStudyDegrees.indexOf(studyDegree); + return this.COLORS[index % this.COLORS.length]; + } + + private getStudyDegreeTooltip(student): string { + return student.firstName + ' ' + student.lastName + ': ' + student.studyDegree; + } +} diff --git a/client/src/app/components/statistics/charts/chart-data-formatter/formatters/study-program-chart-data.service.ts b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/study-program-chart-data.service.ts new file mode 100644 index 00000000..9c211606 --- /dev/null +++ b/client/src/app/components/statistics/charts/chart-data-formatter/formatters/study-program-chart-data.service.ts @@ -0,0 +1,116 @@ +import { Injectable } from '@angular/core'; +import { ChartData } from 'chart.js'; +import { AllocationData, ProjectData } from 'src/app/shared/models/allocation-data'; +import { ChartDataFormatter } from '../chart-data-formatter'; +import { ChartProjectData, PeopleChartStudentData } from '../people-chart-data'; +import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; +import { ColorService } from 'src/app/shared/constants/color.service'; + +@Injectable({ + providedIn: 'root', +}) +export class StudyProgramChartDataService implements ChartDataFormatter { + private readonly COLORS = ColorService.getSkillProficiencyColors(); + private allocationData: AllocationData; + private uniqueStudyPrograms: string[] = []; + + getSelectData(): SelectData[] { + return [ + { + name: 'Study Program', + id: 'statistics-study-program', + group: 'Other', + reference: this, + }, + ]; + } + + getDoughnutData(allocationData: AllocationData): ChartData<'doughnut', number[], unknown> { + this.allocationData = allocationData; + this.updateUniqueStudyPrograms(); + + let students = allocationData.projectsData.flatMap(projectData => projectData.students); + students = students.concat(allocationData.studentsWithoutTeam); + + const studyProgramMap = new Map(this.uniqueStudyPrograms.map(program => [program, 0])); + + students.forEach(student => { + studyProgramMap.set(student.studyProgram, (studyProgramMap.get(student.studyProgram) || 0) + 1); + }); + + // Generate background colors using dynamic mapping + const backgroundColors = this.uniqueStudyPrograms.map(program => this.getStudyProgramColor(program)); + + const datasets = [ + { + data: Array.from(studyProgramMap.values()), + backgroundColor: backgroundColors, + }, + ]; + + return { labels: this.uniqueStudyPrograms, datasets: datasets }; + } + + getProjectData(allocationData: AllocationData): ChartProjectData[] { + this.allocationData = allocationData; + this.updateUniqueStudyPrograms(); + + const data: ChartProjectData[] = allocationData.projectsData.map(projectData => { + return this.getStudyProgramChartProjectData(projectData); + }); + return data; + } + + private updateUniqueStudyPrograms(): void { + if (!this.allocationData) return; + + let students = this.allocationData.projectsData.flatMap(projectData => projectData.students); + students = students.concat(this.allocationData.studentsWithoutTeam); + + this.uniqueStudyPrograms = students + .map(student => student.studyProgram) + .filter((value, index, self) => self.indexOf(value) === index) + .sort(); // Sort for consistency + } + + private getStudyProgramChartProjectData(projectData: ProjectData): ChartProjectData { + const studentData = this.getStudyProgramChartStudentData(projectData); + + return { + name: projectData.project.name, + tag: null, + peopleStudentData: studentData, + }; + } + + private getStudyProgramChartStudentData(projectData: ProjectData): PeopleChartStudentData[] { + const students = projectData.students.map(student => { + return { + studyProgram: student.studyProgram, + firstName: student.firstName, + lastName: student.lastName, + }; + }); + + students.sort((a, b) => a.studyProgram.localeCompare(b.studyProgram)); + + const studentData: PeopleChartStudentData[] = students.map(student => { + return { + color: this.getStudyProgramColor(student.studyProgram), + tooltip: this.getStudyProgramTooltip(student), + }; + }); + + return studentData; + } + + private getStudyProgramColor(studyProgram: string): string { + // Find the index of the program in the sorted unique programs array + const index = this.uniqueStudyPrograms.indexOf(studyProgram); + return this.COLORS[index % this.COLORS.length]; + } + + private getStudyProgramTooltip(student): string { + return student.firstName + ' ' + student.lastName + ': ' + student.studyProgram; + } +} diff --git a/client/src/app/components/statistics/statistics.component.ts b/client/src/app/components/statistics/statistics.component.ts index 1c323164..74c4c68e 100644 --- a/client/src/app/components/statistics/statistics.component.ts +++ b/client/src/app/components/statistics/statistics.component.ts @@ -1,12 +1,8 @@ -import { Component, EventEmitter, Input, OnChanges, OnInit, Output, SimpleChanges } from '@angular/core'; +import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { ChartConfiguration } from 'chart.js'; import { AllocationData } from 'src/app/shared/models/allocation-data'; -import { IntroCourseProficiencyChartDataService } from './charts/chart-data-formatter/formatters/intro-course-proficiency-chart-data.service'; -import { PriorityChartDataService } from './charts/chart-data-formatter/formatters/priority-chart-data.service'; import { ChartProjectData } from './charts/chart-data-formatter/people-chart-data'; -import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; import { ChartDataFormatter } from './charts/chart-data-formatter/chart-data-formatter'; -import { SkillsProficiencyChartDataService } from './charts/chart-data-formatter/formatters/skills-proficiency-chart-data.service'; @Component({ selector: 'app-statistics', diff --git a/client/src/app/components/student-preview-card/student-preview-card.component.ts b/client/src/app/components/student-preview-card/student-preview-card.component.ts index 1acb8623..fbdbc631 100644 --- a/client/src/app/components/student-preview-card/student-preview-card.component.ts +++ b/client/src/app/components/student-preview-card/student-preview-card.component.ts @@ -1,5 +1,5 @@ import { ChangeDetectorRef, Component, Input, OnInit } from '@angular/core'; -import { Student, Device, SkillProficiency, LanguageProficiency } from 'src/app/api/models'; +import { Student, Device, LanguageProficiency } from 'src/app/api/models'; import { OverlayService } from 'src/app/overlay.service'; import { ProjectsService } from 'src/app/shared/data/projects.service'; import { GenderService } from 'src/app/shared/helpers/gender.service'; diff --git a/client/src/app/components/utility/utility.component.html b/client/src/app/components/utility/utility.component.html index 0003ffe1..00b0d4c6 100644 --- a/client/src/app/components/utility/utility.component.html +++ b/client/src/app/components/utility/utility.component.html @@ -74,23 +74,24 @@ [formatter]="selectedStatisticsFormatter"> } @if (viewMode === ViewMode.Students) { - @for (students of [allocationData.studentsWithoutTeam]; track students) { -
- @if (!students.length) { -
-
- -
Empty Student Pool
-
Drag Student Here
-
+
+ @if (!allocationData.studentsWithoutTeam.length) { +
+
+ +
Empty Student Pool
+
Drag Student Here
- } @else { - @for (student of students; track student) { - - } +
+ } @else { + @for (student of allocationData.studentsWithoutTeam; track student.id) { + } -
- } + } +
}
diff --git a/client/src/app/components/utility/utility.component.scss b/client/src/app/components/utility/utility.component.scss index 3a091a88..f0490a02 100644 --- a/client/src/app/components/utility/utility.component.scss +++ b/client/src/app/components/utility/utility.component.scss @@ -38,7 +38,7 @@ @keyframes slideOut { 0% { - height: 16rem; + height: var(--utility-height);; } 100% { height: 0; @@ -50,7 +50,7 @@ height: 0; } 100% { - height: 16rem; + height: var(--utility-height); } } diff --git a/client/src/app/components/utility/utility.component.ts b/client/src/app/components/utility/utility.component.ts index aee2dc9d..7fa03c3a 100644 --- a/client/src/app/components/utility/utility.component.ts +++ b/client/src/app/components/utility/utility.component.ts @@ -1,4 +1,4 @@ -import { Component, Input, OnChanges, OnInit, SimpleChanges } from '@angular/core'; +import { Component, Input, OnChanges, OnInit } from '@angular/core'; import { SelectData } from 'src/app/shared/matching/constraints/constraint-functions/constraint-function'; import { AllocationData } from 'src/app/shared/models/allocation-data'; import { facCloseIcon, facWarnIcon } from 'src/assets/icons/icons'; @@ -7,6 +7,9 @@ import { PriorityChartDataService } from '../statistics/charts/chart-data-format import { SkillsProficiencyChartDataService } from '../statistics/charts/chart-data-formatter/formatters/skills-proficiency-chart-data.service'; import { ChartDataFormatter } from '../statistics/charts/chart-data-formatter/chart-data-formatter'; import { DevicesChartDataService } from '../statistics/charts/chart-data-formatter/formatters/devices-chart-data.service'; +import { GenderChartDataService } from '../statistics/charts/chart-data-formatter/formatters/gender-chart-data.service'; +import { StudyProgramChartDataService } from '../statistics/charts/chart-data-formatter/formatters/study-program-chart-data.service'; +import { StudyDegreeChartDataService } from '../statistics/charts/chart-data-formatter/formatters/study-degree-chart-data.service'; enum ViewMode { Students, @@ -28,7 +31,7 @@ export class UtilityComponent implements OnInit, OnChanges { selectedStatisticsId: string; selectedStatisticsFormatter: ChartDataFormatter; - utilityContainerVisible = true; + public utilityContainerVisible = true; @Input({ required: true }) allocationData: AllocationData; @@ -36,7 +39,10 @@ export class UtilityComponent implements OnInit, OnChanges { private introCourseProficencyChartDataService: IntroCourseProficiencyChartDataService, private priorityChartDataService: PriorityChartDataService, private skillsProficiencyChartDataService: SkillsProficiencyChartDataService, - private devicesChartDataService: DevicesChartDataService + private devicesChartDataService: DevicesChartDataService, + private genderChartDataService: GenderChartDataService, + private studyProgramChartDataService: StudyProgramChartDataService, + private studyDegreeChartDataService: StudyDegreeChartDataService ) {} ngOnInit(): void { @@ -72,6 +78,9 @@ export class UtilityComponent implements OnInit, OnChanges { this.introCourseProficencyChartDataService, this.skillsProficiencyChartDataService, this.devicesChartDataService, + this.genderChartDataService, + this.studyProgramChartDataService, + this.studyDegreeChartDataService, ]; this.statisticsSelectData = formatters.flatMap(formatter => formatter.getSelectData()); } diff --git a/client/src/app/overlay.service.ts b/client/src/app/overlay.service.ts index da25bd28..52816cb6 100644 --- a/client/src/app/overlay.service.ts +++ b/client/src/app/overlay.service.ts @@ -4,7 +4,7 @@ import { StudentDetailOverlayData } from './shared/models/overlay-data/student-d import { ExportOverlayData } from './shared/models/overlay-data/export-overlay-data'; import { ConstraintBuilderOverlayData } from './shared/models/overlay-data/constraint-builder-overlay-data'; -type OverlayData = +export type OverlayData = | ConfirmationOverlayData | StudentDetailOverlayData | ExportOverlayData @@ -14,20 +14,16 @@ export interface OverlayComponentData { } export interface OverlayServiceHost { - displayComponent(component: Type, data: any); + displayComponent(component: Type, data: OverlayData); closeOverlay(); } @Injectable() export class OverlayService { host: OverlayServiceHost; - private displayedComponentData: any = null; + private displayedComponentData: OverlayData | null = null; displayComponent(component: Type, data?: OverlayData): void { - if (this.displayedComponentData && this.displayedComponentData.onClose) { - this.displayedComponentData.onClose(); - } - if (this.host) { this.host.displayComponent(component, data); this.displayedComponentData = data; @@ -35,10 +31,6 @@ export class OverlayService { } closeOverlay(): void { - if (this.displayedComponentData && this.displayedComponentData.onClose) { - this.displayedComponentData.onClose(); - } - if (this.host) { this.host.closeOverlay(); this.displayedComponentData = null; diff --git a/client/src/app/shared/constants/color.service.ts b/client/src/app/shared/constants/color.service.ts index cbc0e52c..1338ffc7 100644 --- a/client/src/app/shared/constants/color.service.ts +++ b/client/src/app/shared/constants/color.service.ts @@ -1,4 +1,4 @@ -import { SkillProficiency } from 'src/app/api/models'; +import { Gender, SkillProficiency } from 'src/app/api/models'; export class ColorService { private static readonly NOVICE = '#e16868'; @@ -39,4 +39,19 @@ export class ColorService { } return Array(4).fill('inactive'); } + + private static readonly MALE = '#4A90E2'; + private static readonly FEMALE = '#E24A90'; + private static readonly OTHER = '#50C878'; + private static readonly PREFER_NOT_TO_SAY = '#A0A0A0'; + + static getGenderColor(gender: Gender): string { + const genderColors = { + [Gender.Male]: this.MALE, + [Gender.Female]: this.FEMALE, + [Gender.Other]: this.OTHER, + [Gender.PreferNotToSay]: this.PREFER_NOT_TO_SAY, + }; + return genderColors[gender] || this.PREFER_NOT_TO_SAY; + } } diff --git a/client/src/app/shared/data/allocations.service.ts b/client/src/app/shared/data/allocations.service.ts index 8798d795..0776cf8a 100644 --- a/client/src/app/shared/data/allocations.service.ts +++ b/client/src/app/shared/data/allocations.service.ts @@ -23,7 +23,7 @@ export class AllocationsService { } } - setAllocations(allocations: Allocation[], sentWebSocketUpdate: Boolean = true): void { + setAllocations(allocations: Allocation[], sentWebSocketUpdate: boolean = true): void { if (!allocations) { allocations = []; } @@ -65,7 +65,7 @@ export class AllocationsService { moveStudentToProjectAtPosition(studentId: string, projectId: string, siblingId?: string): void { const allocations = this.getAllocationsWithoutStudent(studentId); const allocation = this.getAllocationForProjectId(projectId); - var positionInAllocation = allocation?.students.indexOf(siblingId) ?? -1; + let positionInAllocation = allocation?.students.indexOf(siblingId) ?? -1; if (allocation && positionInAllocation === -1) { positionInAllocation = allocation.students.length; diff --git a/client/src/app/shared/data/constraints.service.ts b/client/src/app/shared/data/constraints.service.ts index 0fd244e1..74c91c7f 100644 --- a/client/src/app/shared/data/constraints.service.ts +++ b/client/src/app/shared/data/constraints.service.ts @@ -27,7 +27,7 @@ export class ConstraintsService { return this.constraintsSubject$.asObservable(); } - setConstraints(constraints: ConstraintWrapper[], sentWebSocketUpdate: Boolean = true): void { + setConstraints(constraints: ConstraintWrapper[], sentWebSocketUpdate: boolean = true): void { if (!constraints) { constraints = []; } diff --git a/client/src/app/shared/data/locked-students.service.ts b/client/src/app/shared/data/locked-students.service.ts index d3c2b6ea..ee703db8 100644 --- a/client/src/app/shared/data/locked-students.service.ts +++ b/client/src/app/shared/data/locked-students.service.ts @@ -27,11 +27,11 @@ export class LockedStudentsService { } } - setLocksAsArray(mapping: [string, string][], sentWebSocketUpdate: Boolean = true): void { + setLocksAsArray(mapping: [string, string][], sentWebSocketUpdate: boolean = true): void { this.setLocks(new Map(mapping), sentWebSocketUpdate); } - setLocks(mapping: StudentIdToProjectIdMapping, sentWebSocketUpdate: Boolean = true): void { + setLocks(mapping: StudentIdToProjectIdMapping, sentWebSocketUpdate: boolean = true): void { if (!mapping) { mapping = this.newMapping(); } diff --git a/client/src/app/shared/matching/constraints/constraint-builder/constraint-builder.service.ts b/client/src/app/shared/matching/constraints/constraint-builder/constraint-builder.service.ts index aec42efd..12c5b259 100644 --- a/client/src/app/shared/matching/constraints/constraint-builder/constraint-builder.service.ts +++ b/client/src/app/shared/matching/constraints/constraint-builder/constraint-builder.service.ts @@ -35,7 +35,7 @@ export class ConstraintBuilderService { constraintWrappers: ConstraintWrapper[], locks: StudentIdToProjectIdMapping ): string[] { - var constraints: string[] = this.mandatoryConstraintsServce.createConstraints(students, projectIds); + const constraints: string[] = this.mandatoryConstraintsServce.createConstraints(students, projectIds); constraints.push(...this.customConstraintsService.createConstraints(constraintWrappers)); constraints.push(this.costFunctionsService.createCostFunction(students)); constraints.push(...this.lockedConstraintsService.createConstraints(locks)); diff --git a/client/src/app/shared/matching/constraints/constraint-builder/custom-constraints.service.ts b/client/src/app/shared/matching/constraints/constraint-builder/custom-constraints.service.ts index 63cf242f..3958c788 100644 --- a/client/src/app/shared/matching/constraints/constraint-builder/custom-constraints.service.ts +++ b/client/src/app/shared/matching/constraints/constraint-builder/custom-constraints.service.ts @@ -1,7 +1,5 @@ import { Injectable } from '@angular/core'; import { IdMappingService } from '../../../data/id-mapping.service'; -import { Project, Student } from 'src/app/api/models'; -import { StudentIdToProjectIdMapping } from '../../../data/locked-students.service'; import { ConstraintWrapper } from '../constraint'; import { Operator } from '../constraint-utils'; diff --git a/client/src/app/shared/matching/constraints/constraint-builder/locked-constraints.service.ts b/client/src/app/shared/matching/constraints/constraint-builder/locked-constraints.service.ts index 93fa8e8b..45010c5b 100644 --- a/client/src/app/shared/matching/constraints/constraint-builder/locked-constraints.service.ts +++ b/client/src/app/shared/matching/constraints/constraint-builder/locked-constraints.service.ts @@ -1,6 +1,5 @@ import { Injectable } from '@angular/core'; import { IdMappingService } from '../../../data/id-mapping.service'; -import { Project, Student } from 'src/app/api/models'; import { StudentIdToProjectIdMapping } from '../../../data/locked-students.service'; @Injectable({ diff --git a/client/src/app/shared/matching/constraints/constraint-builder/mandatory-contraints.service.ts b/client/src/app/shared/matching/constraints/constraint-builder/mandatory-contraints.service.ts index b7170789..59c2e386 100644 --- a/client/src/app/shared/matching/constraints/constraint-builder/mandatory-contraints.service.ts +++ b/client/src/app/shared/matching/constraints/constraint-builder/mandatory-contraints.service.ts @@ -1,6 +1,6 @@ import { Injectable } from '@angular/core'; import { IdMappingService } from '../../../data/id-mapping.service'; -import { Project, Student } from 'src/app/api/models'; +import { Student } from 'src/app/api/models'; @Injectable({ providedIn: 'root', diff --git a/client/src/app/shared/matching/constraints/constraint-functions/constraint-function.ts b/client/src/app/shared/matching/constraints/constraint-functions/constraint-function.ts index 677043cd..55c7e9c9 100644 --- a/client/src/app/shared/matching/constraints/constraint-functions/constraint-function.ts +++ b/client/src/app/shared/matching/constraints/constraint-functions/constraint-function.ts @@ -1,5 +1,6 @@ import { Skill, Student } from 'src/app/api/models'; import { Operator, OperatorMapping } from '../constraint-utils'; +import { ChartDataFormatter } from 'src/app/components/statistics/charts/chart-data-formatter/chart-data-formatter'; export interface ConstraintFunctionValues { property: SelectData; @@ -13,7 +14,7 @@ export interface SelectData { name: string; //shown in the dropdown id: string; //value to be used in constraint group?: string; //grouping for the dropdown - reference?: any; //reference to the object + reference?: ChartDataFormatter; //reference to the object selected?: boolean; //if the element is selected } diff --git a/client/src/app/shared/matching/constraints/constraint-functions/device-constraint-function.ts b/client/src/app/shared/matching/constraints/constraint-functions/device-constraint-function.ts index 57760640..32bffd08 100644 --- a/client/src/app/shared/matching/constraints/constraint-functions/device-constraint-function.ts +++ b/client/src/app/shared/matching/constraints/constraint-functions/device-constraint-function.ts @@ -1,4 +1,4 @@ -import { ConstraintFunction, SelectData, PropertySelectGroup, ConstraintFunctionValues } from './constraint-function'; +import { ConstraintFunction, SelectData, PropertySelectGroup } from './constraint-function'; import { Device, Skill, Student } from 'src/app/api/models'; import { Operator } from '../constraint-utils'; diff --git a/client/src/app/shared/matching/constraints/constraint-functions/team-size-constraint-function.ts b/client/src/app/shared/matching/constraints/constraint-functions/team-size-constraint-function.ts index 9dde6d85..2cefb411 100644 --- a/client/src/app/shared/matching/constraints/constraint-functions/team-size-constraint-function.ts +++ b/client/src/app/shared/matching/constraints/constraint-functions/team-size-constraint-function.ts @@ -7,7 +7,7 @@ export class TeamSizeConstraintFunction extends ConstraintFunction { super(students, skills, 'Team Size', [Operator.EQUALS]); } - override filterStudentsByConstraintFunction(property: string, operator: Operator, value: string): Student[] { + override filterStudentsByConstraintFunction(): Student[] { return this.students; } @@ -19,7 +19,7 @@ export class TeamSizeConstraintFunction extends ConstraintFunction { return [{ id: 'cf-team-size-default-value', name: 'true' }]; } - override getDescription(property: string, operator: Operator, value: string): string { + override getDescription(): string { return `Team Size`; } } diff --git a/client/src/app/shared/matching/constraints/constraint.ts b/client/src/app/shared/matching/constraints/constraint.ts index 60ee9366..b553fbb7 100644 --- a/client/src/app/shared/matching/constraints/constraint.ts +++ b/client/src/app/shared/matching/constraints/constraint.ts @@ -1,4 +1,3 @@ -import { Student } from 'src/app/api/models'; import { Operator } from './constraint-utils'; export class ConstraintWrapper { diff --git a/client/src/app/shared/models/allocation-data.ts b/client/src/app/shared/models/allocation-data.ts index 1c94c812..e537d41c 100644 --- a/client/src/app/shared/models/allocation-data.ts +++ b/client/src/app/shared/models/allocation-data.ts @@ -4,7 +4,7 @@ import { ConstraintWrapper } from '../matching/constraints/constraint'; export interface ProjectData { project: Project; projectConstraints: ProjectConstraint[]; - fulfillsAllConstraints: Boolean; + fulfillsAllConstraints: boolean; students: Student[]; } diff --git a/client/src/app/shared/models/csvStudent.ts b/client/src/app/shared/models/csvStudent.ts index d1e57043..64b9e844 100644 --- a/client/src/app/shared/models/csvStudent.ts +++ b/client/src/app/shared/models/csvStudent.ts @@ -1,5 +1,3 @@ -import { Gender } from 'src/app/api/models'; - export interface CsvStudent { firstName: string; lastName: string; @@ -12,5 +10,6 @@ export interface CsvStudent { skillLevel: string; // introCourseProficiency nationality: string; + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ [key: string]: any; } diff --git a/client/src/app/shared/models/overlay-data/student-detail-overlay-data.ts b/client/src/app/shared/models/overlay-data/student-detail-overlay-data.ts index 84ff32e4..6f6e6d9e 100644 --- a/client/src/app/shared/models/overlay-data/student-detail-overlay-data.ts +++ b/client/src/app/shared/models/overlay-data/student-detail-overlay-data.ts @@ -2,5 +2,5 @@ import { Student } from 'src/app/api/models'; export interface StudentDetailOverlayData { student: Student; - projectId?: String; + projectId?: string; } diff --git a/client/src/app/shared/network/websocket.service.ts b/client/src/app/shared/network/websocket.service.ts index 258e9cf7..08d58ab7 100644 --- a/client/src/app/shared/network/websocket.service.ts +++ b/client/src/app/shared/network/websocket.service.ts @@ -1,9 +1,8 @@ -import { Injectable, OnDestroy } from '@angular/core'; +import { Injectable } from '@angular/core'; import { CompatClient, Stomp } from '@stomp/stompjs'; import { StompSubscription } from '@stomp/stompjs/src/stomp-subscription'; import { Allocation } from 'src/app/api/models'; import { ConstraintWrapper } from '../matching/constraints/constraint'; -import { environment } from 'src/environments/environment'; import { GLOBALS } from '../utils/constants'; export interface CollaborationData { @@ -22,7 +21,7 @@ export class WebsocketService { constructor() {} - private async connect(): Promise { + private async connect(): Promise { return new Promise((resolve, reject) => { if (this.connection?.connected) { resolve(true); @@ -52,6 +51,7 @@ export class WebsocketService { async subscribe( courseIterationId: string, topic: string, + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ onMessage: (data: any) => void ): Promise { const connected = await this.connect(); diff --git a/client/src/app/shared/pipes/group-by.pipe.ts b/client/src/app/shared/pipes/group-by.pipe.ts index e0b7a9c3..458bdf07 100644 --- a/client/src/app/shared/pipes/group-by.pipe.ts +++ b/client/src/app/shared/pipes/group-by.pipe.ts @@ -5,6 +5,7 @@ import { Pipe, PipeTransform } from '@angular/core'; standalone: true, }) export class GroupByPipe implements PipeTransform { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ transform(value: any[], field: string): any { const groupedObj = value.reduce((prev, cur) => { if (!prev[cur[field]]) { diff --git a/client/src/app/shared/pipes/includes.pipe.ts b/client/src/app/shared/pipes/includes.pipe.ts index 224197c7..5e51ec24 100644 --- a/client/src/app/shared/pipes/includes.pipe.ts +++ b/client/src/app/shared/pipes/includes.pipe.ts @@ -5,6 +5,7 @@ import { Pipe, PipeTransform } from '@angular/core'; standalone: true, }) export class IncludesPipe implements PipeTransform { + /* eslint-disable-next-line @typescript-eslint/no-explicit-any */ transform(values: any[], value: any): boolean { return values.includes(value); } diff --git a/client/src/app/shared/services/csv-parser.service.ts b/client/src/app/shared/services/csv-parser.service.ts index b5f74293..c29df3ac 100644 --- a/client/src/app/shared/services/csv-parser.service.ts +++ b/client/src/app/shared/services/csv-parser.service.ts @@ -12,7 +12,6 @@ import { StudentSkill, } from 'src/app/api/models'; import { CsvStudent } from '../models/csvStudent'; -import { ToastsService } from './toasts.service'; import { v4 as uuidv4 } from 'uuid'; import { EnumService } from '../utils/enum.service'; import * as Papa from 'papaparse'; @@ -60,7 +59,7 @@ export class CsvParserService { } private findAttributes(student: CsvStudent, value: string): Attribute[] { - var regex = new RegExp(`${value}\\[(.*)\\]`); + const regex = new RegExp(`${value}\\[(.*)\\]`); const attributes = Object.keys(student); const matchingAttributes = attributes .map(attribute => { @@ -94,7 +93,7 @@ export class CsvParserService { const skillAttributes = this.findAttributes(referenceStudent, 'skill'); const projectPreferenceAttributes = this.findAttributes(referenceStudent, 'projectPreference'); - var students: Student[] = csvStudents.map(student => { + let students: Student[] = csvStudents.map(student => { if (!student.id) { return null; } diff --git a/client/src/app/shared/services/prompt.service.ts b/client/src/app/shared/services/prompt.service.ts index 33cb86bd..5e0151d0 100644 --- a/client/src/app/shared/services/prompt.service.ts +++ b/client/src/app/shared/services/prompt.service.ts @@ -1,12 +1,12 @@ import { Injectable } from '@angular/core'; import { ApiService } from '../../api/api.service'; import { ApiFnRequired } from '../../api/api.service'; -import { teaseCourseIterationsCourseIterationIdProjectsGet as getProjects } from '../../api/fn/projects/tease-course-iterations-course-iteration-id-projects-get'; -import { teaseCourseIterationsCourseIterationIdSkillsGet as getSkills } from '../../api/fn/skills/tease-course-iterations-course-iteration-id-skills-get'; -import { teaseCourseIterationsCourseIterationIdStudentsGet as getStudents } from '../../api/fn/students/tease-course-iterations-course-iteration-id-students-get'; -import { teaseCourseIterationsCourseIterationIdAllocationsGet as getAllocations } from '../../api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-get'; -import { teaseCourseIterationsCourseIterationIdAllocationsPost as postAllocations } from 'src/app/api/fn/allocations/tease-course-iterations-course-iteration-id-allocations-post'; -import { courseIterationsGet as getCourseIterations } from 'src/app/api/fn/course-iterations/course-iterations-get'; +import { teaseCoursePhaseCourseIterationIdProjectsGet as getProjects } from '../../api/fn/projects/tease-course-phase-course-iteration-id-projects-get'; +import { teaseCoursePhaseCourseIterationIdSkillsGet as getSkills } from '../../api/fn/skills/tease-course-phase-course-iteration-id-skills-get'; +import { teaseCoursePhaseCourseIterationIdStudentsGet as getStudents } from '../../api/fn/students/tease-course-phase-course-iteration-id-students-get'; +import { teaseCoursePhaseCourseIterationIdAllocationsGet as getAllocations } from '../../api/fn/allocations/tease-course-phase-course-iteration-id-allocations-get'; +import { teaseCoursePhaseCourseIterationIdAllocationsPost as postAllocations } from 'src/app/api/fn/allocations/tease-course-phase-course-iteration-id-allocations-post'; +import { teaseCoursePhasesGet as getCourseIterations } from 'src/app/api/fn/course-iterations/tease-course-phases-get'; import { Observable, lastValueFrom } from 'rxjs'; import { Skill, Student, Project, Allocation, CourseIteration } from 'src/app/api/models'; import { StrictHttpResponse } from 'src/app/api/strict-http-response'; diff --git a/client/src/app/shared/services/resize.service.ts b/client/src/app/shared/services/resize.service.ts new file mode 100644 index 00000000..d32c9a9f --- /dev/null +++ b/client/src/app/shared/services/resize.service.ts @@ -0,0 +1,37 @@ +import { Injectable } from '@angular/core'; + +@Injectable({ + providedIn: 'root', +}) +export class ResizeService { + private startY = 0; + private startHeight = 256; + private currentHeight = 256; + + private onMouseMoveHandler = (event: MouseEvent) => this.onMouseMove(event); + private onMouseUpHandler = () => this.onMouseUp(); + + startResize(event: MouseEvent): void { + this.startY = event.clientY; + this.startHeight = this.currentHeight; + + document.addEventListener('mousemove', this.onMouseMoveHandler); + document.addEventListener('mouseup', this.onMouseUpHandler); + event.preventDefault(); + } + + private onMouseMove(event: MouseEvent): void { + const deltaY = this.startY - event.clientY; + this.currentHeight = Math.max(256, this.startHeight + deltaY); + document.documentElement.style.setProperty('--utility-height', `${this.currentHeight}px`); + } + + private onMouseUp(): void { + document.removeEventListener('mousemove', this.onMouseMoveHandler); + document.removeEventListener('mouseup', this.onMouseUpHandler); + } + + cleanup(): void { + this.onMouseUp(); + } +} diff --git a/server/pom.xml b/server/pom.xml index 2db16bf2..7f600c4b 100644 --- a/server/pom.xml +++ b/server/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 3.3.0 + 3.5.6 de.tum.cit.ase @@ -15,6 +15,8 @@ WebSockets for TEASE 17 + 1.5.19 + 6.2.12 @@ -22,6 +24,17 @@ spring-boot-starter-websocket + + ch.qos.logback + logback-core + ${logback.version} + + + + org.springframework + spring-websocket + ${spring.version} + org.springframework.boot spring-boot-starter-test diff --git a/server/src/main/java/de/tum/cit/ase/tease/config/WebSocketConfig.java b/server/src/main/java/de/tum/cit/ase/tease/config/WebSocketConfig.java index 4cbc0985..7923fd88 100644 --- a/server/src/main/java/de/tum/cit/ase/tease/config/WebSocketConfig.java +++ b/server/src/main/java/de/tum/cit/ase/tease/config/WebSocketConfig.java @@ -18,6 +18,6 @@ public void configureMessageBroker(MessageBrokerRegistry config) { @Override public void registerStompEndpoints(StompEndpointRegistry registry) { - registry.addEndpoint("/ws").setAllowedOriginPatterns("*.ase.cit.tum.de").setAllowedOrigins("http://localhost"); + registry.addEndpoint("/ws").setAllowedOriginPatterns("*.aet.cit.tum.de").setAllowedOrigins("http://localhost"); } } \ No newline at end of file