🎓 Projet BAC+3 ⚙️ Backend uniquement 📅 2025

Rail Road API

API REST complète simulant un système de gestion ferroviaire — gares, trains, utilisateurs et réservations de billets avec contrôle d'accès par rôles.

4
entités BDD
3
rôles utilisateurs
JWT
Auth stateless
Docker
Multi-stage build

Contexte & description

Projet réalisé en BAC+3 — concevoir une API REST backend complète de zéro, sans frontend. L'objectif : simuler un vrai système de réservation ferroviaire avec authentification, contrôle d'accès par rôles, gestion des images, documentation interactive et tests d'intégration. Tout déployé via Docker multi-stage avec une image de production allégée.

Fonctionnalités clés

Auth JWT + Bcrypt
Inscription et connexion avec tokens JWT stateless. Mots de passe hashés via Bcrypt.
Contrôle d'accès par rôles
3 niveaux d'accès : user, employee, admin. Chaque route est protégée selon le rôle requis.
CRUD complet — 4 entités
Gestion complète des utilisateurs, gares, trains et réservations via des endpoints REST structurés.
Réservation avec code unique
Chaque billet génère un code unique (type QR). Statuts : valid / used / cancelled.
Upload & redimensionnement d'images
Images des gares uploadées via Multer, stockées en RAM (buffer) et redimensionnées à 200px avec Sharp avant sauvegarde.
Documentation Swagger interactive
Tous les endpoints documentés et testables via Swagger UI accessible sur /api-docs.
Tests d'intégration Jest + Supertest
Couverture des routes auth, CRUD et contrôle d'accès par rôle. Health check endpoint sur /health.
Docker multi-stage sécurisé
Image de production allégée avec utilisateur non-root. Environnements dev et prod séparés via Docker Compose.

Modèle de données — 4 entités

User
email · pseudo · mot de passe (Bcrypt)
user employee admin
TrainStation
nom · horaires d'ouverture/fermeture
image (upload + redimensionnement 200px)
Train
nom · heure de départ
gare de départ → gare d'arrivée
Booking
code unique (type QR) · lien user/train
valid used cancelled

Stack technique

Core
Node.jsExpress.js v5MySQL 8Prisma ORM
Auth & Sécurité
JWTBcryptHelmetCORS
Validation & Upload
JoiMulterSharp
Tests & DevOps
JestSupertestSwagger UIDocker Compose

Points techniques notables

Pipeline image RAM → Sharp → disque
Multer stocke l'image uploadée en mémoire RAM (buffer), Sharp redimensionne automatiquement à 200px, puis le fichier final est sauvegardé sur disque — sans écriture intermédiaire.
Gestion des erreurs Prisma
Interception et traduction des codes d'erreur Prisma : P2002 (contrainte unique), P2025 (enregistrement introuvable), P2003 (contrainte de clé étrangère) en réponses HTTP lisibles.
Docker multi-stage build sécurisé
Build en deux étapes : une image de développement avec tous les outils, et une image de production allégée qui n'embarque que le strict nécessaire, exécutée par un utilisateur non-root pour limiter la surface d'attaque.
Validation centralisée avec Joi
Schémas Joi réutilisables pour valider les corps de requêtes à l'entrée de chaque route, centralisés dans un dossier dédié pour éviter la duplication et faciliter la maintenance.
Voir le code source
Code complet disponible sur GitHub.
GitHub →

Copyright 2026 © SIVANATHAN Narththanan