📝 Note

pro/concertvault/architecture

Architecture — concertvault

Liens : Decisions · Journal

Vue d’ensemble

Client (Next.js 14)
    ↓ /api/v1/*  (proxy Next.js rewrites)
nginx + Authelia

FastAPI (Python 3.12)  ←→  PostgreSQL 16
    ↓                  ←→  MeiliSearch
    ↓ (premier play)
FFmpeg → HLS segments → nginx (statique)

Media SMB mount (read-only)

Composants principaux

ComposantRôle
backend/app/routers/Endpoints FastAPI (concerts, artists, collections, admin, auth, search)
backend/app/services/scanner.pyScan SMB, upsert DB, index MeiliSearch
backend/app/services/enricher.pyEnrichissement artiste (MusicBrainz, TheAudioDB, Last.fm)
backend/app/services/ffmpeg.pyTranscodage HLS au premier play
backend/app/services/search.pyIntégration MeiliSearch
frontend/lib/api.tsClient HTTP typé (JWT auto-refresh, 401 → refresh → retry)
frontend/store/État global Zustand
infra/docker-compose.ymlStack complète production
infra/nginx/Reverse proxy + service segments HLS statiques
infra/authelia/Auth layer reverse-proxy

Flux de données

Scan librarie : POST /admin/scan/start → scanner.py parcourt SMB → upsert DB (SQLAlchemy) → index MeiliSearch

Streaming : GET /concerts/{id}/stream → manifest HLS → (si absent) FFmpeg transcode → nginx sert les segments .ts

Recherche : GET /search?q= → MeiliSearch → résultats concerts + artistes

Dépendances externes

  • MusicBrainz API (User-Agent requis)
  • TheAudioDB API (clé requise)
  • Last.fm API (clé requise)
  • SMB share (lecture seule, mount MEDIA_PATH)

Schémas

Voir docs/DATABASE_SCHEMA.sql et docs/API_CONTRACT.yaml.