# AUTH v2 — Spezifikation

## Übersicht
Simple Authentifizierung für Luna Recipes, damit mehrere User die App nutzen können.

## Auth-Methode
- **Email + Passwort** (primär)
- **Optional: PIN-Login** (4-6 Ziffern, für schnellen Zugang auf vertrautem Gerät)
- **Kein OAuth/Social Login** — zu komplex für v2

## Token-Strategie
- **JWT Access Token** — kurze Laufzeit (15 min)
- **Refresh Token** — lange Laufzeit (30 Tage), httpOnly Cookie
- Token-Rotation bei jedem Refresh
- Logout invalidiert Refresh Token

## Multi-User Support
- Vorgesehene User: **Luna**, **Marc**, **Gäste**
- Gast-Zugang: Read-only, kein Login nötig (Feature-Flag)
- Jeder User hat eigene Favoriten und Notizen
- Rezepte gehören einem User (created_by)
- Einkaufsliste: Shared per Haushalt (alle sehen dieselbe)

## Datenmodell-Änderungen
```sql
CREATE TABLE users (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  email TEXT UNIQUE NOT NULL,
  name TEXT NOT NULL,
  password_hash TEXT NOT NULL,
  pin_hash TEXT,
  created_at TIMESTAMPTZ DEFAULT NOW()
);

-- Bestehende Tabellen erweitern:
ALTER TABLE recipes ADD COLUMN created_by UUID REFERENCES users(id);
ALTER TABLE notes ADD COLUMN user_id UUID REFERENCES users(id);
ALTER TABLE favorites ADD COLUMN user_id UUID REFERENCES users(id);
```

## API-Endpunkte
- `POST /api/auth/register` — { email, password, name }
- `POST /api/auth/login` — { email, password } → { accessToken, user }
- `POST /api/auth/refresh` — Cookie → { accessToken }
- `POST /api/auth/logout` — Invalidiert Refresh Token
- `GET /api/auth/me` — Aktueller User

## Sharing
- Rezept-Links sind öffentlich teilbar (kein Login zum Ansehen nötig)
- Format: `/recipe/:slug` (bleibt gleich)
- Optional: "Rezept kopieren" Button für eingeloggte User

## Migration
- Alle bestehenden Rezepte werden dem Default-User (Luna) zugewiesen
- Bestehende Favoriten/Notizen → Luna
- Keine Breaking Changes für nicht-eingeloggte Nutzung in v2.0

## Nicht in v2
- Social Login (Google, Apple)
- Email-Verifizierung
- Passwort-Reset per Email
- Admin-Panel
- Rollen/Permissions
