Contexte
Doctopalibre est une plateforme de prise de rendez-vous en ligne générique et multi-rôles, développée en 6 semaines dans le cadre de la SAÉ du semestre 5 du BUT Informatique (module Développement d'Alternatives Logicielles). Inspirée de Doctolib, elle permet la gestion de créneaux pour tout type de service : cabinet médical, piscine, centre de loisirs...
Projet réalisé en binôme avec Cyprien Fréville.
Fonctionnalités par rôle
👥 Utilisateurs
- Création de compte avec email et numéro de sécurité sociale
- Authentification sécurisée via Keycloak (OAuth2)
- Réservation de créneaux avec gestion automatique des places
- Consultation et annulation de rendez-vous
- Module de pré-diagnostic médical avec questions intelligentes
- Téléchargement de documents PDF (certificats, rapports)
- Support de 40 langues, notifications email de confirmation
🩺 Médecins
- Tableau de bord avec planning personnalisé
- Fermeture de créneaux individuels ou journées complètes
- Accès aux pré-diagnostics des patients
- Gestion documentaire (upload de résultats, certificats)
🛠️ Administrateurs
- Gestion complète des utilisateurs
- Configuration des contraintes système : durée des créneaux, max par créneau, horaires, jours fermés
- Gestion et annulation de tous les rendez-vous
Architecture technique
La structure suit une architecture en couches stricte avec séparation Controllers / Services / Repositories / Entities / DTOs. La sécurité est gérée par Spring Security 6 + OAuth2 avec Keycloak comme fournisseur d'identité — tokens JWT validés à chaque requête via un filtre dédié.
Liquibase assure le versionnage du schéma de base de données. Docker Compose orchestre l'application, PostgreSQL, Keycloak et Mailpit. Un script run.sh rend le tout portable en une commande.
Tests et qualité
✅ 92% de coverage
Tests unitaires JUnit 5 + Mockito, mesurés via JaCoCo et publiés automatiquement en CI sur GitLab Pages.
🥋 Karate BDD
Tests d'intégration comportementaux : auth OAuth2, réservations, annulations, et validation HTTP 200 sur toutes les pages dans les 40 langues.
🔍 CI/CD GitLab
Pipeline : PMD (analyse statique), JaCoCo coverage, build Docker, déploiement JavaDoc sur GitLab Pages. Le pipeline bloque sur les régressions qualité.
Les 40 langues
Support complet via ResourceBundleMessageSource — 26 fichiers messages_*.properties avec plus de 150 clés chacun, et tests automatisés de chaque page dans chaque langue.
Défis techniques
🔐 OAuth2 + Keycloak — ~1 semaine
Configuration Keycloak depuis zéro, intégration JWT dans Spring Security, gestion des rôles et permissions, synchronisation Keycloak ↔ base locale.
🌍 Internationalisation 40 langues — ~1 semaine
26 fichiers messages_*.properties, plus de 150 clés chacun. Chaque nouveau champ = 40 fichiers à mettre à jour. Solution : ResourceBundleMessageSource + UrlLocaleInterceptor.
📅 Gestion des créneaux — ~1 semaine
Contraintes paramétrables, calcul des places disponibles, prévention des double-bookings, cohérence transactionnelle, support des jours fermés.
🖥️ JSP + JSTL + Spring MVC — ~1 semaine
Apprentissage de JSTL, intégration Bootstrap 5, formulaires avec Spring Tags, cartographie interactive Leaflet.
🧪 Tests et CI/CD — ~2 semaines
Tests unitaires Mockito, Karate BDD sur 40 langues × 10+ pages = 400+ cas, coverage 92%, Docker Compose pour l'infrastructure.
🗄️ Base de données — ~3 jours
Migrations Liquibase, versionnage du schéma, gestion des contraintes FK, test data seeding.
Cartographie
Le module cartographique Leaflet + OpenStreetMap (géolocalisation GPS ou IP, rayon paramétrable, filtrage par catégorie) a été développé en standalone sur map.mimomeow.fr avant d'être intégré au projet.
Ce que j'en retiens
OAuth2 + Keycloak from scratch m'a forcé à vraiment comprendre le flux d'autorisation : authorization code flow, échange de tokens, validation JWT, synchronisation avec la base locale. Des concepts que j'utilise maintenant de manière réfléchie dans n'importe quel contexte d'authentification.
Karate BDD pour les tests d'intégration est une révélation — tester 40 langues × N pages de manière exhaustive sans exploser en centaines de tests manuels, c'est exactement ce genre d'outil qu'on apprécie à sa juste valeur quand on l'a utilisé une fois.
JSP + JSTL en 2025 montre ses limites pour les interfaces réactives. Ce projet a confirmé mon intérêt pour une migration vers un frontend SPA (React/Vue) dans une version future.