Rezept-Schnittstelle - Uebergabe alles oder nichts mit eindeutiger Rueckmeldung #233

Closed
opened 2026-10-01 15:38:38 +02:00 by lena · 2 comments
Collaborator

Die Kochbuch-App muss sicher wissen, ob ein ganzer Einkaufszettel angekommen ist. Bisher wurde jede Zutat einzeln gespeichert: ein Fehler bei Zutat 5 von 12 hinterliess eine halbe Liste, und eine Wiederholung nach einem Timeout trug alles doppelt ein.

Akzeptanzkriterien

  • Eine Uebergabe wird vollstaendig oder gar nicht uebernommen (eine Transaktion).
  • Optionale transferId (Idempotenzschluessel der Rezept-App); dieselbe ID auf derselben Liste schreibt nichts erneut und antwortet alreadyApplied: true.
  • Antwort ist ein Objekt: transferId, alreadyApplied, ingredientCount, products.
  • 1 bis 200 Zutaten pro Uebergabe, sonst 400.
  • Keine Rueckname/Rueckgaengig-Funktion (vom Menschen verworfen).
Die Kochbuch-App muss sicher wissen, ob ein ganzer Einkaufszettel angekommen ist. Bisher wurde jede Zutat einzeln gespeichert: ein Fehler bei Zutat 5 von 12 hinterliess eine halbe Liste, und eine Wiederholung nach einem Timeout trug alles doppelt ein. ## Akzeptanzkriterien - Eine Uebergabe wird vollstaendig oder gar nicht uebernommen (eine Transaktion). - Optionale `transferId` (Idempotenzschluessel der Rezept-App); dieselbe ID auf derselben Liste schreibt nichts erneut und antwortet `alreadyApplied: true`. - Antwort ist ein Objekt: `transferId`, `alreadyApplied`, `ingredientCount`, `products`. - 1 bis 200 Zutaten pro Uebergabe, sonst 400. - Keine Rueckname/Rueckgaengig-Funktion (vom Menschen verworfen).
lena self-assigned this 2026-10-01 15:38:38 +02:00
Author
Collaborator

Claimed by session "Kochbuch-App Einkaufslisten-Schnittstelle [a738c3]"

Nachtraeglich angelegt: die Arbeit wurde in dieser Sitzung umgesetzt, waehrend git.butzei.de nicht erreichbar war; Commits 6bc32a24 sind bereits auf master.

Claimed by session "Kochbuch-App Einkaufslisten-Schnittstelle [a738c3]" Nachtraeglich angelegt: die Arbeit wurde in dieser Sitzung umgesetzt, waehrend git.butzei.de nicht erreichbar war; Commits 6bc32a24 sind bereits auf master.
Author
Collaborator

Umgesetzt und auf master.

Umfang: Der Befehl laeuft unter DbTransactionDecorator; die komponierten Create/Activate-Handler teilen dieselbe Transaktion. Neue Tabelle RecipeIntegrationTransferEntity (eindeutig pro ShoppingListId + TransferId, Cascade mit der Liste), im selben Commit geschrieben, so dass ein Eintrag genau dann existiert, wenn die ganze Uebergabe angekommen ist. Neues Antwort-DTO RecipeIntegrationTransferResultDto (Breaking Change gegenueber der bisherigen Liste - akzeptiert, da der einzige Konsument noch in Entwicklung ist).

Tests: Erstanwendung, Wiederholung mit gleicher ID (nichts doppelt, gleiche Produkte), ohne ID wird jeder Aufruf angewendet, leere/zu grosse Uebergabe, sowie ein echter Rollback-Test gegen die produktive DbContextFactory (Fehler bei der zweiten Zutat hinterlaesst weder Produkte noch Transfer-Eintrag).

Sicherheit: Review ohne Befund - Transfer-Lookup und gespeicherte Produkt-IDs sind beide auf die Liste gefiltert, kein listenuebergreifender Zugriff. Hinweis (kein Sicherheitsthema): pro Zutat wird die Liste einmal geladen; bei Haushaltslisten unkritisch.

Commit: 6bc32a24

Umgesetzt und auf master. **Umfang:** Der Befehl laeuft unter `DbTransactionDecorator`; die komponierten Create/Activate-Handler teilen dieselbe Transaktion. Neue Tabelle `RecipeIntegrationTransferEntity` (eindeutig pro ShoppingListId + TransferId, Cascade mit der Liste), im selben Commit geschrieben, so dass ein Eintrag genau dann existiert, wenn die ganze Uebergabe angekommen ist. Neues Antwort-DTO `RecipeIntegrationTransferResultDto` (Breaking Change gegenueber der bisherigen Liste - akzeptiert, da der einzige Konsument noch in Entwicklung ist). **Tests:** Erstanwendung, Wiederholung mit gleicher ID (nichts doppelt, gleiche Produkte), ohne ID wird jeder Aufruf angewendet, leere/zu grosse Uebergabe, sowie ein echter Rollback-Test gegen die produktive `DbContextFactory` (Fehler bei der zweiten Zutat hinterlaesst weder Produkte noch Transfer-Eintrag). **Sicherheit:** Review ohne Befund - Transfer-Lookup und gespeicherte Produkt-IDs sind beide auf die Liste gefiltert, kein listenuebergreifender Zugriff. Hinweis (kein Sicherheitsthema): pro Zutat wird die Liste einmal geladen; bei Haushaltslisten unkritisch. Commit: 6bc32a24
lena closed this issue 2026-10-01 15:38:39 +02:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
robert/todo#233
No description provided.