# IAA Hausarbeit
## Allgemeines
Die API-Definition wurde mithilfe von Swagger erarbeitet. Die aktuelle Version der API-Definition ist im abgegebenen Projekt, unter https://app.swaggerhub.com/apis/johannes.ulrich/IAA-Doodle/1.0.2 oder im GitLab der NORDAKADEMIE unter https://gitlab2.nordakademie.de/PhilippBll-A18/i148-2021-apsel-ulrich-heinbach-boell/-/blob/master/swagger/swagger.yaml zu finden.
## UML Diagram
Das UML Diagram der Anwendung "Terminumfrage" mit den persistierten Klassen sowie einer transienten Modellklasse.

## Dialogfluss-Modell
Das Dialogmodell der Anwendung "Terminumfrage" mit den Übergängen zwischen den Ansichten. Die Ansichten, welche mit einem \* makiert sind, werden im Kapitel Mockups visuell dargestellt.

### Dashboard
Das Modell enthält zwei Subprozesse. Die Ansicht "Dashboard" ermöglicht das Navigieren zwischen verschiedenen Reitern in der Ansicht.

### Umfrage anzeigen
Die Ansicht einer Umfrage wird je nach Zustand der Umfrage zum Ansehen, Teilnehmen, Bearbeiten und Löschen der Umfrage verwendet. Der jeweilige Zustand ist wie folgt bedingt.

### Mockups
LoginPage

<br>
RegisterPage

<br>
Dashboard/All Surveys

<br>
Dashboard/My Appointments

<br>
Survey/edit

<br>
Survey/respond

## Zusätlich genutzte Technologien
### Allgemein
- Swagger API-Definition
- Bearer Authentication (JWT)
### Backend
- Spring Boot
- JPA Repositories
- Spring Security
- Datenstrukturen von Google Guava & Apache Commons Lang3
### Frontend
- Routing
- Sub Modules (+lazy loading)
- Reactive Forms
- Form validation
- Einbindung 3rd Party Components (ng-bootstrap, Angular Material)
## Testfälle
### Registrierung
| Nr | Vorbedingungen | Aktionen | Erwarteter Endzustand | Funktionalität |
| --- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------- |
| 1 | Der Nutzer ist nicht angemeldet. | Anwendung über http://localhost:4200 aufrufen. Mit einem Klick auf den Button "Register" den Registrierungsdialog öffnen. Keine Eingabe von Daten vornehmen. | Der Button "Register" bleibt ausgegraut und löst bei einem Klick keine Funktion aus. | Registrierung |
| 2 | Der Nutzer ist nicht angemeldet. | Den Registrierungsdialog öffnen und in das erste Passwordfeld einen beliebigen Text von weniger als acht Zeichen eingeben. In das zweite Passwordfeld einen anderen beliebigen Text (unterschiedlich zum ersten Text) eingeben. | Der Button "Register" bleibt ausgegraut. Unter dem ersten Passwordfeld erscheint die Meldung "Password needs to be at least 8 characters long". Unter dem zweiten Feld steht die Meldung "Passwords don't match" | Registrierung |
| 3 | Der Nutzer ist nicht angemeldet. | Den Registrierungsdialog öffnen und ein beliebiges Passwort von weniger als 8 Zeichen Länge in beiden Passwordfeldern eintragen. | Der Button "Register" bleibt ausgegraut. Unter dem ersten Passwordfeld erscheint die Meldung "Password needs to be at least 8 characters long". Unter dem zweiten Feld erscheint jedoch keine Meldung | Registrierung
| 4 | Der Nutzer ist nicht angemeldet. | Den Registrierungsdialog öffnen und ein beliebiges Passwort von mindestens 8 Zeichen Länge in das erste Passwordfeld eintragen. | Der Button "Register" bleibt ausgegraut. Unter dem zweiten Passwordfeld erscheint die Meldung "Passwords don't match". Unter dem ersten Feld erscheint jedoch keine Meldung | Registrierung |
| 5 | Der Nutzer ist nicht angemeldet. | Den Registrierungsdialog öffnen und eine beliebige Anzahl Felder ausfüllen, hierbei jedoch mindestens ein Feld leer lassen. | Der Button "Register" bleibt ausgegraut. Ggf. werden Meldungen unter den Passwortfeldern angezeigt. | Registrierung
| 6 | Der Nutzer ist nicht angemeldet. | Den Registrierungsdialog öffnen und in das Feld Email eine invalide E-Mail Adresse, z.B. "AAAAAA" eingeben. | Der Button "Register" bleibt ausgegraut. Unter dem Feld Email wird die Fehlermeldung "Please provide a valid Email-Address" angezeigt. | Registrierung |
| 6 | Der Nutzer ist nicht angemeldet. | Den Registrierungsdialog öffnen und alle Felder ausfüllen. Beim Ausfüllen darauf achten, dass beide Passwortfelder mit dem gleichen, mindestens acht Zeichen langen Text gefüllt sind. Im Feld Email eine valide Adresse wie "max@mustermann.de" nutzen | Der Button "Register" wird in satter Farbe angezeigt. Es werden keine Fehlermeldungen unter Feldern angezeigt. Nach einem Klick auf "Register" wird der Nutzer auf das Dashboard weitergeleitet. | Registrierung |
### Authentifizierung
| Nr | Vorbedingungen | Aktionen | Erwarteter Endzustand | Funktionalität |
| --- | ---------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | ----------------- |
| 1 | Initialer Stand der Datenbank, Nicht eingeloggt | Anwendung über http://localhost:4200 aufrufen und in das Login-Formular beliebige Daten eingeben. Anschließend auf "Login" klicken | Der Login schlägt fehl | Login |
| 2 | Es existiert der Nutzer mit der E-Mail Adresse admin@nordakademie.de und dem Passwort 12345678, Nicht eingeloggt | Anwendung über http://localhost:4200 aufrufen und in das Login-Formular werden die genannten Zugangsdaten eingetragen. Anschließend auf "Login" klicken | Der Nutzer ist eingeloggt und wird zum Dashboard weitergeleitet | Login |
| 3 | User ist nicht eingeloggt | Anwendung über http://localhost:4200 aufrufen. Nur ein Eingabefeld asfüllen. Versuchen auf "Login" zu klicken. | Der Login Button ist disabled und es erfolgt keine Aktion auf den Klick. | Login |
| 4 | User ist nicht eingeloggt | Anwendung über http://localhost:4200 aufrufen | Der User wird auf die Login Page geleitet | Login |
| 5 | User ist nicht eingeloggt | Anwendung über http://localhost:4200 aufrufen. Auf das Anwendungslogo in der Menüleiste klicken | Der Nutzer bleibt auf Login Page |Authentifizierung|
| 6 | User ist eingeloggt, auf Dashboard | Seite neu laden | User bleibt weiterhin eingeloggt (wird nicht zu Login geleitet) | Authentifizierung |
| 7 | User ist eingeloggt, auf Dashboard | 10 Stunden warten, Seite neu laden | User wird ausgeloggt und auf Login page geleitet | Authentifizierung |
### Dashboard
| Nr | Vorbedingungen | Aktionen | Erwarteter Endzustand | Funktionalität |
| --- | ---------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------ | -------------- |
| 1 | Der Nutzer ist angemeldet. | Anwendung über http://localhost:4200 aufrufen. | Das Dashboard öffnet sich und zeigt die Übersicht über die vorhandenen Umfragen. | Dashboard |
| 2 | Es existiert mindestens eine durch den Nutzer erstellte Umfrage. | Aufruf des Dashboards und Auswahl der Tabs "All Surveys" und "Own Surveys" in der Tabelle. | Die Umfrage wird sowohl unter "All Surveys" als auch unter "Own Surveys" angezeigt. | Dashboard |
| 3 | Es existiert mindestens eine Umfrage, deren Autor nicht der angemeldete Nutzer ist. Der angemeldete Nutzer hat bei dieser Umfrage abgestimmt. | Aufruf des Dashboards und Auswahl der Tabs "All Surveys" und "Participated Surveys" in der Tabelle. | Die Umfrage wird unter "All Surveys" und "Participated Surveys" angezeigt. | Dashboard |
| 4 | Es existiert mindestens eine Umfrage, deren Autor nicht der angemeldete Nutzer ist. Der angemeldete Nutzer hat bei dieser Umfrage nicht abgestimmt. | Aufruf des Dashboards und Auswahl der Tabs "All Surveys" und "Unparticipated Surveys" in der Tabelle. | Die Umfrage wird unter "All Surveys" und "Unparticipated Surveys" angezeigt. | Dashboard |
| 5 | Der Nutzer ist angemeldet. | Aufruf des Dahsboards und Klick auf den Button "Create new Survey" (Unten links). | Der Dialog "Create survey" wird angezeigt. | Dashboard |
| 6 | Der Nutzer ist angemeldet. | Aufruf des Dahsboards und Klick auf den Logout-Button (Symbol oben rechts). | Der Dialog "Login" wird angezeigt. Eine erneute Anmeldung ist erforderlich. | Dashboard |
| 7 | Der Nutzer ist angemeldet und es existiert mindestens eine Umfrage unter "All Surveys". | Aufruf des Dahsboards und Klick auf den Eintrag der Umfrage in der Tabelle. | Der Nutzer wird nach dem Klick auf den entsprechenden Dialog zur Umfrage weitergeleitet (Antwort anlegen oder Umfrage bearbeiten). | Dashboard |
| 8 | Der Nutzer hat eine Umfrage mit bestimmten Daten erstellt. | Aufruf des Dahsboards und Auswahl des Tabs "Own Surveys" in der Tabelle. | Die Tabelle enthält die erstellte Umfrage. Die angezeigten Daten entsprechen den bei der Anlage gewählten. | Dashboard |
### Survey Formular
Für die folgenden Tests wird davon ausgegangen, dass der User sich erfolgreich authentifiziert hat.
| Nr | Vorbedingungen | Aktionen | Erwarteter Endzustand | Funktionalität |
| --- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| 1 | Dashboard geöffnet| Auf Button "Create own survey" klicken| Survey Formular wird angezeigt, Formularfelder sind leer, Appointment Liste hat keine Einträge| Survey Erstellen |
| 2 | Survey Formular über "Create own Survey geöffnet" | Klick auf "Save Survey" Button| Formular lässt sich nicht abschicken, Button ist disabled| Survey Erstellen |
| 3 | Survey Formular über "Create own Survey geöffnet" | Title und Description ausfüllen, Klick auf "Save Survey" Button| Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled| Survey Erstellen |
| 4 | Survey Formular über “Create own Survey geöffnet” | Title und Description ausfüllen, auf "Add Appointment" Button klicken| Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled| Survey Erstellen |
| 5 | Survey Formular über “Create own Survey geöffnet” | Title und Description ausfüllen, auf "Add Appointment" Button klicken, Datum oder Uhrzeit auswählen | Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled| Survey Erstellen |
| 6 | Survey Formular über “Create own Survey geöffnet” | Title und Description ausfüllen, auf "Add Appointment" Button klicken, Datum und Uhrzeit auswählen | Formular lässt sich abschicken, nach Klick auf "Save Survey" wird der Nutzer zum Dashboard geleitet und die neue Survey dort angezeigt | Survey Erstellen |
| 8 | Survey Formular über “Create own Survey geöffnet” | Title und Description ausfüllen, auf "Add Appointment" Button klicken, Datum und Uhrzeit auswählen, ein weiteres Mal auf "Add Appointment" Button klicken| Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled | Survey Erstellen |
| 8 | Survey Formular über “Create own Survey geöffnet” | Title und Description ausfüllen, auf "Add Appointment" Button klicken, Datum und Uhrzeit auswählen, ein weiteres Mal auf "Add Appointment" Button klicken und Datum und Uhrzeit auswählen| Formular lässt sich abschicken, nach Klick auf "Save Survey" wird der Nutzer zum Dashboard geleitet und die neue Survey dort angezeigt | Survey Erstellen |
| 9 | Survey Formular über “Create own Survey geöffnet” | Title und Description ausfüllen, auf "Add Appointment" Button klicken, Datum und Uhrzeit auswählen, ein weiteres Mal auf "Add Appointment" Button klicken und Datum oder Uhrzeit auswählen, unvollständiges Appointment über reton "X" Button löschen| Formular lässt sich abschicken, nach Klick auf "Save Survey" wird der Nutzer zum Dashboard geleitet und die neue Survey dort angezeigt | Survey Erstellen |
| 10 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken | Formular zeigt Daten der Survey an; Title, Description und Daten der Appointments lassen sich verändern| Survey Bearbeiten |
| 11 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, auf "Show Responses" Button klicken | Es erscheint eine Tabelle, in der der eigene User und alle Appointments enthalten sind. Der eigene User ist bei allen Appointments als "OK" (Haken) angezeigt und das Feld ist grün hinterlegt. Der "Show Responses" Button trägt nun die Aufschrift "Hide Responses"| Survey Bearbeiten |
| 12 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, ein Datenfeld leeren | Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled | Survey Bearbeiten |
| 13 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, über "Add Appointment" button Appointment hinzufügen, Felder nicht ausfüllen | Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled | Survey Bearbeiten |
| 14 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, über "Add Appointment" button Appointment hinzufügen, Appointment über roten 'X' Button | Nach Klick auf "Save Survey" wird der Nutzer zum Dashboard geleitet und die Survey dort angezeigt | Survey Bearbeiten |
| 15 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, alle Appointments über roten 'X' Button entfernen | Formular lässt sich nicht abschicken, "Save Survey" Button ist disabled | Survey Bearbeiten |
| 16 | Fremde Survey mit dem Status Open vorhanden, bisher nicht vom eigenen User beantwortet | Entsprechende Survey im Dashboard anklicken | Title, Description, und appointments werden readonly angezeigt. "Okay" und "Not Okay" buttons werden als outlined Buttons ohne Farbfüllung angezeigt | Survey Beantworten |
| 17 | Fremde Survey mit dem Status Open vorhanden, bisher nicht vom eigenen User beantwortet | Entsprechende Survey im Dashboard anklicken | Title, Description, und appointments werden readonly angezeigt. "Okay" und "Not Okay" buttons werden als outlined Buttons ohne Farbfüllung angezeigt | Survey Beantworten |
| 18 | Fremde Survey mit dem Status Open vorhanden, bisher nicht vom eigenen User beantwortet | Entsprechende Survey im Dashboard anklicken, auf "Show Responses" Button klicken | Der eigene Username wird in Tabelle nicht angezeigt | Survey Beantworten |
| 19 | Fremde Survey mit dem Status Open vorhanden, bisher nicht vom eigenen User beantwortet | Entsprechende Survey im Dashboard anklicken, bei einem beliebigen Appointment auf "OK" klicken, auf "Show Responses" Button klicken | Der eigene Username wird in Tabelle angezeigt, "OK" status wird für korrektes Appointment angezeigt und farblich hinterlegt. Nicht beantwortete Appointments werden als Leeres Tabellenfeld, weiß hinterlegt angezeigt | Survey Beantworten |
| 20 | Fremde Survey mit dem Status Open vorhanden, bisher nicht vom eigenen User beantwortet | Entsprechende Survey im Dashboard anklicken, bei einem beliebigen Appointment auf "OK" klicken, auf "Back to dashboard" Button klicken, die Survey erneut öffnen | Es ist weiterhin "OK" beim korrekten Appointment hinterlegt | Survey Beantworten |
| 21 | Fremde Survey mit dem Status Open vorhanden, bereits vom eigenen User beantwortet | Entsprechende Survey im Dashboard anklicken, bei einem beliebigen, beantworteten Appointment Status verändern, auf "Back to dashboard" Button klicken, die Survey erneut öffnen | Es ist nun der geänderte Status beim korrekten Appointment hinterlegt | Survey Beantworten |
| 22 | Eigene Survey mit dem Status Open vorhanden, bereits von fremden Usern beantwortet | Entsprechende Survey im Dashboard anklicken, auf "Show Responses" Button klicken | Es werden die Antworten von anderen Usern angezeigt, sowie "OK" bei allen Appointments für den eigenen User, an unteren Ende der Tabelle wird die Summer der "OK" korrekt angezeigt, eigener User mitgezählt | Survey Bearbeiten |
| 23 | Eigene Survey mit dem Status Open vorhanden, bereits von fremden Usern beantwortet | Entsprechende Survey im Dashboard anklicken. Title oder Description ändern, über "Save Survey" speichern | Es bleiben alle Responses von allen Usern erhalten | Survey Bearbeiten |
| 24 | Eigene Survey mit dem Status Open vorhanden, bereits von fremden Usern beantwortet | Entsprechende Survey im Dashboard anklicken, bei einem beliebigen Appointment Datum ändern, über "Save Survey" speichern | Alle Responses von fremden Usern bei dem geänderten Appointment werden gelöscht | Survey Bearbeiten |
| 25 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, auf "Delete Survey" Button klicken | Es erscheint eine Abfrage, ob die Survey wirklich gelöscht werden soll | Survey Löschen |
| 26 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, auf "Delete Survey" Button klicken. Auf "Abort" Button, das Kreuz oder Bereich außerhalb des Modals klicken | Modal wird geschlossen. Survey wurde nicht gelöscht oder verändert | Survey Löschen |
| 27 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, auf "Delete Survey" Button klicken, auf "Delete" Button klicken | User wird auf Dashboard weitergeleitet, Survey wird dort nicht mehr angezeigt | Survey Löschen |
| 28 | Eigene Survey mit dem Status Open vorhanden | Entsprechende Survey im Dashboard anklicken, bei einem beliebeigen Appointment auf "Select" Button klicken | User wird auf Dashboard weitergeleitet, Survey wird dort unter "Show Closed" angezeigt | Appointment als final festlegen |
| 29 | Survey mit dem Status Closed vorhanden | Entsprechende Survey im Dashboard anklicken |Alle Felder werden als Readonlny angezeigt, Ausgewähltes Appointment wird in der Liste der Appointments und in der Liste der Responses grün hinterlegt. Ausschließlich "Show Responses" und "Back to dashboard" Buttons werden angezeigt | Geschlossene Survey anzeigen |
### Notifications
| Nr | Vorbedingungen | Aktionen | Erwarteter Endzustand | Funktionalität |
| --- | ------------------------------------------------- | --------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------------------------------------- | ---------------- |
| 1 | Open Survey von User 1. User 2 hat responses zur Survey abgegeben | User 1 löscht ein Appointment, zu dem User 2 eine Response abgegeben hat |User 2 bekommt beim nächsten Login oder nach maximal 50 Sekunden in der Anwendung eine Notification mit dem Inhalt "At least one of your responses for the survey became invalid, since the survey has been modified" | Notification |
| 2 | Open Survey von User 1. User 2 hat responses zur Survey abgegeben | User 1 löscht die Survey |User 2 bekommt beim nächsten Login oder nach maximal 50 Sekunden in der Anwendung eine Notification mit dem Inhalt "At least one of your responses for the survey became invalid, since the survey has been deleted" | Notification |
# Protokoll über die geleistete Arbeit der einzelnen Gruppenmitglieder:
## Christian Apsel
| Datum | Dauer | Aktivitäten |
|-------|--------|-------------|
|03.11.2021|3 Std|Arbeit an den Mockups|
|04.11.2021|2 Std|Arbeit an den Mockups|
|05.11.2021|0.5 Std|Einrichten der Projektumgebungen|
|08.11.2021|4 Std|Arbeit am Dashboard + Dashboardcomponent|
|09.11.2021|1 Std|Fehlerbehebung Dashboard|
|14.11.2021|3 Std|Summary-List-component|
|17.11.2021|4 Std|Summary-List-component|
|18.11.2021|4 Std|Notification|
|20.11.2021|6 Std|Debug Summary-List + allgemeine fehlerbehebung|
|21.11.2021|9 Std|allgemeine fehlerbehebung|
|22.11.2021|14 Std|allgemeine fehlerbehebung|
|**SUMME** |50.5 Std|
## Johannes Ulrich
| Datum | Dauer | Aktivitäten |
| ---------- | --------- | --------------------------------------------------------------- |
| 28.10.2021 | 2 Std. | Kick-Off Meeting |
| 01.11.2021 | 5 Std. | Projekt aufsetzen, Klassenmodell, API-Definition |
| 02.11.2021 | 4 Std. | API-Definition, Einrichtung Frontend-Struktur |
| 03.11.2021 | 0,5 Std. | Absprache Mockups |
| 04.11.2021 | 2,5 Std. | Impl. Api, Global Style, Absprache Mockups |
| 05.11.2021 | 5 Std. | Frontend Auth, Absprache Mockups |
| 06.11.2021 | 1 Std. | Added Docker deployment |
| 08.11.2021 | 7 Std. | Frontend Survey Form, Absprachen Backend, Kubernetes Deployment |
| 09.11.2021 | 4 Std. | Edit and view survey, Code Review |
| 10.11.2021 | 1 Std. | Update API-Definition, Respond survey |
| 12.11.2021 | 2,5 Std. | Maven Projekt, Absprachen Frontend/Backend |
| 16.11.2021 | 2 Std. | Absprachen Frontend/Backend, UI Verbesserungen |
| 17.11.2021 | 4 Std. | Frontend respond, Absprachen Frontend/Backend |
| 18.11.2021 | 1 Std. | Detailabstimmung API |
| 19.11.2021 | 5 Std. | Tests Frontend-Backend |
| 20.11.2021 | 3 Std. | Result Summary |
| 21.11.2021 | 8 Std. | Frontend allgemein |
| 22.11.2021 | 12 Std. | Bugfixing, UI Verbesserungen, DV-Konzept |
| **Summe** | 69,5 Std. | |
## Lennart Heinbach
| Datum | Dauer | Aktivitäten |
|-------|--------|-------------|
|28.10.2021|2 Std.|Kickoff und erste Konzeption|
|01.11.2021|5 Std.|Aufsetzen des Repositories, Datenmodell|
|02.11.2021|4 Std.|Swagger API Entwicklung|
|08.11.2021|1 Std.|Backend aufsetzen|
|13.11.2021|4 Std.|Swagger API Import|
|14.11.2021|4 Std.|Entwicklung Backend Datenmodell|
|16.11.2021|2 Std.|Besprechung Frontend/Backend, Konzeption|
|17.11.2021|3 Std.|Absprachen und Entwicklung Backend Services|
|18.11.2021|7 Std.|Absprachen und Entwicklung Backend Services|
|19.11.2021|8 Std.|Test & Entwicklung Backend API Controller, Services|
|20.11.2021|3 Std.|Refactoring API Controller, Erweiterung Services|
|21.11.2021|10 Std.|Pair Programming API Controller, Services|
|22.11.201|12 Std.|Pair Programming, Bugfixes, Dokumentation|
|**Summe**|65 Std.||
## Philipp Böll
| Datum | Dauer | Aktivitäten |
|-------|-------|-------------|
|28.10.2021|2 Std.|Kick-Off Meeting
|01.11.2021|5 Std.|Projekt aufsetzen, Einrichtung Frontend-Struktur|
|02.11.2021|4 Std.|API-Definition|
|08.11.2021|1,5 Std.|Spring aufsetzen|
|11.11.2021|1 Std.|Überarbeitung Projektstruktur|
|13.11.2021|4 Std.|REST API generieren|
|14.11.2021|4 Std.|Model + Repositories anlegen|
|15.11.2021|4 Std.|Persistenz konfiguriert|
|16.11.2021|6 Std.|Internes Meeting, DTO + DB Model bearbeitet|
|17.11.2021|6 Std.|DB Model + Repositories bearbeitet|
|18.11.2021|4 Std.|Absprachen Backend Services + Notifications|
|19.11.2021|6 Std.|Refactoring API + DTO Model|
|20.11.2021|4 Std.|Response Service validation|
|21.11.2021|8 Std.|Survey Service validation + Bugfixing Backend|
|22.11.2021|12 Std.|Bugfixing Backend + Exception Handling + DV-Konzept|
|**SUMME**|71,5 Std.||