Aufgabe
Unser Kunde betreibt Autowerkstätten und hat uns beauftragt eine Software zu entwickeln um es seinen Kunden zu ermöglichen Termine zu vereinbaren. Wir werden diese Software zuerst für zwei Werkstätten entwickeln, nach einem Testlauf sollen aber weitere Werkstätten diese Software einsetzen können. Aus einem bestehenden Altsystem sollen wir bereits vereinbarte Termine aus einer CSV-Datei importieren.
Die Werkstätten unterscheiden sich in der Anzahl an Terminen die sie parallel annehmen können. Eine Werkstatt bietet mehrere Leistungen an (Radwechsel, Ölwechsel, Ausbeulen, ...). Jede dieser Leistungen benötigt unterschiedlich viel Zeit. Die Leistungen wurden im Altsystem mit einem Code (z.B. MOT) abgekürzt.
Werkstätten dürfen auf keinen Fall überbucht werden.
Die Werkstatt "Autohaus-Schmidt" kann parallel 2 Termine annehmen und bietet folgende Leistungen:
- Motorinstandsetzung (Code MOT, Dauer 4h)
- Ölwechsel (Code OIL, Dauer 15m)
- Radwechsel (Code WHE, Dauer 30m)
Die Werkstatt "Meisterbetrieb-Bachstraße" kann parallel 3 Termine annehmen und bietet folgende Leistungen:
- Ölwechsel (Code OIL, Dauer 10m)
- Blechreparatur (Code FIX, Dauer 3h)
- Hauptuntersuchung (Code INS, Dauer 1h)
Die Termine des Altsystems finden sich im Ordner ./termine.
Anforderung
Die Software soll in Java entwickelt und als runnable Jar mit dem aktuellsten, stabilen JRE ausführbar sein. Die Daten sollen in einer Postgres- oder H2-Datenbank abgelegt werden. Bestehende Termine sollen sich aus CSV-Dateien importieren lassen.
Die Rest-Schnittstelle ist mit der Datei rest-api-spec.yml im OpenAPI Format beschrieben.
Die Schnittstelle soll vier Usecases erfüllen:
- Als Kunde will ich Terminvorschläge mit einer Werkstatt für eine Leistung angezeigt bekommen
- Als Kunde will ich einen Termin mit der Werkstatt vereinbaren können
- Als Werkstatt will ich alle Termine der Werkstatt einsehen können
- Als Werkstatt will ich Informationen zu einem Termin angezeigt bekommen
Termine dürfen nur im 15m Takt vergeben werden (z.B. 8:15Uhr bis 8:25 oder 8:45 bis 9:45). Beim erstellen der Terminvorschläge muss die Taktung ebenfalls berücksichtigt werden. Hat eine Werkstatt z.b. zwischen 8:00Uhr und 9:00Uhr Kapazität und die Leistung benötigt 10m, dann sollen die Vorschläge die Uhrzeiten 8:00, 8:15, 8:30 und 8:45 enthalten. Eine Werkstatt darf nie mehr Termine parallel planen als Kapazität vorhanden ist.
Abgrenzung
Das Frontend ist nicht Teil dieser Aufgabenstellung. Authentifizierung und Autorisierung muss nicht berücksichtigt werden.
Hilfestellung
Datenbank
Dem Projekt liegt eine docker-compose.yml Datei bei mit der eine Postgres-Datenbank lokal gestartet werden kann. Die Datenbank "etecture" läuft auf Port 5432. Username: "etecture", Passwort: "etecture"
API-Spezifikation
Die Datei rest-api-spec.yml kann auf http://editor.swagger.io/ importiert werden um eine übersichtliche Dokumentation zu erhalten.