Sie sind auf Seite 1von 7

App zur Registrierung von Studierenden für Projekte

implementieren alle untenstehenden Funktionalitäten und CSV-Export für die Teams.

Der Ablauf:

1. Betreuer legen über die App Projekte an.

2. Studierendenteams registrieren sich über die App und geben dabei ihre Kontaktdaten und eine
geordnete Liste der Projekte in der Reihenfolge der gewünschten Bearbeitung an (Lieblingsprojekt -->
Listenplatz 1, zweitliebstes Projekt --> Listenplatz 2, etc.).

3. Betreuer verwalten die Registrierungen (Anzeigen, Löschen, Update)

4. Betreuer lassen über das UI aus den Registrierungen automatisch den Projekten zugewiesene Teams
generieren (POST /team-allocation, siehe unten).

5. Betreuer verwalten die neu erstellten Teams (Anzeigen, Löschen, Update)

6. Betreuer exportieren die Teams als CSV-Datei

Berücksichtigen Sie für die Entwicklung untenstehende Anweisungen. Sie müssen nur die darin explizit
beschriebene Funktionalität entwickeln.

System Context Diagram

Domain Model
Zu implementierende REST-Ressourcen
Die folgenden REST-Ressourcen müssen in der Spring Boot API implementiert werden. Dabei ist jeweils
die JSONResponse (GET) bzw. das JSON-Request (POST, PUT) angegeben.

Es muss für diese Abgabe keine Persistenz in einer Datenbank implementiert werden. Es reichen Java-
Collections, die für die Laufzeit der API die Daten vorhalten. Ebenfalls müssen keine Authentifizierung
und Autorisierung implementiert werden.

Projects
Registrations

POST /registrations

Die folgenden Validierungen sollen durchgeführt werden:

• Mindestens ein/e Student/in:

- Alle unteren Attribute der Studierenden existieren und sind nicht leer

- E-Mail-Adresse ist valide

- Ilias-Name enthält keine Leerzeichen und beginnt mit einem Großbuchstaben

- E-Mail-Adresse und Ilias-Name dürfen in keiner anderen Registrierung existieren

• Alle existierenden Projekt-IDs müssen genau einmal vorkommen


Teams
POST /team-allocation

Umwandlung der Registrierungen in Teams: Für jede Registrierung wird auf Basis eines selbst
bestimmten Algorithmus ein Team erstellt, das genau einem Projekt zugewiesen ist. Designen Sie dafür
einen Algorithmus, von dem Sie denken, dass ihn die Mehrheit der Studenten als fair betrachten
würden. Er darf alle Daten der Registrierungen verwenden (z.B. preferredProjectIds oder created) und
zufällige Elemente enthalten (z.B. random selection). Allerdings müssen die Teams gleichmäßig auf die
existierenden Projekte verteilt werden, d.h. ein Projekt kann maximal ein Team mehr haben als ein
anderes.

Request Body hängt von den Konfigurationsmöglichkeiten des gewählten Algorithmus ab (im
einfachsten Fall ist kein Request Body notwendig).

PUT /teams/$id
GET /csv-downloads/teams

Gibt eine CSV-Datei mit folgender Struktur zurück:

Zu implementierende Views
Die folgenden Views sollen im Vue.js-Frontend implementiert werden.

View zur Verwaltung von Projekten

Für alle REST-Ressourcen zu Projekten (/projects, siehe oben) soll es entsprechende View-Elemente
geben. Die genaue Anzahl der Views hierfür wird nicht vorgegeben. Es müssen nur alle REST-
Ressourcen gut nutzbar sein. Diese Views werden nur von Administratoren genutzt.

Team Registration

In dieser View soll sich ein Team für ein Projekt registrieren können (POST /registrations). Dabei
können für eine beliebige Anzahl an Studierenden die notwendigen Daten erhoben werden. Zusätzlich
muss man über ein priorisierbares Auswahlelement die Wunschprojekte angeben. Dieses
Auswahlelement soll dynamisch vom Server befüllt werden (GET /projects). Diese View wird nur von
Studierenden genutzt.

View zur Verwaltung von Registrierungen

Für alle REST-Ressourcen zu Registrierungen (/registrations, siehe oben, mit Ausnahme von POST) soll
es entsprechende View-Elemente geben. Die genaue Anzahl der Views hierfür wird nicht vorgegeben.
Es müssen nur alle REST-Ressourcen gut nutzbar sein. Diese Views werden nur von Administratoren
genutzt.

View zur Verwaltung von Teams


Für alle REST-Ressourcen zu Teams (/teams, /team-allocation und /csv-downloads/teams, siehe oben)
soll es entsprechende View-Elemente geben. Die genaue Anzahl der Views hierfür wird nicht
vorgegeben. Es müssen nur alle REST-Ressourcen gut nutzbar sein. Diese Views werden nur von
Administratoren genutzt.

Tipps zum CSV-Export

- Auf der Serverseite müssen Sie die Java Collection in einen CSV String konvertieren. Dafür gibt
es hilfreiche Libraries, z.B. Apache Commons CSV. Zusätzlich müssen Sie bei der Response den
Content Type ändern, also anstatt application/json muss application/csv verwendet werden
(siehe z.B. https://bezkoder.com/spring-boot-download-csv-file).
- Auf der Clientseite müssen Sie den Download und die Speicherung der Datei initiieren. Auch
dafür gibt es Libraries, die die Response der API über den Browser speichern können, z.B.
FileSaver.js.
- In beiden Fällen dürfen Sie auch andere Libraries verwenden.

Wichtig für den Auftrag:

Die Funktionalität der API ist SEHR wichtig. Es wird folgendes beachtet:
API hat alle geforderten Ressourcen (URLs plus Request und Response Bodies) mit korrekter
Funktionalität

Die Funktionalität des Frontend ist SEHR wichtig. Es wird folgendes beachtet:
Frontend hat alle geforderten Views / View-Elemente mit korrekter Funktionalität

Design Qualität ist wichtig. Es wird folgendes beachtet:


Sinnvolle Package-Struktur (z.B. package by layer oder feature) --> Inhalt der Packages passt
zusammen, sinnvolle Abstraktion und Auslagerung von Domain Logic (z.B. Vermeidung von
Datenhaltung oder Domain Logic direkt in Controllern), nicht zu große / komplexe Klassen, sinnvolle
Best Practices für REST APIs (korrekte HTTP Status Codes, Rückgabe einer Message oder Domain Entity
für POST, PUT, und DELETE)

CodeQualität ist wichtig. Es wird folgendes beachtet:


Code ist konsistent formatiert und hinreichend kommentiert, kein auskommentierter Code, sinnvoll
benannte Variablen und Methoden, nicht zu komplexe / lange Methoden (z.B. zu viele Parameter oder
zu viel Verantwortlichkeit)

Usability ist wichtig. Es wird folgendes beachtet:


Fehlerfälle werden abgefangen, UI ist sinnvoll getrennt in die View für Studierende und die Views für
Betreuer, UI ist verständlich und stellt notwendige Informationen effizient bereit (z.B. wenig Klicks
notwendig), Systemrückmeldungen sind vorhanden, Terminologie, Farben, Layout, usw. sind
konsistent