You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

752 lines
22 KiB
Markdown

# 📋 Cahier des Charges - BricoLoc 2.0
## Projet de Refonte Architecturale
**Version** : 1.0
**Date** : Octobre 2025
**Statut** : Validé
**Type** : Projet Académique - Architecture Logicielle
---
## 📑 Table des Matières
1. [Contexte du Projet](#contexte-du-projet)
2. [Problématique](#problématique)
3. [Objectifs](#objectifs)
4. [Périmètre Fonctionnel](#périmètre-fonctionnel)
5. [Périmètre Technique](#périmètre-technique)
6. [Architecture Proposée](#architecture-proposée)
7. [Contraintes](#contraintes)
8. [Livrables](#livrables)
9. [Critères de Succès](#critères-de-succès)
10. [Planning & Phases](#planning--phases)
---
## 🏢 Contexte du Projet
### Entreprise
**BricoLoc** est une entreprise de location d'outils en ligne (B2C) basée à Toulouse, avec **10 entrepôts** en France :
- Toulouse (siège), Paris, Nancy, Strasbourg
- Rennes, Nantes, Bordeaux, Montpellier, Avignon, Ajaccio
**Effectifs** : ~30 employés (Direction, Commercial, Logistique, DSI)
### Application Actuelle (Legacy)
**Mise en service** : 2013
**Technologies** :
- Frontend : Spring Framework 5 (Java) + Apache Tomcat
- Backend : Java EE 6 + WebLogic Server
- BDD : Oracle 11g R2 (2 serveurs)
- Reverse Proxy : Apache HTTP Server
**Évolution** : Architecture peu évolutive depuis 12 ans
---
## ❌ Problématique
### Problèmes Critiques Identifiés
#### 1. **Architecture Monolithique Rigide**
- Couplage fort entre toutes les couches
- Logique métier éparpillée (frontend, backend, PL/SQL)
- Impossible à faire évoluer sans tout casser
- Single point of failure
#### 2. **Performance Dégradée**
- Temps de réponse > 3 secondes
- Base de données surchargée (tables > 150 colonnes)
- Pas de cache efficace
- Requêtes SQL non optimisées
#### 3. **Incohérence des Stocks** ⚠️ (Problème Majeur)
- Synchronisation quotidienne par batch CSV
- Décalage de **24h** entre ERP et application
- Réservations sur stock inexistant
- Perte de clients et insatisfaction
#### 4. **Maintenance Cauchemardesque**
- 80% du temps en maintenance corrective
- Régressions fréquentes (effets de bord)
- Code spaghetti accumulé sur 12 ans
- Documentation obsolète
- Aucun test automatisé
#### 5. **Expérience Utilisateur Obsolète**
- Design années 2010
- Pas responsive (mobile cassé)
- Navigation lente (rechargement complet)
- Bugs fréquents (filtres, pagination, paiement)
#### 6. **Scalabilité Limitée**
- Scaling vertical uniquement (coûts exponentiels)
- Impossibilité de scaler par fonction
- Expansion européenne bloquée
#### 7. **Solution Marque Blanche Non Viable**
- Déploiement complexe chez les partenaires
- Configuration difficile
- Peu de succès commercial
---
## 🎯 Objectifs
### Objectifs Principaux
#### 1. **Démontrer la Maîtrise de l'Architecture Logicielle** 🏛️
- Appliquer les **principes SOLID**
- Implémenter **Clean Architecture**
- Utiliser des **Design Patterns** reconnus
- Concevoir une **architecture microservices hybride**
#### 2. **Résoudre les Problèmes Critiques**
- ✅ Stocks en **temps réel** (fin des incohérences)
- ✅ Performance optimale (< 500ms)
- ✅ Zéro régression (tests automatisés)
- ✅ UX moderne (responsive, fluide)
- ✅ Scalabilité horizontale
#### 3. **Créer une Comparaison Concrète**
- Application Legacy simulée (avec bugs volontaires)
- Application Moderne fonctionnelle
- Métriques quantifiables (performance, qualité, maintenabilité)
#### 4. **Préparer l'Expansion Européenne** 🌍
- Architecture scalable
- Support multi-langues (prêt)
- Multi-devises (prêt)
- Déploiement facilité (cloud-ready)
---
## 📦 Périmètre Fonctionnel
### Fonctionnalités Implémentées (MVP)
#### ✅ Application Client (B2C)
##### EF-01 : Catalogue d'Outils
- Parcourir le catalogue par catégories
- Filtrer (catégorie, prix, disponibilité)
- Recherche intelligente
- Tri dynamique
##### EF-03 : Fiche Outil Détaillée
- Informations complètes (prix, description, specs)
- Galerie d'images
- Disponibilité par entrepôt
- Documentation technique
##### EF-04 : Calendrier des Disponibilités
- Vue calendrier interactive
- Disponibilité en temps réel ⚡
- Sélection de dates
##### EF-02 : Comparateur de Prix (simplifié)
- Prix comparatifs (données mockées)
- Affichage dans fiche produit
---
#### ✅ Authentification & Utilisateurs
##### EF-05 : Inscription
- Formulaire complet
- Type client (particulier/professionnel)
- Validation Zod
##### EF-06 : Authentification
- Connexion sécurisée (Supabase Auth)
- Gestion JWT
- Row Level Security (RLS)
##### EF-07 : Espace Personnel
- Dashboard utilisateur
- Historique des réservations
- Profil éditable
---
#### ✅ Réservation & Paiement
##### EF-08 : Réservation
- Formulaire multi-étapes
- Sélection dates + entrepôt
- Calcul prix en temps réel
- Vérification disponibilité
##### EF-09 : Paiement
- Interface Stripe (simulée)
- Confirmation sécurisée
- Génération facture (mock)
##### EF-10 : Modes de Livraison
- Récupération sur place
- Livraison à domicile (si outil < 50kg)
---
#### ✅ Gestion des Stocks
##### EF-11 : Stocks Temps Réel ⚡ (Amélioration Majeure)
- Disponibilité en temps réel (Supabase Realtime)
- Stocks par entrepôt (10 entrepôts)
- Réservation automatique lors de la confirmation
- Synchronisation immédiate (vs 24h avant)
---
### 🚫 Fonctionnalités Hors Périmètre (Phase 1)
Les fonctionnalités suivantes seront documentées mais **non implémentées** dans la version de démonstration :
-**EF-12 à EF-16** : Gestion administrative (relation client, achats, transporteurs)
-**EF-17 à EF-18** : Facturation et synchronisation ERP SAP
-**EF-19** : Business Intelligence / PowerBI
-**EF-20** : Interface Admin complète
-**EF-21** : Solution Marque Blanche
-**EF-22 à EF-23** : Expansion géographique et B2B grands comptes
-**Location P2P** (particuliers entre eux)
**Justification** : Focus sur la démonstration architecturale (qualité > quantité)
---
## 🏗️ Périmètre Technique
### Architecture
#### Style Architectural : **Microservices Hybride**
Décomposition en **6 microservices** :
| Service | Responsabilité | Technologies |
|---------|----------------|--------------|
| **Auth Service** | Authentification, JWT, RBAC | Supabase Auth |
| **Catalogue Service** | CRUD outils, recherche, filtres | Next.js API + Supabase |
| **Reservation Service** | Réservations, disponibilités | Next.js API + Supabase |
| **Inventory Service** | Stocks temps réel, entrepôts | Next.js API + Supabase Realtime |
| **Payment Service** | Paiement, transactions | Next.js API + Stripe Mock |
| **Notification Service** | Emails, notifications | Next.js API + Resend |
#### Communication
- **Synchrone** : REST API (HTTP)
- **Asynchrone** : Event Bus (Supabase Realtime Channels)
#### API Gateway / BFF
- Next.js agit comme Backend For Frontend
- Agrégation des appels microservices
- Orchestration de la logique métier
#### Architecture Interne (Clean Architecture)
Chaque microservice implémente :
```
├── domain/ # Entities, business rules
├── application/ # Use cases, services
└── infrastructure/ # Repositories, DB access
```
---
### Stack Technique
#### 🕰️ **Application Legacy**
| Couche | Technologie |
|--------|-------------|
| Frontend | HTML5, CSS3, JavaScript Vanilla, jQuery |
| Backend | Node.js + Express + EJS |
| Base de données | SQLite (fichier local) |
| Auth | Sessions côté serveur, hash MD5 |
| Design | Années 2010 (volontairement daté) |
**Bugs volontaires** :
- Incohérence stocks (synchro quotidienne simulée)
- Erreurs aléatoires (paiement : 20% échec)
- Performance dégradée (délais artificiels)
- Navigation cassée, filtres qui se réinitialisent
---
#### ⚡ **Application Moderne**
| Couche | Technologie | Version |
|--------|-------------|---------|
| **Framework** | Next.js (App Router) | 14+ |
| **Langage** | TypeScript | 5+ |
| **UI Library** | React | 18+ |
| **Styling** | Tailwind CSS | 3+ |
| **Components** | shadcn/ui | Latest |
| **Backend** | Next.js API Routes | - |
| **BDD** | Supabase (PostgreSQL) | Latest |
| **Auth** | Supabase Auth | Latest |
| **Realtime** | Supabase Realtime | Latest |
| **ORM** | Prisma (local dev) | 5+ |
| **Validation** | Zod | 3+ |
| **Forms** | React Hook Form | 7+ |
| **State** | React Query + Zustand | Latest |
| **Animations** | Framer Motion | Latest |
| **Paiement** | Stripe (mock) | - |
| **Emails** | Resend (mock) | - |
---
### Infrastructure
| Service | Technologie | Usage |
|---------|-------------|-------|
| **Hosting Frontend** | Vercel | Next.js moderne |
| **Hosting Legacy** | Render / Heroku | Node.js legacy |
| **Base de données** | Supabase Cloud | PostgreSQL + Realtime |
| **Storage** | Supabase Storage | Images outils |
| **CI/CD** | GitHub Actions | Tests + Deploy |
| **Monitoring** | Vercel Analytics | Performance |
---
### Environnement de Développement
- **OS** : WSL (Ubuntu)
- **Node.js** : 20+ LTS
- **Package Manager** : pnpm (mono-repo)
- **IDE** : VS Code
- **Git** : Workflow feature branches
- **Linting** : ESLint + Prettier
- **Testing** : Jest + React Testing Library
---
## 🏛️ Architecture Proposée
### Vue d'Ensemble Microservices
```
┌─────────────────────────────────────────────┐
│ Client (Next.js SSR/CSR) │
└────────────────┬────────────────────────────┘
┌────────────────▼────────────────────────────┐
│ API Gateway / BFF (Next.js API) │
└─┬──────┬──────┬──────┬──────┬──────┬───────┘
│ │ │ │ │ │
▼ ▼ ▼ ▼ ▼ ▼
┌─────┐┌─────┐┌─────┐┌─────┐┌─────┐┌─────┐
│Auth ││Cata-││Reser││Inven││Pay- ││Noti-│
│Svc ││logue││vation││tory ││ment ││fica-│
│ ││Svc ││Svc ││Svc ││Svc ││tion │
└──┬──┘└──┬──┘└──┬──┘└──┬──┘└──┬──┘└──┬──┘
│ │ │ │ │ │
└──────┴──────┴──────┴──────┴──────┘
┌──────▼──────┐
│ Event Bus │ (Supabase Realtime)
└──────┬──────┘
┌──────▼──────┐
│ Supabase │ (PostgreSQL + Auth + Storage)
└─────────────┘
```
### Principes Architecturaux Appliqués
#### SOLID
- ✅ Single Responsibility (services focalisés)
- ✅ Open/Closed (extension via interfaces)
- ✅ Liskov Substitution (implémentations interchangeables)
- ✅ Interface Segregation (interfaces spécifiques)
- ✅ Dependency Inversion (dépendances vers abstractions)
#### Clean Architecture
- ✅ Couches découplées (domain → application → infrastructure)
- ✅ Indépendance des frameworks
- ✅ Testabilité maximale
- ✅ Indépendance de la BDD
#### Patterns
- ✅ Repository Pattern (abstraction data)
- ✅ Service Layer (logique métier)
- ✅ Dependency Injection
- ✅ Factory Pattern
- ✅ Observer Pattern (events)
- ✅ API Gateway / BFF
---
## ⚠️ Contraintes
### Contraintes Techniques
| Contrainte | Description |
|------------|-------------|
| **Mono-repo** | Structure unique pour les 2 apps |
| **WSL** | Développement sous Linux (WSL) |
| **Supabase** | Backend obligatoire (MCP disponible) |
| **TypeScript** | Moderne app uniquement |
| **Next.js 14** | App Router (pas Pages Router) |
| **pnpm** | Package manager pour workspace |
### Contraintes Fonctionnelles
| Contrainte | Description |
|------------|-------------|
| **2 applications** | Legacy ET Moderne (fonctionnelles) |
| **Mêmes fonctionnalités** | Catalogue, réservation, paiement, etc. |
| **Vraies BDD** | SQLite (legacy) + Supabase (moderne) |
| **Authentification réelle** | Inscription/connexion fonctionnelles |
| **Données de test** | ~50 outils, 10 entrepôts |
### Contraintes Organisationnelles
| Contrainte | Description |
|------------|-------------|
| **Équipe** | 1-2 personnes (solo + 1 possible) |
| **Durée** | 6-7 semaines |
| **Contexte** | Projet académique (pas production) |
| **Ressources** | Tier gratuit Supabase/Vercel |
---
## 📦 Livrables
### 1. Code Source ✅
#### Repository Git
- [x] Structure mono-repo complète
- [x] Application Legacy fonctionnelle
- [x] Application Moderne fonctionnelle
- [x] Scripts de seed (données de test)
- [x] Configuration complète (ESLint, Prettier, TypeScript)
#### Qualité du Code
- [ ] Tests unitaires (coverage > 70%)
- [ ] Tests d'intégration
- [ ] CI/CD fonctionnel (GitHub Actions)
- [ ] Linting sans erreurs
- [ ] TypeScript strict mode
---
### 2. Documentation Architecture 📚
#### Documents Principaux
- [x] **README.md** (vue d'ensemble)
- [x] **ARCHITECTURE.md** (architecture détaillée)
- [x] **Cahier des Charges** (ce document)
- [ ] **ADR** (Architecture Decision Records)
- ADR-001 : Mono-repo
- ADR-002 : Next.js vs alternatives
- ADR-003 : Supabase backend
- ADR-004 : Architecture microservices
- ADR-005 : Patterns (Repository, Service Layer)
#### Diagrammes
- [ ] **Diagrammes C4** (Mermaid)
- Level 1 : Context
- Level 2 : Container
- Level 3 : Component (Reservation Service)
- Level 4 : Code (optionnel)
- [ ] **Diagrammes de séquence** (flux utilisateur)
- [ ] **Schéma base de données** (ERD)
#### Guides
- [ ] **Development Setup** (WSL, installation)
- [ ] **Coding Standards** (conventions)
- [ ] **Git Workflow** (branching strategy)
- [ ] **CONTRIBUTING.md** (guide de contribution)
---
### 3. Documentation Comparative 📊
- [ ] **Tableau comparatif** (architecture, performance, qualité)
- [ ] **Métriques Lighthouse** (legacy vs moderne)
- [ ] **Analyse de complexité** (code, couplage, cohésion)
- [ ] **Screenshots côte à côte**
---
### 4. Applications Déployées 🚀
- [ ] **Legacy App** : URL publique (Render/Heroku)
- [ ] **Modern App** : URL publique (Vercel)
- [ ] **Accessibles 24/7** pour démonstration
---
### 5. Présentation Académique 🎓
- [ ] **Slides** (20-30 slides)
- Contexte et problématique
- Architecture Legacy (problèmes)
- Architecture Moderne (solutions)
- Démonstration des patterns
- Métriques et résultats
- Retour d'expérience
- [ ] **Live Demo** (15 min)
- [ ] **Vidéo de démonstration** (5-10 min, backup)
---
## ✅ Critères de Succès
### Critères Techniques
| Critère | Objectif | Mesure |
|---------|----------|--------|
| **Performance** | Moderne < 500ms | Lighthouse Performance > 90 |
| **Accessibilité** | WCAG 2.1 AA | Lighthouse Accessibility = 100 |
| **SEO** | Optimisé | Lighthouse SEO = 100 |
| **Tests** | Coverage élevé | > 70% |
| **TypeScript** | Zéro erreur | `tsc --noEmit` = 0 errors |
| **Linting** | Code propre | ESLint = 0 errors |
### Critères Fonctionnels
| Critère | Description |
|---------|-------------|
| ✅ **2 apps fonctionnelles** | Legacy ET Moderne déployées |
| ✅ **Auth complète** | Inscription, connexion, profil |
| ✅ **Catalogue** | 50 outils, recherche, filtres |
| ✅ **Réservation** | Formulaire, calcul prix, confirmation |
| ✅ **Paiement simulé** | Interface Stripe mock fonctionnelle |
| ✅ **Stocks temps réel** | Supabase Realtime actif |
| ✅ **Responsive** | Mobile, tablet, desktop |
### Critères Architecturaux (Prioritaire 🏛️)
| Critère | Description |
|---------|-------------|
| ✅ **Microservices** | 6 services identifiés et implémentés |
| ✅ **Clean Architecture** | Couches respectées par service |
| ✅ **SOLID** | Principes appliqués et démontrables |
| ✅ **Patterns** | Repository, Service Layer, DI, Factory |
| ✅ **Event-Driven** | Communication asynchrone fonctionnelle |
| ✅ **API Gateway** | BFF avec orchestration |
| ✅ **Documentation** | ADR complets, diagrammes C4 |
### Critères de Comparaison
| Métrique | Legacy | Moderne | Objectif |
|----------|--------|---------|----------|
| Lighthouse Score | < 60 | > 95 | +58% minimum |
| Temps chargement | > 3s | < 0.5s | -83% minimum |
| Bugs | 5+ volontaires | 0 | -100% |
| Maintenabilité | Faible | Élevée | Démontrable |
| Tests | 0% | > 70% | +70% |
---
## 📅 Planning & Phases
### Phase 1 : Fondations (Semaine 1-2) ✅ ACTUEL
**Durée** : 2 semaines
#### Objectifs
- [x] Structure du mono-repo
- [x] Documentation architecture (README, ARCHITECTURE.md, Cahier des Charges)
- [ ] ADR initiaux (5 premiers)
- [ ] Diagrammes C4
- [ ] Roadmap détaillée
- [ ] Configuration pnpm workspace
- [ ] Git initialized
#### Livrables
- Documentation complète
- Structure projet propre
- Premier commit Git
---
### Phase 2 : Application Legacy (Semaine 3-4)
**Durée** : 2 semaines
#### Objectifs
- [ ] Setup Express + SQLite
- [ ] Authentification (sessions, MD5)
- [ ] Catalogue d'outils (EJS templates)
- [ ] Réservation + Paiement (formulaires basiques)
- [ ] Espace personnel
- [ ] Bugs volontaires intégrés
- [ ] Design années 2010
- [ ] Déploiement Render/Heroku
#### Livrables
- Application Legacy fonctionnelle et déployée
---
### Phase 3 : Setup Moderne (Semaine 5)
**Durée** : 1 semaine
#### Objectifs
- [ ] Setup Next.js 14 + TypeScript
- [ ] Configuration Supabase
- [ ] Setup shadcn/ui + Tailwind
- [ ] Structure microservices (dossiers)
- [ ] Configuration Prisma (optionnel)
- [ ] Authentification Supabase Auth
#### Livrables
- Squelette application moderne
- Authentification fonctionnelle
---
### Phase 4 : Microservices Métier (Semaine 6-7)
**Durée** : 2 semaines
#### Objectifs
- [ ] **Catalogue Service** : CRUD, recherche, filtres
- [ ] **Reservation Service** : Création, vérification, calcul prix
- [ ] **Inventory Service** : Stocks temps réel (Realtime)
- [ ] **Payment Service** : Mock Stripe
- [ ] **Notification Service** : Emails simulés
- [ ] Event Bus : Communication asynchrone
- [ ] Tests unitaires par service
#### Livrables
- 5 microservices fonctionnels
- Communication inter-services
---
### Phase 5 : Frontend & Intégration (Semaine 8)
**Durée** : 1 semaine
#### Objectifs
- [ ] Pages Next.js (catalogue, détail, réservation)
- [ ] Composants shadcn/ui
- [ ] Intégration avec microservices (API calls)
- [ ] Formulaire multi-étapes (réservation)
- [ ] Espace personnel (dashboard)
- [ ] Responsive design
- [ ] Animations Framer Motion
#### Livrables
- Frontend complet et responsive
- Application moderne déployée (Vercel)
---
### Phase 6 : Tests & Qualité (Semaine 9)
**Durée** : 1 semaine
#### Objectifs
- [ ] Tests unitaires (services, use cases)
- [ ] Tests d'intégration (API)
- [ ] Tests E2E (optionnel)
- [ ] Lighthouse audit
- [ ] Correction bugs
- [ ] Optimisations performance
- [ ] CI/CD GitHub Actions
#### Livrables
- Tests coverage > 70%
- Lighthouse scores > 90
- CI/CD fonctionnel
---
### Phase 7 : Documentation & Démo (Semaine 10)
**Durée** : 1 semaine
#### Objectifs
- [ ] Finaliser ADR
- [ ] Compléter diagrammes C4
- [ ] Documentation comparative (métriques)
- [ ] Screenshots legacy vs moderne
- [ ] Vidéo de démonstration (10 min)
- [ ] Slides de présentation (30 slides)
- [ ] Répétition de la démo
#### Livrables
- Documentation complète
- Présentation prête
- Vidéo de backup
---
## 📈 Estimation de Charge
| Phase | Durée | Charge (heures) |
|-------|-------|-----------------|
| Phase 1 : Fondations | 2 sem | 30h |
| Phase 2 : Legacy App | 2 sem | 40h |
| Phase 3 : Setup Moderne | 1 sem | 20h |
| Phase 4 : Microservices | 2 sem | 50h |
| Phase 5 : Frontend | 1 sem | 30h |
| Phase 6 : Tests | 1 sem | 25h |
| Phase 7 : Documentation | 1 sem | 20h |
| **TOTAL** | **10 sem** | **215h** |
**Charge hebdomadaire** : ~20-25h (mi-temps)
---
## 🎯 Indicateurs de Réussite
### Réussite Minimale ⭐
- 2 applications fonctionnelles (même simples)
- Documentation architecture claire
- Démonstration de quelques patterns
- Comparaison basique
### Réussite Attendue ⭐⭐⭐
- 2 applications complètes et déployées
- Architecture microservices démontrée
- Patterns SOLID + Clean Architecture appliqués
- Documentation exhaustive (ADR, C4)
- Métriques quantifiables
- Présentation convaincante
### Réussite Exceptionnelle ⭐⭐⭐⭐⭐
- Tout ci-dessus +
- Tests coverage > 80%
- CI/CD complet
- Observabilité (logs, metrics)
- Feature additionnelle (P2P, Admin, etc.)
- Contribution open-source (article, talk)
---
## 📝 Notes & Annexes
### Risques Identifiés
| Risque | Probabilité | Impact | Mitigation |
|--------|-------------|--------|------------|
| Sous-estimation temps | Moyenne | Élevé | Buffer de 1 semaine |
| Complexité microservices | Faible | Moyen | Simplification si besoin |
| Problème Supabase | Faible | Élevé | Plan B : Firebase/PocketBase |
| Camarade ne rejoint pas | Élevée | Faible | Projet solo viable |
### Ressources Externes
- **Supabase MCP** : Disponible et configuré ✅
- **Documentation Supabase** : https://supabase.com/docs
- **Documentation Next.js** : https://nextjs.org/docs
- **shadcn/ui** : https://ui.shadcn.com
- **Clean Architecture** : Blog Uncle Bob
---
## ✍️ Signatures & Validation
**Porteur du projet** : [Nom]
**Encadrant académique** : [Nom]
**Date de validation** : Octobre 2025
---
**Version** : 1.0
**Statut** : ✅ Validé
**Prochaine révision** : À la fin de chaque phase
---
*Ce cahier des charges est un document vivant, mis à jour selon l'avancement du projet.*