Übung »REST-API für das "Internship Management System" implementieren«

In dieser Übung geht es darum, ein REST-API mit Hilfe von Spring Boot umzusetzen.

Dauer
Ca. 360 min
Video(s) zu der Übung (bitte vorher anschauen)

Inhalt

Worum geht es?

Im Rahmen eines Campus-Management-Systems soll an der TH Köln auch ein Internship Management System (IMS) (eine Börse für Betriebspraktika bei Firmen) aufgebaut werden. Firmen bieten solche Praktika an, die dann von einer/m Student/in ausgefüllt werden können.

Studierende müssen sich per Anwesenheitsnachweis (AttendanceCheck) die Tage bestätigen lassen, die sie wirklich bei der Firma waren (bei weniger als 60% Anwesenheit zählt das Praktikum nicht). Der Einfachheit halber zählen alle Wochentage des Praktikums mit, es wird also für die 60%-Grenze nicht zwischen Wochenende und Arbeitstag unterschieden.

Zusätzlich können sich Studierende bei interessanten Firmen als “Follower” eintragen, so wie bei Twitter, um über Praktikums-, Abschlussarbeits- und Jobangebote informiert zu werden. Hier sehen Sie das logische Datenmodell (domain model).

Internship-Domain-Modell

Ihre Aufgaben

Definieren Sie zuerst die Aggregates. Dann spezifizieren Sie ein REST API für einen Satz von Anforderungen. Schließlich implementieren Sie das API Schritt für Schritt.

Sie können auf einem existierenden Repo aufbauen. Das finden Sie hier: https://git.st.archi-lab.io/students/exercise-projects/internship-management-system/internship-rest-exercise. Dieses Repo enthält eine Anzahl von Unit Tests. Einige sind von vornherein schon grün - das sind die Tests, die die richtige Erzeugung der Sample-Daten und das Wenige an Geschäftslogik testen. Die anderen Tests sind für das REST API. Die machen Sie jetzt nach und nach grün :-).

Aufgabe 1: Bestimmen Sie die Aggregates

Definieren Sie die Aggregates. Sie können das z.B. einfach einzeichnen.

Lösung

Internship-Aggregates

Aufgabe 2: Definieren Sie das REST-API

Anmerkung: Die Aufgabenbeschreibung ist ab jetzt auf Englisch, weil das die Verwendung der richtigen Begriffe einfacher macht, und auch näher am Stil des Praktikums ist.

The Internship Management System (IMS) allows to manage internships. Students and companies are used from other data sources. Therefore, the IMS doesn’t allow to edit student or company data, or to enter new students / companies into the IMS. In the implementation

In order to implement a web client for the IMS, the backend will have to offer at least the following REST API endpoints.

REST1: Return all students currently managed in the system.

REST2: Return a company currently managed in the system, identified by its ID

REST3: Add a follower to a company

REST4: Enter a new internship

REST5: Get the internship for a given ID

REST6: Correct the end date in an internship

REST7: Add an attendance check for an internship

REST8: Clear all attendance checks for an internship

Lösung

REST1: Return all students currently managed in the system.

REST2: Return a companies currently managed in the system, identified by its ID

REST3: Add a follower to a company

REST4: Enter a new internship

REST5: Get the internship for a given ID

REST6: Correct the end date in an internship

REST7: Add an attendance check for an internship

REST8: Clear all attendance checks for an internship

Aufgabe 3: Implementieren Sie das REST API

Eine Beispiellösung finden Sie unter https://git.st.archi-lab.io/students/exercise-projects/internship-management-system/internship-rest-solution. Das Repo wird nach Ende der Übung sichtbar geschaltet.

Implementieren Sie REST1: Return all students currently managed in the system.

Sie können das API in den folgenden Schritten definieren (das gilt sinngemäß auch für alle nachfolgenden API-Endpoints):

Wenn Sie das korrekt implementieren, sollten die Tests aus
thkoeln.archilab.internship.student.StudentRESTGetAllTests grün werden.

Implementieren Sie REST2: Return a company currently managed in the system, identified by its ID

Zu beachten:

Wenn Sie das korrekt implementieren, sollten die Tests aus
thkoeln.archilab.internship.company.CompanyRESTGetTests grün werden.

Implementieren Sie REST3: Add a follower to a company

Zu beachten:

Danach sollten die Tests aus thkoeln.archilab.internship.company.CompanyRESTAddFollowerTests grün werden.

Implementieren Sie REST4 (Enter a new internship) und REST5 (Get the internship for a given ID)

Implementieren Sie bitte beides zusammen, beide Aufrufe werden zusammen getestet. Beachten Sie die Randbedingungen! Danach sollten die Tests aus thkoeln.archilab.internship.internship.InternshipRESTCreateTests grün werden.

Implementieren Sie REST6: Correct the end date in an internship

Hinweis: Wenn Sie den ModelMapper mit folgender Zeile konfigurieren, dann “überspringt” er Properties, die im DTO null sind - sehr praktisch für PATCH-Operationen. Wenn man das nicht macht, sucht man lange nach dem Fehler :-(.

modelMapper.getConfiguration().setSkipNullEnabled( true );

Danach sollten die Tests aus thkoeln.archilab.internship.internship.InternshipRESTPatchTests grün werden.

Implementieren Sie REST7 (Add an attendance check for an internship) und REST8: Clear all attendance checks for an internship

Implementieren Sie bitte beides zusammen, beide Aufrufe werden zusammen getestet. Danach sollten die Tests aus thkoeln.archilab.internship.internship.InternshipRESTPatchTests grün werden.