Système de gestion de personnages pour le MMORPG FantasyRealm Online, développé par le studio PixelVerse Studios.
- Présentation
- Stack technique
- Architecture
- Structure du projet
- Prérequis
- Installation (Docker)
- Installation manuelle
- Comptes de test
- Scripts SQL
- Commandes utiles
- Variables d'environnement
- Fonctionnalités
- Sécurité
- Conformité
- Tests
- Déploiement
- Documentation
- Git workflow
Application web permettant aux joueurs de :
- Créer et personnaliser des personnages (traits du visage, couleurs de peau/yeux/cheveux)
- Équiper des articles de personnalisation (vêtements, armures, armes, accessoires)
- Partager leurs créations avec la communauté via une galerie publique
- Commenter et noter les créations des autres joueurs
L'application intègre un système de modération (employés) et d'administration (dashboard, gestion des employés, logs d'activité).
| Composant | Technologie | Version |
|---|---|---|
| Frontend | React + TypeScript + Vite | React 19 |
| CSS | Tailwind CSS | 4.x |
| Routage | React Router | v7 |
| Backend | ASP.NET Core Web API | .NET 8 |
| BDD relationnelle | PostgreSQL | 18 |
| BDD NoSQL | MongoDB | 8.0 |
| Hashage MDP | Argon2id | - |
| Auth | JWT Bearer Token | - |
| Brevo API | - | |
| Conteneurisation | Docker + Docker Compose | - |
| CI/CD | GitHub Actions | - |
L'application suit une architecture client-serveur :
- Le frontend (React) communique avec le backend (.NET API) via des appels REST en HTTPS avec authentification JWT
- Le backend accède à PostgreSQL pour les données relationnelles et à MongoDB pour les logs d'activité
- Les emails transactionnels sont envoyés via l'API Brevo
Le backend est structuré en 4 couches selon les principes de la Clean Architecture et du Domain-Driven Design :
FantasyRealm.Api → Controllers, politiques d'autorisation
FantasyRealm.Application → Services métier, DTOs, interfaces (ports)
FantasyRealm.Infrastructure → Persistence (EF Core, MongoDB), sécurité, email
FantasyRealm.Domain → Entités, enums, exceptions métier
Les principes SOLID sont appliqués systématiquement (injection de dépendances, inversion des dépendances, séparation des responsabilités).
Le diagramme d'architecture détaillé est disponible dans docs/annexes/architecture-clean.png.
- MCD :
docs/annexes/mcd.png - MLD :
docs/annexes/mld.png
fantasyrealm-character-manager/
├── src/
│ ├── frontend/ # Application React + TypeScript (Vite)
│ └── backend/
│ ├── src/
│ │ ├── FantasyRealm.Api/ # Controllers, Program.cs
│ │ ├── FantasyRealm.Application/ # Services, DTOs, interfaces
│ │ ├── FantasyRealm.Infrastructure/ # Persistence, sécurité, email
│ │ └── FantasyRealm.Domain/ # Entités, enums, exceptions
│ └── tests/
│ ├── FantasyRealm.Tests.Unit/ # Tests unitaires (xUnit)
│ └── FantasyRealm.Tests.Integration/ # Tests d'intégration (Testcontainers)
├── database/
│ ├── sql/ # Scripts PostgreSQL (schéma + données)
│ └── mongodb/ # Script d'initialisation MongoDB
├── infra/ # Docker Compose, configuration pgAdmin
├── docs/ # Documentation technique, manuels, annexes
└── README.md
- Docker Desktop (pour l'environnement complet)
- Node.js 20 LTS (pour le développement frontend)
- .NET SDK 8.0 (pour le développement backend)
L'ensemble de l'environnement de développement se lance avec Docker Compose.
# 1. Cloner le repository
git clone https://github.com/pierrick-fonquerne/fantasyrealm-character-manager.git
cd fantasyrealm-character-manager
# 2. Lancer les services
docker compose -f infra/docker-compose.yml up -d --buildAu premier lancement, Docker va automatiquement :
- Démarrer PostgreSQL 18, MongoDB 8.0 et pgAdmin
- Exécuter les scripts SQL (
001_init_schema.sql,002_seed_test_data.sql) - Initialiser MongoDB avec la collection
activity_logset ses index - Builder et démarrer l'API .NET et le frontend React
| Service | URL |
|---|---|
| Frontend | http://localhost:5173 |
| API Backend | http://localhost:5000 |
| Swagger (API docs) | http://localhost:5000/swagger |
| pgAdmin | http://localhost:5050 |
| PostgreSQL | localhost:5432 |
| MongoDB | localhost:27017 |
# Arrêter les services
docker compose -f infra/docker-compose.yml down
# Voir les logs
docker compose -f infra/docker-compose.yml logs -f
# Logs d'un service spécifique
docker compose -f infra/docker-compose.yml logs -f api
# Réinitialiser les bases de données (supprime les volumes)
docker compose -f infra/docker-compose.yml down -v
docker compose -f infra/docker-compose.yml up -d --buildInstructions sans Docker
# Créer la base de données
createdb -U postgres fantasyrealm
# Exécuter les scripts SQL dans l'ordre
psql -U postgres -d fantasyrealm -f database/sql/001_init_schema.sql
psql -U postgres -d fantasyrealm -f database/sql/002_seed_test_data.sql# Se connecter à MongoDB et exécuter le script d'initialisation
mongosh fantasyrealm_logs database/mongodb/init-mongo.jscd src/backend
dotnet restore
# Configurer les connexions dans appsettings.Development.json
dotnet run --project src/FantasyRealm.Apicd src/frontend
npm install
cp .env.example .env
npm run devLes scripts SQL sont fournis dans database/sql/ conformément aux exigences du projet :
| Script | Description |
|---|---|
001_init_schema.sql |
Schéma complet : tables, contraintes, index, triggers, données de référence (rôles, classes, types d'articles, emplacements) |
002_seed_test_data.sql |
Données de test : comptes utilisateurs, personnages, articles, commentaires |
Le script MongoDB database/mongodb/init-mongo.js initialise la collection activity_logs avec ses index.
npm run dev # Serveur de développement (Vite)
npm run build # Build de production
npm run lint # Vérification ESLint
npm run type-check # Vérification TypeScriptdotnet build # Compiler la solution
dotnet run --project src/FantasyRealm.Api # Lancer l'API
dotnet test # Lancer tous les tests
dotnet test --filter "Category=Unit" # Tests unitaires uniquement| Variable | Description |
|---|---|
ASPNETCORE_ENVIRONMENT |
Environnement (Development, Staging, Production) |
ConnectionStrings__PostgreSQL |
Chaîne de connexion PostgreSQL |
ConnectionStrings__MongoDB |
Chaîne de connexion MongoDB |
Jwt__SecretKey |
Clé secrète pour la signature des tokens JWT |
Jwt__Issuer |
Émetteur du JWT |
Jwt__Audience |
Audience du JWT |
Jwt__ExpirationMinutes |
Durée de validité du token (en minutes) |
CorsOrigins |
Origines autorisées, séparées par des virgules |
Brevo__ApiKey |
Clé API Brevo pour l'envoi d'emails |
| Variable | Description |
|---|---|
VITE_API_URL |
URL de l'API backend (ex: http://localhost:5000/api) |
VITE_APP_NAME |
Nom de l'application |
| Rôle | Fonctionnalités |
|---|---|
| User | Inscription, connexion, création/modification/suppression de personnages, personnalisation faciale, équipement d'articles, partage en galerie, avis et commentaires, paramètres du compte |
| Employee | Modération des personnages (approuver/rejeter), modération des commentaires, gestion des articles de personnalisation (CRUD), consultation des utilisateurs |
| Admin | Dashboard avec statistiques de la plateforme, gestion des employés (CRUD), consultation des logs d'activité (MongoDB) |
- 4 classes jouables : Guerrier, Mage, Archer, Voleur
- Personnalisation faciale : couleur de peau, yeux, cheveux, forme des yeux/nez/bouche
- Genre : Masculin, Féminin
- Statuts : Brouillon, En attente de modération, Approuvé, Rejeté
- 4 types : Vêtement, Armure, Arme, Accessoire
- 14 emplacements d'équipement (tête, torse, jambes, pieds, mains, cou, anneaux, etc.)
- 100 articles pré-configurés dans le seed
- Notes de 1 à 5 sur les personnages partagés
- Commentaires textuels avec modération (En attente, Approuvé, Rejeté)
| Mesure | Détail |
|---|---|
| Authentification | JWT Bearer Token avec expiration configurable |
| Autorisation | Politiques par rôle : RequireUser, RequireEmployee, RequireAdmin |
| Hashage MDP | Argon2id (via Isopoh.Cryptography.Argon2) |
| Politique MDP (CNIL) | Min. 1 majuscule, 1 minuscule, 1 chiffre, 1 caractère spécial |
| Contraintes | Email et pseudo uniques |
| CORS | Origines configurables, credentials autorisés |
- RGPD : Protection des données personnelles, droit de suppression du compte
- RGAA : Accessibilité web (navigation clavier, skip links, attributs ARIA, contrastes)
- CNIL : Validation de la complexité des mots de passe
- Tests unitaires : xUnit + Moq + FluentAssertions — validation des services métier et des entités de domaine
- Tests d'intégration : Testcontainers (PostgreSQL) — validation du contexte EF Core et des contraintes SQL
# Tous les tests
dotnet test
# Tests unitaires uniquement
dotnet test --filter "Category=Unit"
# Tests d'intégration uniquement (nécessite Docker)
dotnet test --filter "Category=Integration"Les tests sont exécutés automatiquement via GitHub Actions à chaque push et pull request.
| Service | Plateforme | URL |
|---|---|---|
| Frontend | Vercel | https://www.fantasy-realm.com |
| Backend API | Railway | https://fantasyrealm-api-production.up.railway.app |
| PostgreSQL | Railway | Interne au réseau Railway |
| MongoDB | MongoDB Atlas | Cluster Europe (Paris) |
Le détail complet du déploiement est documenté dans docs/dossier-deploiement.pdf.
Le dossier docs/ contient l'ensemble de la documentation du projet :
| Document | Description |
|---|---|
documentation-technique.pdf |
Architecture, modèle de données, endpoints API, sécurité, tests |
dossier-deploiement.pdf |
Procédures de déploiement (Railway, Vercel, MongoDB Atlas) |
manuel-utilisateur.pdf |
Guide d'utilisation de l'application |
gestion-projet.pdf |
Méthodologie, planification, gestion du backlog |
charte-graphique.pdf |
Identité visuelle, couleurs, typographies |
- Architecture générale et Clean Architecture
- MCD et MLD
- Diagrammes de séquence (authentification, création de personnage, modération, avis)
- Diagramme de cas d'utilisation
Le projet suit le modèle GitFlow :
| Branche | Rôle |
|---|---|
main |
Code prêt pour la production |
develop |
Branche d'intégration |
{issue}-{slug} |
Branches de fonctionnalité (ex: 75-gestion-des-employés) |
Les pull requests ciblent toujours develop. Le merge vers main se fait après validation complète.
CC0 1.0 License — voir LICENSE