delifhery-vz-g3-nachbar-g3-zoechling created by GitHub Classroom
Find a file
2025-12-21 23:30:54 +01:00
.github Fix test execution 2025-12-15 15:40:39 +01:00
.idea/.idea.DeliFHery/.idea Merge branch 'develop' into feature/send-email 2025-12-19 21:13:00 +01:00
DeliFHery.API Add Api Key auth & creation 2025-12-21 22:17:42 +01:00
DeliFHery.Common fixed unittests 2025-12-21 23:21:54 +01:00
DeliFHery.DataAccess fixed unittests 2025-12-21 23:21:54 +01:00
DeliFHery.PackageDelivery fixed unittests 2025-12-21 23:21:54 +01:00
DeliFHery.StatusTracking Add OAuth 2.0 & bugfixes 2025-12-21 20:50:13 +01:00
DeliFHery.Tests fixed unittests 2025-12-21 23:21:54 +01:00
DeliFHery.UserManagement Add Api Key auth & creation 2025-12-21 22:17:42 +01:00
doc Example flow 2025-12-21 23:28:40 +01:00
.gitignore Move credentials into settings 2025-12-19 21:29:15 +01:00
.justfile Update database model 2025-11-27 00:32:18 +01:00
DeliFHery.sln Add Label Generator 2025-12-12 17:11:46 +01:00
docker-compose.yml Fix database setup and ad docs 2025-11-21 19:00:34 +01:00
Dockerfile Add simple pipeline 2025-11-11 21:09:30 +01:00
init.sql Add OAuth 2.0 & bugfixes 2025-12-21 20:50:13 +01:00
README.md Example flow 2025-12-21 23:28:40 +01:00

Review Assignment Due Date

Dokumentation SWK

  1. 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?

    ER Diagramm

    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_tracking bildet, als eine zeitlich sortierte Reihenfolge, den Verlauf von package ab, wodurch es nicht zu Selbstverknüpfungen von package_tracking kommt.

    Die Adressen werden nicht als strings (oder Json) in der Tablle package gespeichert, um unseren eigenen Datentyp im Backend dafür verwenden zu können. Außerdem macht dieser Ansatz address wiederverwendbar und man braucht nix zu parsen.

  2. 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

img.png img_1.png img_2.png img_3.png

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

img_4.png img_6.png

Kunde will mehr infos

img_7.png

Neues update

img_8.png img_10.png

  1. 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 Gemini und OpenAI's ChatGPT verwendet, 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.

  2. 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.

  3. Wie können Sie ihr System testen, ohne tatsächlich Zahlungen im externen Service auszulösen?

    Das können wir nicht.

  4. 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 pattern entschieden. 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 IPriceRule mit der Methode TryCalculate(). Jede spezifische Preisregel (z.B.: Gewicht, Maße, Rabatte) ist in einer eigenen Klasse gekapselt, die dieses Interface implementiert.

    • Das Service PriceCalculatorService fungiert als Kontext. Dieser kennt die konkreten Preisregel nicht, sondern arbeitet nur eine Liste von IEnumerable<IPriceRule>, die durch Dependency Injection übergeben wurde, ab.

    Wichtig: Die Ausführung der Preisregeln hängen von der Hinzugfügungsreihenfolge in Program.cs ab!

  5. Die Preisberechnung soll sich ab dem 1. Jänner, 0:00 auf ein neues Tarifmodell ändern. Wie würden Sie diese Anforderung lösen?

    1. Implementierung der neuen Preisregeln in Klassen die TryCalculate implementieren.
    2. Dependency Injection der neuen Preisregeln in Program.cs
  6. 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

  7. 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.

  8. 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.

  9. Wenn Sie das Projekt neu anfangen würden was würden Sie anders machen?

    Die gesamte Projektaufgabe in atomarere Tasks (in github Issues) aufteilen.