Étude de cas
Gestion de Bibliothèque - Application Full-Stack









Contexte
Une bibliothèque a besoin d'un outil numérique pour gérer son catalogue, ses adhérents, ses emprunts et ses réservations. Les internautes doivent pouvoir consulter le catalogue en ligne, les adhérents gérer leurs emprunts et réservations, et le personnel administrer l'ensemble du système avec des rôles distincts (bibliothécaire, responsable).
Ce projet a été développé en équipe de 3 dans le cadre d'un projet de fin de semestre. J'ai assuré le rôle de lead projet (coordination, planification, validation) tout en développant l'intégralité du front-office Angular 21 qui consomme l'API REST Symfony développée par l'équipe.
Problème & objectifs
Problème
- Absence de catalogue en ligne consultable par les usagers
- Gestion manuelle des emprunts et réservations, source d'erreurs et de lenteur
- Pas d'espace personnel pour les adhérents (suivi des emprunts, réservations)
- Besoin de rôles distincts : les bibliothécaires gèrent les opérations courantes, le responsable administre le système complet
Objectifs
- Développer un front-office public avec catalogue paginé, recherche multi-critères et espace adhérent sécurisé
- Exposer une API REST complète avec authentification JWT et règles métier (max 5 emprunts, max 3 réservations, expiration 7 jours)
- Créer un back-office d'administration avec dashboard statistiques, CRUD complet et gestion des emprunts/retours
- Coordonner une équipe de 3 développeurs avec un planning en 5 phases et 39 User Stories
Approche
En tant que lead projet, j'ai structuré le développement en 5 phases avec des points de synchronisation inter-équipes :
- Phase 0 (Setup) : architecture Angular 21, structure des entités Doctrine, configuration des projets Symfony et Angular ;
- Phases 1-2 (Socle & Core) : catalogue paginé, pages auteurs, recherche multi-critères intégrée, authentification JWT avec intercepteur et guards ;
- Phase 3 (Métier) : dashboard adhérent avec emprunts et réservations, page profil, système de réservation avec feedback utilisateur ;
- Phase 4 (Polish) : annulation de réservation, responsive design, feedback UX (spinners, états vides, messages d'erreur) ;
- Phase 5 (Recette) : tests d'intégration, documentation technique, cahier de recette.
Cette organisation a permis de gérer les dépendances entre front-office et API REST : chaque phase côté front correspondait à des endpoints livrés par l'équipe backend.
Points techniques
Frontend : Angular 21 avec standalone components (pas de NgModules), signals pour l'état réactif, inject() pour la DI, template syntax moderne (@if, @for, @empty). Routing avec lazy loading et guards d'authentification.
API REST : Symfony 7.4 avec API Platform exposant des endpoints publics (catalogue, auteurs, recherche) et protégés (profil, emprunts, réservations). Authentification JWT via LexikJWTBundle, groupes de sérialisation pour contrôler les réponses.
Base de données : MariaDB avec Doctrine ORM. 6 entités (Adhérent, Livre, Auteur, Catégorie, Emprunt, Réservation) et relations ManyToMany/ManyToOne. Règles métier en base : max 5 emprunts simultanés, max 3 réservations, expiration 7 jours.
Back-office : EasyAdmin 4 avec dashboard statistiques (emprunts en cours/retard, livres par catégorie), CRUD complet, formulaires complexes pour les emprunts et retours, gestion des rôles (bibliothécaire/responsable).
Sécurité : JWT tokens avec intercepteur HTTP Angular ajoutant automatiquement le Bearer token. Guards sur les routes protégées, navigation conditionnelle selon l'état d'authentification, gestion du token expiré (déconnexion auto sur 401).
Résultats
Le front-office livré couvre 13 User Stories fonctionnelles :
- un catalogue paginé avec recherche multi-critères combinables (titre, auteur, catégorie, langue, période de publication) ;
- un système d'authentification complet avec JWT : connexion, navigation conditionnelle, intercepteur HTTP et guards de route ;
- un dashboard adhérent affichant les emprunts en cours (avec badge à jour/en retard) et les réservations actives avec annulation ;
- des fiches détaillées pour chaque livre et auteur, avec indicateur de disponibilité et bouton de réservation contextuel ;
- une page profil, une FAQ et une page d'accueil avec statistiques de la bibliothèque.
L'ensemble forme une plateforme cohérente où front-office Angular, API REST Symfony et back-office EasyAdmin communiquent de manière fluide.
Ce que j'ai appris
- piloter un projet de 39 US en équipe de 3 avec planification en phases et gestion des dépendances inter-équipes ;
- maîtriser Angular 21 et ses conventions modernes : standalone components, signals, inject(), template syntax @if/@for ;
- intégrer une API REST sécurisée par JWT dans un frontend Angular (intercepteur, guards, gestion du token) ;
- implémenter des règles métier complexes côté API (limites d'emprunts, réservations avec expiration, disponibilité) ;
- coordonner le travail entre front-office, API et back-office avec des points de synchronisation clairs.
Ce projet m'a permis de combiner compétences techniques et leadership. Gérer une équipe tout en développant le front-office m'a appris à prioriser, communiquer et livrer dans les temps.