🗄️ Backend & MyLipaix
Le backend de la plateforme LIPAIX est construit sur PayloadCMS 3 tournant dans l'application Next.js. PayloadCMS gère le schéma de la base de données, l'interface MyLipaix et l'authentification. Des vues MyLipaix personnalisées et des endpoints API étendent ses capacités par défaut.
🧱 PayloadCMS en bref
PayloadCMS est un CMS headless — il gère vos données (le schéma, la validation, les relations) et vous fournit automatiquement une interface MyLipaix. Dans LIPAIX, le schéma entier est défini dans des fichiers TypeScript plutôt que via une interface graphique.
Le point d'entrée de la configuration est apps/web/src/payload.config.ts.
🗂️ Collections
Une collection dans PayloadCMS est comme une table de base de données avec un schéma et une section correspondante dans l'interface MyLipaix. LIPAIX définit les collections suivantes :
Spectacles (Show)
Représentations passées et à venir. Champs principaux :
format— relation vers un Formatdate— date et heurevenue— relation vers un Lieustatus— Brouillon ou PubliébookingType— BilletWeb, URL externe, ou aucunbilletwebUrl,billetwebPrice— si le type de réservation est BilletWebexternalBookingUrl— si le type de réservation est externedescription— texte richeimage— relation vers un Média
Le titre est auto-généré depuis le nom du format et la date s'il n'est pas saisi manuellement.
Formats (Format)
Types de spectacles (ex. : Apéro Impro, Public Investigation, Battle). Chaque format a un nom, un identifiant de type et une image optionnelle.
Lieux (Venue)
Lieux de représentation. Stocke le nom du lieu, l'adresse et les détails pertinents.
Utilisateurs (Users)
Comptes MyLipaix. Liés à Discord via OAuth — pas d'authentification email/mot de passe. Les champs incluent le nom d'affichage, l'email, l'ID utilisateur Discord et le rôle d'accès.
Joueurs (Joueurs)
Profils membres du groupe d'improvisation. Distincts des Users MyLipaix — un enregistrement joueur contient les données membres publiques (nom d'affichage, photo).
Disponibilités (Availability)
Enregistrements de disponibilité des membres par spectacle. Champs :
player— relation vers un Joueurshow— relation vers un Spectaclestatus—available,unavailableoumayberoles— liste ordonnée de rôles préféréscomment— texte libre optionnel
Sélections (Selection)
La distribution finalisée pour un spectacle. Champs :
show— relation vers un Spectacleslots— tableau d'attributions rôle + joueurmemberNotes— notes par membrediscordMessageId,discordThreadId— stockés après publication sur Discordstatus— Brouillon ou Publié
Rôles (Role)
Rôles nommés utilisés dans les disponibilités et les sélections (ex. : Comédien·ne, Meneur·euse de jeu, Arbitre).
Sessions PI (PublicInvestigationSession)
Données du live show pour les spectacles format Public Investigation. Stocke le mode d'affichage courant et tout le contenu dynamique : noms de personnages, traits, relations, infos victime/coupable et indices de l'Acte III. Mis à jour en temps réel pendant le spectacle.
Troupes (Troupe)
Troupes d'improvisation qui participent aux matches ou spectacles partenaires.
Contacts (Contact)
Soumissions de formulaire de contact.
Médias (Media)
Images uploadées (affiches de spectacles, photos de joueurs, etc.). Gérés via la gestion media intégrée de PayloadCMS.
Paramètres (global)
Un document de configuration global unique (pas une collection — il n'y en a qu'un). Contient :
festivalMode— interrupteur booléenfestivalVideoUrl— URL d'intégration pour la page d'accueil festivalfestivalHeadline— texte du titre pour le mode festival
🧩 Vues MyLipaix personnalisées
PayloadCMS permet de remplacer ou d'étendre l'interface MyLipaix par défaut avec des composants React personnalisés. LIPAIX utilise plusieurs vues personnalisées :
| Vue | Chemin | Ce qu'elle fait |
|---|---|---|
| Dashboard | /admin | Vue d'ensemble avec raccourcis |
| Mes Dispos | /admin/mes-dispos | Déclarations de disponibilité du membre |
| Liste des dispos | /admin/dispos | Tous les spectacles avec résumé des disponibilités |
| Dispos par événement | /admin/dispos/[eventId] | Détail des disponibilités par spectacle |
| Sélections | /admin/selections | Liste des sélections par spectacle |
| Modifier la sélection | /admin/selections/[id] | Construire/modifier une distribution |
| Live Show | /admin/live/[eventId] | Contrôle du spectacle en temps réel |
🔐 Authentification
L'authentification utilise Discord OAuth uniquement — pas de connexion email/mot de passe.
Le flux :
- L'utilisateur clique sur "Se connecter avec Discord" sur la page MyLipaix
- Le navigateur redirige vers la page OAuth de Discord
- Discord redirige vers
/api/auth/discord/callback - Le callback recherche l'ID utilisateur Discord dans la collection
Users - Si trouvé, une session PayloadCMS est créée
Les nouveaux utilisateurs ne peuvent pas s'auto-inscrire — un administrateur doit d'abord créer leur enregistrement Users et lier leur ID Discord.
🔌 Endpoints API
Les endpoints REST personnalisés se trouvent sous /api/v1/ dans le groupe de routes (payload) :
| Endpoint | Méthode | Ce qu'il fait |
|---|---|---|
/api/v1/events | GET | Liste les prochains spectacles (nécessite un token API) |
/api/v1/players | GET | Liste les membres |
/api/v1/players/[id] | GET | Membre individuel |
/api/v1/availabilities/single-player | GET / POST | Disponibilité d'un joueur pour un spectacle |
/api/v1/availabilities/single-event | GET | Toutes les disponibilités pour un spectacle |
/api/v1/selections/[eventId] | GET / POST | Sélection pour un spectacle |
/api/v1/pi-session/[eventId] | GET | Données de la session PI courante |
/api/v1/pi-session/[eventId]/stream | GET | Flux SSE pour les mises à jour en temps réel |
/api/v1/discord/interactions | POST | Traite les interactions du bot Discord |
/api/v1/discord/commands | GET / POST | Gérer les commandes slash Discord |
/api/v1/cache | POST | Déclencher la revalidation du cache ISR |
PayloadCMS expose également sa propre API REST à /api/[collection] et GraphQL à /api/graphql, mais le code de l'application utilise directement l'API locale plutôt que ces endpoints HTTP.
🗄️ Base de données
PostgreSQL, géré via l'adaptateur postgres de PayloadCMS. Le schéma est entièrement défini en TypeScript (configurations des collections PayloadCMS) — ne modifiez pas le schéma de la base de données manuellement. Utilisez pnpm web:db:migrate pour appliquer les migrations en attente.
