In dieser Übung geht es darum, ein REST-API mit Hilfe von Spring Boot umzusetzen.
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).
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.archi-lab.io/students/exercises/internship/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 :-).
Definieren Sie die Aggregates. Sie können das z.B. einfach einzeichnen.
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.
numberOfFollowers
.Company
that calculates this number (not that this is very difficult :-).attendancePercentage
.Internship
that calculates this percentage.GET /students
POST /students
GET /students/{student-id}/matrNumber
GET /companies/{company-id}
PUT /companies/{company-id}/followers/{student-id}
POST /interships
GET /interships/{intership-id}
PATCH /interships/{intership-id}
POST /interships/{intership-id}/attendanceChecks
DELETE /interships/{intership-id}/attendanceChecks
Eine Beispiellösung finden Sie unter https://git.archi-lab.io/students/exercises/internship/internship-rest-solution. Das Repo wird nach Ende der Übung sichtbar geschaltet.
Sie können das API in den folgenden Schritten definieren (das gilt sinngemäß auch für alle nachfolgenden API-Endpoints):
application
an. Alles, was zum API gehört, kommt da hinein.Wenn Sie das korrekt implementieren, sollten die Tests aus
thkoeln.archilab.internship.student.StudentRESTGetAllTests
grün werden.
Zu beachten:
Wenn Sie das korrekt implementieren, sollten die Tests aus
thkoeln.archilab.internship.company.CompanyRESTGetTests
grün werden.
Zu beachten:
Danach sollten die Tests aus thkoeln.archilab.internship.company.CompanyRESTAddFollowerTests
grün werden.
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.
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 bitte beides zusammen, beide Aufrufe werden zusammen getestet.
Danach sollten die Tests aus thkoeln.archilab.internship.internship.InternshipRESTPatchTests
grün werden.