# Refactor

Refactore den Code ohne die Funktionalität zu ändern.

## Wichtige Regel:
**Erst planen, dann umsetzen – niemals beides gleichzeitig.**
Zeige den Plan und warte auf Bestätigung bevor du Code schreibst.

## Backend Refactoring (main.py aufteilen):

### Zielstruktur:
```
backend/
├── main.py           # Nur App-Setup, Middleware, Router-Import (~100 Zeilen)
├── database.py       # DB-Verbindung, init_db, safe_alters, r2d()
├── auth.py           # require_auth, require_admin, hash_pin, verify_pin, sessions
├── models.py         # Alle Pydantic Models
├── email.py          # SMTP, send_email, email_html_wrapper
├── utils.py          # make_token(), helper functions
└── routers/
    ├── __init__.py
    ├── weight.py
    ├── caliper.py
    ├── circumference.py
    ├── nutrition.py
    ├── activity.py
    ├── photos.py
    ├── insights.py
    ├── prompts.py
    ├── admin.py
    └── export.py
```

### Vorgehen:
1. Analysiere main.py vollständig
2. Erstelle Plan welche Zeilen wohin kommen
3. Warte auf Bestätigung
4. Erstelle neue Dateien eine nach der anderen
5. Nach jeder Datei: Syntax prüfen
6. main.py anpassen (imports + router registrierung)
7. Finaler Test: Backend startet ohne Fehler

### Syntax-Check nach jedem Schritt:
```bash
python3 -m py_compile backend/main.py
python3 -m py_compile backend/database.py
# etc.
```

### Test nach Refactoring:
```bash
# Auf dem Pi:
docker compose build --no-cache backend
docker compose up -d
docker logs mitai-api --tail 20
curl -s http://localhost:8002/api/auth/status
```

## Frontend Refactoring (Komponenten extrahieren):

### Wiederverwendbare Komponenten extrahieren nach:
```
frontend/src/components/
├── MetricCard.jsx      # Kennzahl-Karte
├── ChartCombo.jsx      # Kombinations-Chart
├── LoadingSpinner.jsx  # Ladekreis
├── EmptyState.jsx      # Leerer Zustand
├── Avatar.jsx          # Nutzer-Avatar
└── ConfirmDialog.jsx   # Bestätigungs-Dialog
```

### Vorgehen:
1. Identifiziere wiederholte Code-Muster
2. Extrahiere in eigene Komponenten
3. Ersetze in allen Pages
4. Frontend Build testen: `cd frontend && npm run build`

## Nach dem Refactoring:
- Commit mit `refactor:` Prefix
- CLAUDE.md Verzeichnisstruktur aktualisieren
- Kein neues Feature in diesem Commit!
