61 lines
2.9 KiB
Markdown
61 lines
2.9 KiB
Markdown
# 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.
|