# 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<ReorderEntry>)` -> `Result<RecipeError, Void>`
- **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: [...] });
```
