|
|
||
|---|---|---|
| .github | ||
| .idea/.idea.DeliFHery/.idea | ||
| DeliFHery.API | ||
| DeliFHery.Common | ||
| DeliFHery.DataAccess | ||
| DeliFHery.PackageDelivery | ||
| DeliFHery.StatusTracking | ||
| DeliFHery.Tests | ||
| DeliFHery.UserManagement | ||
| doc | ||
| .gitignore | ||
| .justfile | ||
| DeliFHery.sln | ||
| docker-compose.yml | ||
| Dockerfile | ||
| init.sql | ||
| README.md | ||
Dokumentation SWK
-
Für welches Datenmodell haben Sie sich entschieden? ER-Diagramm, etwaige Besonderheiten erklären: Welche Entscheidungen mussten Sie treffen, wofür (und wogegen) haben Sie sich entschieden und warum?
Die Kontaktdaten sind unabhängig vom Benutzer, sodass es ausreichen würde sich nur mit einem Benutzernamen anzumeldne, da eine E-Mail technisch gesehen nicht erforderlich ist. Die Tabelle
package_trackingbildet, als eine zeitlich sortierte Reihenfolge, den Verlauf vonpackageab, wodurch es nicht zu Selbstverknüpfungen vonpackage_trackingkommt.Die Adressen werden nicht als strings (oder Json) in der Tablle
packagegespeichert, um unseren eigenen Datentyp im Backend dafür verwenden zu können. Außerdem macht dieser Ansatzaddresswiederverwendbar und man braucht nix zu parsen. -
Dokumentieren Sie auf Request-Ebene den gesamten Workflow anhand eines durchgängigen Beispiels. Sie können ein Tool Ihrer Wahl einsetzen, z. B. Postman Workflows, VS Code, etc. HTTP-Requests inkl. HTTP-Verb, URL, Parametern, Body und Headern
Kunde erstellt account und gibts sendung auf
DB:
| package_id | user_id | origin | destination | width | length | height | weight | price | notify | payment_status |
|---|---|---|---|---|---|---|---|---|---|---|
| 4740845501791925 | 4ed74bfd-8be1-4bff-be2d-304b2cb0b579 | 1 | 2 | 100 | 100 | 100 | 100 | 0 | false | false |
Nach Payment:
| package_id | user_id | origin | destination | width | length | height | weight | price | notify | payment_status |
|---|---|---|---|---|---|---|---|---|---|---|
| 4740845501791925 | 4ed74bfd-8be1-4bff-be2d-304b2cb0b579 | 1 | 2 | 100 | 100 | 100 | 100 | 0 | false | true |
| package_tracking_id | package | timestamp | status | note |
|---|---|---|---|---|
| 1 | 4740845501791925 | 2025-12-21 23:02:58.90846 | registered | Packages has been registered for shipment |
Paket wird von Mitarbeiter verarbeitet
Kunde will mehr infos
Neues update
-
Haben Sie im Zuge der Projektarbeit Erfahrungen mit dem Einsatz von KI-Agenten zur Generierung von Sourcecode gesammelt? Welche? Was hat gut funktioniert, wo sind Sie gescheitert?
Wir haben während der Projektarbeit die KI-Agenten
Google GeminiundOpenAI's ChatGPTverwendet, sie waren sehr nützlich beim Troubleshooting von Kommunikationsproblem zwischen Backend und Datenbank. Der konkrete Code den beide Modelle ausgespuckt haben war eher schlecht, weshalb wir diesen auch nicht verwendet haben. -
Bei welchen Teilen Ihres Systems ist eine korrekte Funktionsweise aus Sicht von DeliFHery am wichtigsten? Welche Maßnahmen haben Sie getroffen, um sie zu gewährleisten?
Am wichtigsten ist die korrekte Authentifizierung der Benutzer. Um diese zu gewährleisten haben nicht nur gecheckt ob der Benutzer existiert, sondern auch die benötigten Berechtigungen hat, sowie ob dessen Benutzerdaten auch richtig sind.
-
Wie können Sie ihr System testen, ohne tatsächlich Zahlungen im externen Service auszulösen?
Das können wir nicht.
-
Wie haben Sie die Berechnung der Preise umgesetzt? Welche Teile Ihres Codes müssen Sie ändern, um eine andere oder neue Variante bereitzustellen?
Für die Architektur der Implementierung haben wir uns für das
Strategy patternentschieden. Dadurch ist es möglich, die Preislogik von der restlichen Applikation zu entkoppeln und neue Preisregeln hinzuzufügen, ohne den bestehenden Code des PriceCalculatorService verändern zu müssen (Open-Closed Principle). Die Architektur besteht dabei aus zwei Komponenten:-
Dem Interface
IPriceRulemit der MethodeTryCalculate(). Jede spezifische Preisregel (z.B.: Gewicht, Maße, Rabatte) ist in einer eigenen Klasse gekapselt, die dieses Interface implementiert. -
Das Service
PriceCalculatorServicefungiert als Kontext. Dieser kennt die konkreten Preisregel nicht, sondern arbeitet nur eine Liste vonIEnumerable<IPriceRule>, die durch Dependency Injection übergeben wurde, ab.
Wichtig: Die Ausführung der Preisregeln hängen von der Hinzugfügungsreihenfolge in
Program.csab! -
-
Die Preisberechnung soll sich ab dem 1. Jänner, 0:00 auf ein neues Tarifmodell ändern. Wie würden Sie diese Anforderung lösen?
- Implementierung der neuen Preisregeln in Klassen die
TryCalculateimplementieren. - Dependency Injection der neuen Preisregeln in
Program.cs
- Implementierung der neuen Preisregeln in Klassen die
-
Welche Überlegungen haben Sie beim Generieren der eindeutigen Trackingnummer angestellt?
Zufälliger 15-stellige Code, wobei die letzte Ziffer einer Prüfsumme ist, basierend auf dem
table-base Verhoeff algorithm -
Wie haben Sie den E-Mail-Versand gelöst? Wie abhängig ist Ihre Implementierung von einem konkreten E-Mail-Versanddienst? Die Marketingabteilung möchte die Formatierung der E-Mails zukünftig selbst verändern können – wie würden Sie diese Anforderung lösen?
Wir verwenden einen SMTP-Client, somit ist jeder gängige E-Mail-Dienst verwendbar und wir sind völlig unabhängig. Die URL und die Credentials können beim Start gesetzt werden. Anpassungen der E-Mail erfolgen durch Änderungen in der Templating-Datei
email.liquid. -
Denken Sie an die Skalierbarkeit Ihres Projekts: Die Österreichische Post möchte Ihr Produkt mit über 500 Millionen Paketen pro Jahr nutzen. Was macht Ihnen am meisten Kopfzerbrechen?
Die Datenbank, da diese sehr, sehr viel Requests bekommen wird, was zur Folge haben kann, dass die gesamte Anwendung langsamer wird.
-
Wenn Sie das Projekt neu anfangen würden – was würden Sie anders machen?
Die gesamte Projektaufgabe in atomarere Tasks (in github Issues) aufteilen.








