Skip to content

Repository files navigation

LFF — Classements Minecraft et Discord

LFF réunit un site React, une API Express, un bot Discord et des classements Minecraft hebdomadaires. L'application utilise MySQL et est prévue pour être servie sur https://lff.addrien.fr.

Stack

  • Frontend : React 19 + Vite
  • Backend : Node.js + Express
  • Base de données : MySQL (mysql2)
  • Authentification : Discord OAuth2
  • Interactions Discord : API Discord, sans discord.js

Base de données

Au démarrage, le serveur :

  1. se connecte à MySQL avec les variables SQL_* ;
  2. crée la base SQL_DBNAME si elle n'existe pas ;
  3. applique database/schema.sql ;
  4. démarre seulement lorsque la connexion est opérationnelle.

Le schéma contient :

  • tops : périodes de classement par catégorie ;
  • users : identité Discord et pseudo courant ;
  • top_rankings : score d'un utilisateur pour une période, relié aux deux tables précédentes.

Les modifications de score sont transactionnelles. Un score inférieur ou égal à zéro supprime la ligne du classement.

Pour initialiser la base sans démarrer le serveur :

npm run db:init
npm run db:verify

Le compte SQL_USER doit avoir le droit de créer SQL_DBNAME. Si la base est créée en amont par l'hébergeur, les droits de création de tables suffisent.

Installation

Prérequis : Node.js 20.19+ et MySQL 8+.

npm install
npm --prefix client install
copy .env.example .env
npm run db:init
npm run build
npm start

npm start déclenche également le build Vite automatiquement afin d'éviter qu'un ancien index.html référence des assets supprimés.

En développement, une seule commande lance Express et Vite :

npm run dev

Vite écoute sur http://localhost:5173 et redirige les routes API vers le port PORT défini dans .env.

Les deux processus peuvent aussi être lancés séparément avec npm run dev:server et npm run dev:client.

Configuration

Les variables attendues sont documentées dans .env.example.

PORT=3000
PUBLIC_URL=https://lff.addrien.fr
FRONTEND_URL=https://lff.addrien.fr

SQL_SERVER=127.0.0.1
SQL_PORT=3306
SQL_DBNAME=lff
SQL_USER=lff
SQL_PASSWORD=...

PUBLIC_URL est l'origine canonique utilisée par les commandes Discord et par l'OAuth. FRONTEND_URL reste accepté comme valeur de repli.

Dans le portail développeur Discord, ajouter ces URLs de redirection :

  • https://lff.addrien.fr
  • http://localhost:5173 pour le développement local

Routes principales

Pages :

  • /leaderboards
  • /profile
  • /rewards
  • /dashboard

API :

  • GET /healthz : état du serveur et de MySQL
  • GET /api/config : configuration publique du client
  • GET /api/leaderboard/current/:type
  • GET /api/leaderboard/history
  • POST /api/points/add/:type
  • PATCH /api/leaderboards/update/:type
  • GET /api/profile
  • POST /interactions

Types disponibles : crystaux, pvp, iscoin, dragonegg, beacon et sponge.

Déploiement

Le Dockerfile construit le client Vite puis produit une image Node qui sert client/dist et l'API sur le même domaine.

Pour reconstruire et relancer le conteneur :

chmod +x build.sh
./build.sh

Par défaut, le script utilise l'image lff-image:latest, le conteneur lff, le réseau mariadb-network et publie l'application sur 127.0.0.1:3579. Ces valeurs sont surchargeables :

HOST_PORT=4567 CONTAINER_NAME=lff-prod ./build.sh

Le reverse proxy de lff.addrien.fr doit transmettre le trafic au port défini par PORT et conserver les en-têtes Host et X-Forwarded-Proto.

Les secrets MySQL et Discord doivent être injectés au démarrage du conteneur ; le fichier .env est exclu de l'image Docker et de Git.

About

Leaderboard LFF — Classement des joueurs, progression et gain de cristaux LFF.

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Used by

Contributors

Languages