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.
124 lines
6.1 KiB
Gherkin
124 lines
6.1 KiB
Gherkin
# 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
|