19 KiB
🗺️ Roadmap du Projet BricoLoc Architecture Evolution
Période : 10 semaines (Octobre - Décembre 2025)
Effort estimé : 215 heures
Équipe : 1-2 développeurs
📋 Vue d'Ensemble
Objectif Principal
Créer deux applications complètes démontrant l'évolution architecturale de BricoLoc :
- Legacy : Monolithe Node.js/Express avec bugs intentionnels
- Moderne : Architecture microservices hybride avec Next.js/Supabase
Livrables Clés
- ✅ Documentation Architecture (Semaines 1-2)
- 🚧 Application Legacy (Semaines 3-4)
- 🚧 Application Moderne (Semaines 5-9)
- 🚧 Comparaison & Présentation (Semaine 10)
📅 Planning par Sprints
Sprint 0 : Fondations (Semaines 1-2) - 40h
Objectif : Poser les bases documentaires et techniques
Semaine 1 : Documentation Architecture (20h)
- ✅ Structurer le mono-repo
- ✅ Rédiger README.md et ARCHITECTURE.md
- ✅ Créer Cahier des Charges
- ✅ Rédiger ADR (5 documents)
- ✅ Créer diagrammes C4 (Mermaid)
- ✅ Roadmap détaillée
Livrables :
- ✅ Dossier
docs/complet - ✅ 5 ADR documentés
- ✅ Diagrammes d'architecture
Semaine 2 : Setup Technique (20h)
- ✅ Initialiser Git et
.gitignore - ✅ Configurer pnpm workspaces
- ✅ Setup ESLint + Prettier + TypeScript
- ✅ Créer structure Legacy (
apps/legacy-app/) - 🔲 Créer structure Moderne (
apps/moderne/) - 🔲 Setup Supabase (projet + tables de base)
- 🔲 Configuration CI/CD (GitHub Actions)
Livrables :
- ✅ Repository Git initialisé
- ✅ Workspaces fonctionnels
- ✅ Structure Legacy complète
- 🔲 Supabase configuré
- 🔲 CI/CD de base
Sprint 1 : Application Legacy (Semaines 3-4) - 40h
Objectif : Créer un monolithe fonctionnel avec bugs intentionnels
Semaine 3 : Backend Legacy (20h)
User Stories :
- 🔲 US-L01 : En tant qu'utilisateur, je peux créer un compte (sans validation email)
- 🔲 US-L02 : En tant qu'utilisateur, je peux me connecter
- 🔲 US-L03 : En tant que visiteur, je peux voir la liste des outils
- 🔲 US-L04 : En tant qu'utilisateur, je peux voir les détails d'un outil
Tâches techniques :
- Setup Express.js + EJS
- Configuration SQLite
- Middleware d'authentification (sessions)
- Routes : /login, /register, /outils, /outils/:id
- Modèle monolithique (tout dans server.js)
- CSS basique (styles.css)
Bugs intentionnels :
- ❌ Pas de validation email format
- ❌ Mot de passe en clair dans DB
- ❌ Pas de protection CSRF
- ❌ SQL Injection possible
- ❌ Pas de gestion d'erreurs
Livrables :
- Application Express fonctionnelle
- 4 US implémentées
- 5 bugs documentés
Semaine 4 : Frontend Legacy + Réservations (20h)
User Stories :
- 🔲 US-L05 : En tant qu'utilisateur, je peux créer une réservation
- 🔲 US-L06 : En tant qu'utilisateur, je peux voir mes réservations
- 🔲 US-L07 : En tant qu'admin, je peux gérer l'inventaire (CRUD outils)
Tâches techniques :
- Templates EJS : index.ejs, outils.ejs, reservations.ejs, admin.ejs
- Routes : /reservations, /admin/outils
- Logique de réservation (conflits de dates)
- Dashboard admin basique
Bugs intentionnels supplémentaires : 6. ❌ Pas de vérification disponibilité stock 7. ❌ Double-booking possible 8. ❌ Pas de pagination (performance) 9. ❌ Code dupliqué partout 10. ❌ Pas de tests
Livrables :
- 7 US complètes
- Application déployable
- Document "Bugs Legacy" (liste exhaustive)
Critères d'acceptation :
- ✅ Application fonctionnelle de bout en bout
- ✅ 10+ bugs identifiés et documentés
- ✅ Score Lighthouse < 60
Sprint 2 : Foundation Moderne (Semaines 5-6) - 40h
Objectif : Poser les bases de l'architecture microservices
Semaine 5 : Setup Next.js + Microservices Structure (20h)
Tâches techniques :
- Initialiser Next.js 14 (App Router)
- Configuration TypeScript strict
- Setup Tailwind CSS + shadcn/ui
- Structure microservices :
- packages/microservices/auth/
- packages/microservices/catalogue/
- packages/microservices/reservation/
- packages/microservices/inventory/
- packages/microservices/payment/
- packages/microservices/notification/
- Shared packages :
- packages/shared/types/
- packages/shared/ui/ (composants)
- packages/shared/utils/
- packages/shared/di/ (Dependency Injection)
- packages/shared/events/ (Event Bus)
Livrables :
- Structure microservices complète
- Shared packages configurés
- Next.js fonctionnel
Semaine 6 : Auth Service + Supabase (20h)
User Stories :
- 🔲 US-M01 : En tant qu'utilisateur, je peux créer un compte (avec validation email)
- 🔲 US-M02 : En tant qu'utilisateur, je peux me connecter (OAuth Google optionnel)
Tâches techniques :
- Configuration Supabase Auth
- Row Level Security (RLS) policies
- Auth Service :
- domain/entities/User.ts
- application/use-cases/RegisterUser.ts
- infrastructure/repositories/SupabaseAuthRepository.ts
- Pages Next.js :
- app/auth/login/page.tsx
- app/auth/register/page.tsx
- Middleware auth Next.js
- Tests unitaires (Auth Service)
Livrables :
- Auth Service complet (Clean Architecture)
- Authentification fonctionnelle
- Tests unitaires > 80% coverage
Sprint 3 : Catalogue & Inventory Services (Semaines 7-8) - 50h
Objectif : Gestion des outils et stocks
Semaine 7 : Catalogue Service (25h)
User Stories :
- 🔲 US-M03 : En tant que visiteur, je peux rechercher des outils (avec filtres)
- 🔲 US-M04 : En tant qu'utilisateur, je peux voir les détails d'un outil (avec images)
- 🔲 US-M05 : En tant qu'admin, je peux créer/modifier/supprimer un outil
Tâches techniques :
Catalogue Service :
domain/
- entities/Outil.ts
- entities/Categorie.ts
- repositories/IOutilRepository.ts
application/
- use-cases/SearchOutils.ts
- use-cases/GetOutilDetails.ts
- use-cases/ManageOutil.ts (CRUD)
- services/CatalogueService.ts
infrastructure/
- repositories/SupabaseCatalogueRepository.ts
- external/SupabaseStorageService.ts (upload images)
API Routes :
- app/api/outils/route.ts (GET, POST)
- app/api/outils/[id]/route.ts (GET, PUT, DELETE)
- app/api/categories/route.ts
Pages :
- app/outils/page.tsx (liste avec recherche)
- app/outils/[id]/page.tsx (détails)
- app/admin/outils/page.tsx (gestion)
Tests :
- Unit tests (CatalogueService, repositories)
- Integration tests (API routes)
Patterns appliqués :
- ✅ Repository Pattern
- ✅ Service Layer
- ✅ Dependency Injection
- ✅ Factory Pattern (OutilFactory)
Livrables :
- Catalogue Service complet
- 3 US fonctionnelles
- Tests > 80% coverage
Semaine 8 : Inventory Service (25h)
User Stories :
- 🔲 US-M06 : En tant qu'utilisateur, je vois la disponibilité en temps réel
- 🔲 US-M07 : En tant qu'admin, je peux gérer les stocks par entrepôt
Tâches techniques :
Inventory Service :
domain/
- entities/Stock.ts
- entities/Entrepot.ts
- repositories/IInventoryRepository.ts
application/
- use-cases/CheckAvailability.ts
- use-cases/ReserveStock.ts
- use-cases/ReleaseStock.ts
- services/InventoryService.ts
infrastructure/
- repositories/SupabaseInventoryRepository.ts
- listeners/ReservationListener.ts (Event Bus)
Event Bus Integration :
- Subscribe to 'reservation.created'
- Subscribe to 'reservation.cancelled'
- Publish 'inventory.updated'
Real-time avec Supabase Realtime :
- Channel 'stock-updates'
- Broadcast changes to clients
API Routes :
- app/api/inventory/availability/route.ts
- app/api/inventory/entrepots/route.ts
Tests :
- Unit tests (InventoryService)
- Event Bus tests (mocked)
- Real-time tests (integration)
Patterns appliqués :
- ✅ Observer Pattern (Event Bus)
- ✅ Repository Pattern
- ✅ Service Layer
Livrables :
- Inventory Service complet
- Event Bus fonctionnel
- Real-time updates opérationnels
Sprint 4 : Reservation & Payment Services (Semaine 9) - 25h
Objectif : Boucle complète de réservation avec paiement
Semaine 9 : Reservation + Payment Services (25h)
User Stories :
- 🔲 US-M08 : En tant qu'utilisateur, je peux créer une réservation (avec vérification dispo)
- 🔲 US-M09 : En tant qu'utilisateur, je peux payer ma réservation (Stripe)
- 🔲 US-M10 : En tant qu'utilisateur, je reçois un email de confirmation
Tâches techniques :
Reservation Service :
domain/
- entities/Reservation.ts
- repositories/IReservationRepository.ts
- factories/ReservationFactory.ts (pricing logic)
application/
- use-cases/CreateReservation.ts
- use-cases/CancelReservation.ts
- use-cases/GetMyReservations.ts
- services/ReservationService.ts
infrastructure/
- repositories/SupabaseReservationRepository.ts
- events/ReservationEventPublisher.ts
Payment Service :
domain/
- entities/Payment.ts
- repositories/IPaymentRepository.ts
application/
- use-cases/ProcessPayment.ts
- services/PaymentService.ts
infrastructure/
- repositories/SupabasePaymentRepository.ts
- external/StripeService.ts (API Stripe)
- listeners/ReservationPaymentListener.ts
Notification Service :
application/
- services/NotificationService.ts
infrastructure/
- external/EmailService.ts (Resend/SendGrid)
- listeners/ReservationNotificationListener.ts
API Routes :
- app/api/reservations/route.ts (GET, POST)
- app/api/reservations/[id]/route.ts (GET, DELETE)
- app/api/payments/route.ts (POST)
- app/api/payments/stripe-webhook/route.ts (Stripe webhook)
Pages :
- app/reservations/page.tsx (mes réservations)
- app/outils/[id]/reserver/page.tsx (formulaire réservation)
- app/checkout/[reservationId]/page.tsx (paiement)
Event Flow :
1. reservation.created → Inventory reserves stock
2. reservation.created → Notification sends email
3. payment.succeeded → Reservation status = CONFIRMED
4. reservation.cancelled → Inventory releases stock
Patterns appliqués :
- ✅ Factory Pattern (ReservationFactory)
- ✅ Observer Pattern (Event Bus multi-subscribers)
- ✅ Saga Pattern (simple orchestration)
Livrables :
- 3 microservices fonctionnels
- Flux complet de réservation
- Paiement Stripe intégré
- Notifications email
Sprint 5 : Finitions & Comparaison (Semaine 10) - 20h
Objectif : Finalisation et documentation de comparaison
Semaine 10 : Comparaison, Performance, Présentation (20h)
Tâches :
Comparaison Legacy vs Moderne :
- Lighthouse scores (Performance, SEO, Best Practices)
- Metrics de code (Complexité cyclomatique, duplication)
- Tests coverage comparison
- Bundle size analysis
Documentation :
- Document de comparaison (docs/comparaison.md)
- Tableau de bord metrics (Markdown)
- Screenshots avant/après
- Vidéo démo (5-10 min)
Présentation :
- Slides (PowerPoint/Keynote/Reveal.js)
- Structure :
1. Contexte et problématique
2. Architecture Legacy (problèmes)
3. Architecture Moderne (solutions)
4. Comparaison chiffrée
5. Patterns appliqués
6. Démonstration live
7. Retours d'expérience
- Durée : 20-30 min
Finitions :
- Fixes bugs critiques
- README.md mis à jour
- CONTRIBUTING.md
- LICENSE
- Deploy final (Vercel)
Livrables :
- Document de comparaison complet
- Présentation professionnelle
- Applications déployées
- Vidéo démo
🎯 User Stories Complètes
Application Legacy (7 US)
| ID | User Story | Sprint | Statut |
|---|---|---|---|
| US-L01 | En tant qu'utilisateur, je peux créer un compte | Sprint 1 | 🔲 |
| US-L02 | En tant qu'utilisateur, je peux me connecter | Sprint 1 | 🔲 |
| US-L03 | En tant que visiteur, je peux voir la liste des outils | Sprint 1 | 🔲 |
| US-L04 | En tant qu'utilisateur, je peux voir les détails d'un outil | Sprint 1 | 🔲 |
| US-L05 | En tant qu'utilisateur, je peux créer une réservation | Sprint 1 | 🔲 |
| US-L06 | En tant qu'utilisateur, je peux voir mes réservations | Sprint 1 | 🔲 |
| US-L07 | En tant qu'admin, je peux gérer l'inventaire | Sprint 1 | 🔲 |
Application Moderne (10 US + 2 optionnelles)
| ID | User Story | Sprint | Statut |
|---|---|---|---|
| US-M01 | En tant qu'utilisateur, je peux créer un compte avec validation | Sprint 2 | 🔲 |
| US-M02 | En tant qu'utilisateur, je peux me connecter (OAuth optionnel) | Sprint 2 | 🔲 |
| US-M03 | En tant que visiteur, je peux rechercher des outils avec filtres | Sprint 3 | 🔲 |
| US-M04 | En tant qu'utilisateur, je peux voir les détails d'un outil avec images | Sprint 3 | 🔲 |
| US-M05 | En tant qu'admin, je peux gérer les outils (CRUD) | Sprint 3 | 🔲 |
| US-M06 | En tant qu'utilisateur, je vois la disponibilité en temps réel | Sprint 3 | 🔲 |
| US-M07 | En tant qu'admin, je peux gérer les stocks par entrepôt | Sprint 3 | 🔲 |
| US-M08 | En tant qu'utilisateur, je peux créer une réservation avec vérification | Sprint 4 | 🔲 |
| US-M09 | En tant qu'utilisateur, je peux payer ma réservation (Stripe) | Sprint 4 | 🔲 |
| US-M10 | En tant qu'utilisateur, je reçois un email de confirmation | Sprint 4 | 🔲 |
| US-M11 (opt) | En tant qu'utilisateur, je peux laisser un avis sur un outil | - | ⏸️ |
| US-M12 (opt) | En tant qu'admin, je vois un dashboard analytics | - | ⏸️ |
📊 Métriques de Succès
Métriques Techniques
| Métrique | Legacy | Moderne | Objectif |
|---|---|---|---|
| Lighthouse Performance | < 60 | > 90 | ✅ |
| Tests Coverage | 0% | > 80% | ✅ |
| Bundle Size | ~500 KB | < 200 KB | ✅ |
| Time to Interactive (TTI) | > 5s | < 2s | ✅ |
| Complexité Cyclomatique | > 20 | < 10 | ✅ |
| Code Duplication | > 30% | < 5% | ✅ |
Métriques Fonctionnelles
- ✅ 7 US Legacy implémentées
- ✅ 10 US Moderne implémentées
- ✅ 10+ bugs Legacy documentés
- ✅ 0 bug critique Moderne
- ✅ 100% features comparables
Métriques Architecturales
- ✅ 5 ADR rédigés
- ✅ 3 niveaux C4 diagrammés
- ✅ 5 patterns appliqués
- ✅ 6 microservices implémentés
- ✅ Clean Architecture respectée
🚀 Déploiement
Environnements
| Environnement | URL | Usage |
|---|---|---|
| Dev Local | localhost:3000 (Legacy) localhost:3001 (Moderne) |
Développement |
| Staging | staging-legacy.vercel.app staging-moderne.vercel.app |
Tests |
| Production | bricoloc-legacy.vercel.app bricoloc-moderne.vercel.app |
Démo finale |
CI/CD Pipeline
GitHub Actions :
- on: [push, pull_request]
- jobs:
- lint (ESLint + Prettier)
- type-check (TypeScript)
- test (Jest + React Testing Library)
- build (Next.js build)
- lighthouse (Lighthouse CI)
- deploy (Vercel)
🎓 Compétences Démontrées
Architecture Logicielle
- ✅ Décomposition en microservices
- ✅ Clean Architecture (Domain-Driven Design)
- ✅ Event-Driven Architecture
- ✅ API Gateway / BFF Pattern
Design Patterns
- ✅ Repository Pattern
- ✅ Service Layer Pattern
- ✅ Dependency Injection
- ✅ Factory Pattern
- ✅ Observer Pattern (Event Bus)
Principes SOLID
- ✅ Single Responsibility Principle
- ✅ Open/Closed Principle
- ✅ Liskov Substitution Principle
- ✅ Interface Segregation Principle
- ✅ Dependency Inversion Principle
Technologies Modernes
- ✅ Next.js 14 (App Router, SSR, ISR)
- ✅ TypeScript (strict mode)
- ✅ Supabase (PostgreSQL, Auth, Realtime, Storage)
- ✅ Tailwind CSS + shadcn/ui
- ✅ Testing (Jest, React Testing Library, Playwright)
📝 Documentation Livrée
docs/
├── specifications/
│ └── cahier-des-charges.md ✅
├── architecture/
│ ├── ARCHITECTURE.md ✅
│ ├── c4-diagrams.md ✅
│ └── ADR/
│ ├── 001-mono-repo.md ✅
│ ├── 002-framework-frontend.md ✅
│ ├── 003-backend-supabase.md ✅
│ ├── 004-architecture-microservices.md ✅
│ └── 005-patterns-conception.md ✅
├── comparaison/
│ ├── comparaison.md 🔲
│ ├── metrics.md 🔲
│ └── screenshots/ 🔲
├── guides/
│ ├── setup-wsl.md 🔲
│ ├── git-workflow.md 🔲
│ ├── coding-standards.md 🔲
│ └── CONTRIBUTING.md 🔲
└── presentation/
├── slides.md 🔲
└── demo-script.md 🔲
⚠️ Risques & Mitigations
| Risque | Probabilité | Impact | Mitigation |
|---|---|---|---|
| Complexité Event Bus | Moyenne | Élevé | Simplifier avec Supabase Realtime, tests robustes |
| Délais Stripe Setup | Faible | Moyen | Utiliser Stripe Test Mode dès le début |
| Supabase Quotas | Faible | Moyen | Plan gratuit suffisant, upgrade si besoin |
| Scope Creep | Élevée | Élevé | US optionnelles clairement identifiées (US-M11, US-M12) |
| Bugs Legacy non maîtrisés | Moyenne | Faible | Liste documentée, testing manuel |
🎬 Prochaines Actions Immédiates
Cette semaine (Semaine 2)
- 🔲 Initialiser Git repository
- 🔲 Configurer pnpm workspaces
- 🔲 Setup ESLint + Prettier + TypeScript
- 🔲 Créer structure apps/ et packages/
- 🔲 Setup Supabase (créer projet, tables auth)
- 🔲 Premier commit "Initial project structure"
Semaine prochaine (Semaine 3)
- 🔲 Commencer Application Legacy (Express.js)
- 🔲 Implémenter US-L01 à US-L04
- 🔲 Introduire premiers bugs intentionnels
Dernière mise à jour : Octobre 2025
Prochaine révision : Fin Sprint 1 (Semaine 4)