feat: Datenmodell für Katalog, Tracking und Universen

Prisma-Schema in vier Schichten: Konten und Zugang, gemeinsamer Katalog
(über die TMDB-ID dedupliziert), persönliches Tracking je Nutzer sowie
Universen mit mehreren Reihenfolgen. Dazu Benachrichtigungskanäle und
Protokoll der Hintergrundläufe.

Prisma 7 verlangt einen Treiber-Adapter statt der URL im Schema; die
Konfiguration liegt deshalb in prisma.config.mjs — bewusst als .mjs, damit
die CLI auch im schlanken Produktionsimage ohne TypeScript-Loader läuft.
This commit is contained in:
Florian Wilde
2026-09-01 18:46:27 +02:00
parent 488b99f7a1
commit 3e11e4ffb1
11 changed files with 1512 additions and 3 deletions
+78
View File
@@ -0,0 +1,78 @@
# =============================================================================
# Flimmer — Beispielkonfiguration
#
# cp .env.example .env
#
# Alles, was Flimmer über die Außenwelt wissen muss, steht hier. Die Datei .env
# gehört NICHT ins Repository (siehe .gitignore).
# =============================================================================
# --- Datenbank ---------------------------------------------------------------
# Im Docker-Compose-Betrieb zeigt der Host auf den Dienst "db".
POSTGRES_USER=flimmer
POSTGRES_PASSWORD=bitte-aendern
POSTGRES_DB=flimmer
DATABASE_URL=postgresql://flimmer:bitte-aendern@db:5432/flimmer?schema=public
# --- Grundeinstellungen ------------------------------------------------------
# Öffentlich erreichbare Adresse der Instanz (ohne abschließenden Schrägstrich).
# Wird für Links in Benachrichtigungen und für OIDC-Rücksprünge gebraucht.
APP_URL=http://localhost:3000
APP_NAME=Flimmer
# Zufälliger Wert, mindestens 32 Zeichen. Erzeugen z. B. mit:
# node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
AUTH_SECRET=bitte-durch-zufallswert-ersetzen
# Ablage für Bild-Cache und sonstige Laufzeitdaten.
DATA_DIR=/app/data
# Zeitzone für Kalender, Statistiken und geplante Läufe
TZ=Europe/Berlin
# --- Registrierung -----------------------------------------------------------
# Der erste registrierte Nutzer wird automatisch Admin. Danach lässt sich die
# Registrierung im Adminbereich abschalten; dieser Wert ist nur die Vorgabe
# für die allererste Inbetriebnahme.
ALLOW_REGISTRATION=true
# --- TMDB --------------------------------------------------------------------
# Kostenloser Schlüssel: https://www.themoviedb.org/settings/api
# Entweder der klassische API-Key (v3) …
TMDB_API_KEY=
# … oder das Bearer-Token (v4). Eines von beidem genügt.
TMDB_ACCESS_TOKEN=
# Sprache der Metadaten und Region für die Streaming-Verfügbarkeit
TMDB_LANGUAGE=de-DE
TMDB_REGION=DE
# --- Hintergrundläufe --------------------------------------------------------
# Eingebauter Scheduler (prüft laufende Serien auf neue Episoden, räumt den
# Papierkorb, verschickt Benachrichtigungen). Bei mehreren App-Instanzen nur
# in einer aktivieren.
ENABLE_SCHEDULER=true
# Uhrzeit des täglichen Laufs (24-Stunden-Format)
SYNC_HOUR=4
# Alternativ von außen anstoßen: curl -H "Authorization: Bearer $CRON_SECRET" \
# https://flimmer.example/api/cron/sync
CRON_SECRET=
# --- E-Mail (optional) -------------------------------------------------------
SMTP_HOST=
SMTP_PORT=587
SMTP_USER=
SMTP_PASSWORD=
SMTP_SECURE=false
SMTP_FROM=Flimmer <flimmer@example.com>
# --- OIDC / SSO (optional) ---------------------------------------------------
# Anbindung an Authelia, Keycloak, Authentik … Leer lassen = deaktiviert.
# Redirect-URI beim Anbieter eintragen: <APP_URL>/api/auth/oidc/callback
OIDC_ISSUER=
OIDC_CLIENT_ID=
OIDC_CLIENT_SECRET=
OIDC_SCOPES=openid profile email
# Beschriftung des Login-Knopfes
OIDC_BUTTON_LABEL=Mit SSO anmelden
# Neue Nutzer per OIDC automatisch anlegen
OIDC_AUTO_REGISTER=true