# Backend: Atomarer Reorder-Endpoint für Rezept-Zutaten ## Kontext Aktuell wird die Umsortierung von Rezept-Zutaten im Frontend durch sequentielles Entfernen und Neu-Hinzufügen aller Zutaten realisiert (Remove + Re-Add). Das ist fehleranfällig und nicht atomar. ## Anforderung Neuer Endpoint: ``` PUT /api/recipes/{id}/ingredients/reorder ``` ### Request Body ```json { "ingredientOrder": [ { "ingredientId": "uuid-1", "position": 1 }, { "ingredientId": "uuid-2", "position": 2 }, { "ingredientId": "uuid-3", "position": 3 } ] } ``` ### Verhalten - Alle `ingredientId`s muessen zum Rezept gehoeren - Positionen muessen lueckenlos ab 1 aufsteigend sein - Nur bei DRAFT-Status erlaubt - Atomare Operation (eine Transaktion) - Gibt das aktualisierte `RecipeResponse` zurueck ### Fehler - `404` wenn Rezept nicht existiert - `400` wenn IDs nicht zum Rezept gehoeren oder Positionen ungueltig - `409` wenn Rezept nicht im DRAFT-Status ## Betroffene Schichten - **Domain**: `Recipe.reorderIngredients(List)` -> `Result` - **Application**: `ReorderIngredients` Use Case + `ReorderIngredientsCommand` - **Infrastructure**: Controller-Endpoint + Request-DTO ## Frontend-Anpassung Nach Backend-Implementierung kann `RecipeDetailScreen.tsx` den Remove+Re-Add-Workaround durch einen einzelnen API-Call ersetzen: ```ts await client.recipes.reorderIngredients(recipeId, { ingredientOrder: [...] }); ```