refactor(docs): réorganiser la documentation selon principes DDD

Réorganise la documentation du projet selon les principes du Domain-Driven Design (DDD) pour améliorer la cohésion, la maintenabilité et l'alignement avec l'architecture modulaire du backend.

**Structure cible:**
```
docs/domains/
├── README.md (Context Map)
├── _shared/ (Core Domain)
├── recommendation/ (Supporting Subdomain)
├── content/ (Supporting Subdomain)
├── moderation/ (Supporting Subdomain)
├── advertising/ (Generic Subdomain)
├── premium/ (Generic Subdomain)
└── monetization/ (Generic Subdomain)
```

**Changements effectués:**

Phase 1: Création de l'arborescence des 7 bounded contexts
Phase 2: Déplacement des règles métier (01-19) vers domains/*/rules/
Phase 3: Déplacement des diagrammes d'entités vers domains/*/entities/
Phase 4: Déplacement des diagrammes flux/états/séquences vers domains/*/
Phase 5: Création des README.md pour chaque domaine
Phase 6: Déplacement des features Gherkin vers domains/*/features/
Phase 7: Création du Context Map (domains/README.md)
Phase 8: Mise à jour de mkdocs.yml pour la nouvelle navigation
Phase 9: Correction automatique des liens internes (script fix-markdown-links.sh)
Phase 10: Nettoyage de l'ancienne structure (regles-metier/, diagrammes/, features/)

**Configuration des tests:**
- Makefile: godog run docs/domains/*/features/
- scripts/generate-bdd-docs.py: features_dir → docs/domains

**Avantages:**
 Cohésion forte: toute la doc d'un domaine au même endroit
 Couplage faible: domaines indépendants, dépendances explicites
 Navigabilité améliorée: README par domaine = entrée claire
 Alignement code/docs: miroir de backend/internal/
 Onboarding facilité: exploration domaine par domaine
 Tests BDD intégrés: features au plus près des règles métier

Voir docs/REFACTOR-DDD.md pour le plan complet.
This commit is contained in:
jpgiannetti
2026-02-07 17:15:02 +01:00
parent 78422bb2c0
commit 5e5fcf4714
227 changed files with 1413 additions and 1967 deletions

View File

@@ -0,0 +1,123 @@
# language: fr
@api @audio-guides @content-creation @mvp
Fonctionnalité: Rayon de déclenchement configurable par le créateur
En tant que créateur de contenu
Je veux configurer le rayon de déclenchement de chaque point d'intérêt
Afin d'adapter l'expérience selon le type de lieu et le contexte
Contexte:
Étant donné que les rayons configurables respectent:
| Paramètre | Valeur |
| Rayon minimum | 10 mètres |
| Rayon maximum | 500 mètres |
| Rayon par défaut | 100 mètres |
| Ajustement | Par pas de 10m |
Scénario: Configuration du rayon lors de la création d'une séquence
Étant donné un créateur "alice@roadwave.fr" qui ajoute un point d'intérêt
Quand elle place un marqueur pour "Cathédrale Notre-Dame"
Alors un slider de rayon s'affiche avec:
| Élément | Valeur |
| Rayon actuel | 100m (défaut) |
| Rayon minimum | 10m |
| Rayon maximum | 500m |
| Visualisation | Cercle sur la carte |
Et elle peut ajuster le rayon à 150m
Alors le cercle sur la carte s'agrandit à 150m de rayon
Et un événement "POI_RADIUS_CONFIGURED" est enregistré avec rayon: 150
Et la métrique "poi.radius.configured" est incrémentée
Scénario: Rayon petit pour monuments précis (10-50m)
Étant donné un créateur "bob@roadwave.fr" qui crée un audio-guide urbain
Quand il configure un point pour une statue spécifique
Et définit le rayon à 20m
Alors le déclenchement sera très précis (proximité immédiate)
Et le système valide que le rayon est suffisant
Et un événement "POI_RADIUS_SMALL" est enregistré
Et la métrique "poi.radius.small" est incrémentée
Scénario: Rayon large pour zones étendues (200-500m)
Étant donné un créateur "charlie@roadwave.fr" qui crée un audio-guide de parc
Quand il configure un point pour "Jardin du Luxembourg"
Et définit le rayon à 300m
Alors le déclenchement sera anticipé (approche du parc)
Et le système valide que le rayon n'est pas excessif
Et un événement "POI_RADIUS_LARGE" est enregistré
Et la métrique "poi.radius.large" est incrémentée
Scénario: Visualisation en temps réel du rayon sur la carte
Étant donné un créateur "david@roadwave.fr" qui ajuste un rayon
Quand il déplace le slider de 100m à 250m
Alors le cercle sur la carte s'agrandit en temps réel
Et la zone de déclenchement est colorée en semi-transparent
Et le rayon en mètres est affiché sur la carte
Et un événement "POI_RADIUS_VISUALIZED" est enregistré
Scénario: Suggestions de rayon basées sur le type de lieu
Étant donné un créateur "eve@roadwave.fr" qui ajoute un POI
Quand elle sélectionne le type "Monument"
Alors le système suggère un rayon de 50m
Quand elle sélectionne le type "Parc/Jardin"
Alors le système suggère un rayon de 200m
Quand elle sélectionne le type "Vue panoramique"
Alors le système suggère un rayon de 100m
Et un événement "POI_RADIUS_SUGGESTED" est enregistré
Scénario: Test de simulation du déclenchement
Étant donné un créateur "frank@roadwave.fr" qui configure un rayon de 150m
Quand il clique sur "Tester le déclenchement"
Alors une simulation GPS démarre
Et il peut voir à quelle distance le point se déclencherait
Et ajuster le rayon si nécessaire
Et un événement "POI_RADIUS_TESTED" est enregistré
Scénario: Modification du rayon après publication
Étant donné un créateur "grace@roadwave.fr" avec audio-guide publié
Et elle constate que le rayon de 50m est trop petit (retours utilisateurs)
Quand elle modifie le rayon à 120m
Alors la modification prend effet immédiatement
Et tous les futurs déclenchements utilisent le nouveau rayon
Et un événement "POI_RADIUS_UPDATED" est enregistré
Scénario: Détection de chevauchements entre rayons
Étant donné un créateur "henry@roadwave.fr" avec 2 points proches
Quand les cercles de rayon se chevauchent à plus de 50%
Alors un avertissement s'affiche: "Attention: chevauchement détecté"
Et une suggestion est proposée: "Réduire les rayons ou espacer les points"
Et un événement "POI_RADIUS_OVERLAP_DETECTED" est enregistré
Scénario: Rayons adaptatifs selon le mode de déplacement
Étant donné un créateur "iris@roadwave.fr" qui configure un point
Quand elle active "Rayons adaptatifs"
Alors le système configure automatiquement:
| Mode | Rayon suggéré |
| Piéton | 80m |
| Vélo | 120m |
| Voiture | 300m |
Et les utilisateurs bénéficient du rayon optimal selon leur mode
Et un événement "POI_RADIUS_ADAPTIVE" est enregistré
Scénario: Statistiques d'efficacité des rayons
Étant donné un créateur "jack@roadwave.fr" avec audio-guide publié
Quand il consulte les statistiques de ses POI
Alors il voit pour chaque point:
| Point | Rayon | Taux déclenchement | Taux manqué |
| Notre-Dame | 100m | 95% | 5% |
| Sainte-Chapelle| 50m | 78% | 22% |
| Panthéon | 150m | 98% | 2% |
Et des suggestions d'optimisation sont proposées
Et un événement "POI_RADIUS_STATS_VIEWED" est enregistré
Scénario: Métriques de performance des rayons configurés
Étant donné que 5000 POI ont été configurés
Quand les métriques sont collectées
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur moyenne |
| Rayon moyen configuré | 125m |
| Rayon le plus petit utilisé | 15m |
| Rayon le plus grand utilisé | 450m |
| Taux d'ajustement après tests | 35% |
| Taux de déclenchement réussi | 88% |
Et les métriques sont exportées vers le monitoring