# Erweiterte Suche mit Filterspeicherung — Design

## Ziel

Nutzer können häufig genutzte Filter-Kombinationen als Presets speichern und per Klick wiederherstellen.

## Backend

### Datenmodell: `filter_presets`

| Feld | Typ | Beschreibung |
|------|-----|-------------|
| id | int PK | Auto-increment |
| user_id | int FK | users.id |
| name | varchar(100) | Anzeigename |
| filters | JSON | `{jahr, fallgruppe, has_icd, search}` |
| created_at | datetime | server_default=now() |

Max 10 Presets pro User (enforced im Endpoint).

### Endpoints

- `GET /filter-presets` — Alle Presets des Users
- `POST /filter-presets` — Neues Preset (Name + Filter-JSON)
- `DELETE /filter-presets/{id}` — Preset löschen (nur eigene)

## Frontend

Dropdown-Button "Gespeicherte Filter" neben dem Download-Button auf der CasesPage.
- Klick auf Preset → Filter anwenden
- "Aktuellen Filter speichern" → Name-Dialog
- X-Icon zum Löschen

## Dateien

| Datei | Änderung |
|-------|----------|
| `backend/app/models/user.py` | `FilterPreset` Modell |
| `backend/alembic/versions/009_filter_presets.py` | Migration |
| `backend/app/schemas/filter_preset.py` | Pydantic Schemas |
| `backend/app/api/filter_presets.py` | Neue API-Datei |
| `backend/app/main.py` | Router registrieren |
| `frontend/src/hooks/useFilterPresets.ts` | TanStack Query Hook |
| `frontend/src/pages/CasesPage.tsx` | Preset-Dropdown |
