Skip to content

🗄️ 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 Format
  • date — date et heure
  • venue — relation vers un Lieu
  • status — Brouillon ou Publié
  • bookingType — BilletWeb, URL externe, ou aucun
  • billetwebUrl, billetwebPrice — si le type de réservation est BilletWeb
  • externalBookingUrl — si le type de réservation est externe
  • description — texte riche
  • image — 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 Joueur
  • show — relation vers un Spectacle
  • statusavailable, unavailable ou maybe
  • roles — liste ordonnée de rôles préférés
  • comment — texte libre optionnel

Sélections (Selection)

La distribution finalisée pour un spectacle. Champs :

  • show — relation vers un Spectacle
  • slots — tableau d'attributions rôle + joueur
  • memberNotes — notes par membre
  • discordMessageId, discordThreadId — stockés après publication sur Discord
  • status — 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éen
  • festivalVideoUrl — URL d'intégration pour la page d'accueil festival
  • festivalHeadline — 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 :

VueCheminCe qu'elle fait
Dashboard/adminVue d'ensemble avec raccourcis
Mes Dispos/admin/mes-disposDéclarations de disponibilité du membre
Liste des dispos/admin/disposTous 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/selectionsListe 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 :

  1. L'utilisateur clique sur "Se connecter avec Discord" sur la page MyLipaix
  2. Le navigateur redirige vers la page OAuth de Discord
  3. Discord redirige vers /api/auth/discord/callback
  4. Le callback recherche l'ID utilisateur Discord dans la collection Users
  5. 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) :

EndpointMéthodeCe qu'il fait
/api/v1/eventsGETListe les prochains spectacles (nécessite un token API)
/api/v1/playersGETListe les membres
/api/v1/players/[id]GETMembre individuel
/api/v1/availabilities/single-playerGET / POSTDisponibilité d'un joueur pour un spectacle
/api/v1/availabilities/single-eventGETToutes les disponibilités pour un spectacle
/api/v1/selections/[eventId]GET / POSTSélection pour un spectacle
/api/v1/pi-session/[eventId]GETDonnées de la session PI courante
/api/v1/pi-session/[eventId]/streamGETFlux SSE pour les mises à jour en temps réel
/api/v1/discord/interactionsPOSTTraite les interactions du bot Discord
/api/v1/discord/commandsGET / POSTGérer les commandes slash Discord
/api/v1/cachePOSTDé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.

Publié sous licence MIT.