Files
roadwave/docs/domains/content/features/audio-guides/navigation-libre-pieton-complet.feature
jpgiannetti 5e5fcf4714 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.
2026-02-07 17:15:02 +01:00

219 lines
12 KiB
Gherkin

# language: fr
@ui @audio-guides @pedestrian @navigation @mvp
Fonctionnalité: Navigation libre complète en mode piéton
En tant qu'utilisateur piéton
Je veux naviguer librement dans un audio-guide sans contrainte d'ordre
Afin de découvrir les points d'intérêt selon mon itinéraire personnel
Contexte:
Étant donné un audio-guide "Visite du Quartier Latin" avec 8 séquences:
| Ordre | Nom | Position GPS | Rayon |
| 1 | Notre-Dame | 48.8534, 2.3488 | 100m |
| 2 | Sainte-Chapelle | 48.8555, 2.3450 | 80m |
| 3 | Panthéon | 48.8462, 2.3464 | 100m |
| 4 | Jardin du Luxembourg | 48.8462, 2.3371 | 150m |
| 5 | Sorbonne | 48.8487, 2.3431 | 70m |
| 6 | Musée de Cluny | 48.8505, 2.3434 | 60m |
| 7 | Rue Mouffetard | 48.8429, 2.3498 | 50m |
| 8 | Arènes de Lutèce | 48.8456, 2.3523 | 80m |
Scénario: Démarrage d'un audio-guide en mode piéton avec navigation libre
Étant donné un utilisateur "alice@roadwave.fr" en mode piéton
Et elle se trouve près de Notre-Dame
Quand elle lance l'audio-guide "Visite du Quartier Latin"
Alors l'écran principal affiche:
| Élément | Contenu |
| Carte interactive | Affichée avec 8 marqueurs |
| Position utilisateur | Marqueur bleu en temps réel |
| Points d'intérêt | Marqueurs numérotés 1-8 |
| Distances | Affichées sur chaque marqueur |
| Point le plus proche | Surligné en vert (Notre-Dame, 50m) |
| Mode de lecture | "Navigation libre" activé par défaut |
| Bouton "Liste" | Affiche la liste des séquences |
Et un événement "AUDIO_GUIDE_STARTED_FREE_NAVIGATION" est enregistré
Et la métrique "audio_guide.started.free_navigation" est incrémentée
Scénario: Déclenchement automatique au point d'intérêt le plus proche
Étant donné un utilisateur "bob@roadwave.fr" en mode piéton
Et il a lancé l'audio-guide "Visite du Quartier Latin"
Et il marche vers Notre-Dame
Quand il entre dans le rayon de 100m de Notre-Dame
Alors l'audio de la séquence #1 "Notre-Dame" démarre automatiquement
Et une notification s'affiche:
| Élément | Contenu |
| Titre | 1/8 - Cathédrale Notre-Dame |
| Distance | Vous êtes arrivé |
| Progression | Barre de lecture audio |
| Actions | [Pause] [Liste] [Carte] |
Et le marqueur Notre-Dame passe de vert à bleu (en cours)
Et un événement "SEQUENCE_AUTO_TRIGGERED" est enregistré
Et la métrique "audio_guide.sequence.auto_triggered" est incrémentée
Scénario: Écoute d'une séquence dans un ordre différent de l'ordre suggéré
Étant donné un utilisateur "charlie@roadwave.fr" en mode piéton
Et il a lancé l'audio-guide et écouté la séquence #1 "Notre-Dame"
Et il décide de se rendre directement au Panthéon (séquence #3)
Quand il marche vers le Panthéon en ignorant la séquence #2
Et entre dans le rayon de 100m du Panthéon
Alors l'audio de la séquence #3 "Panthéon" démarre automatiquement
Et la séquence #2 "Sainte-Chapelle" reste disponible et non écoutée
Et un événement "SEQUENCE_OUT_OF_ORDER" est enregistré
Et la métrique "audio_guide.sequence.out_of_order" est incrémentée
Et la progression affiche: 2/8 séquences écoutées
Scénario: Affichage de la carte avec points d'intérêt colorés par statut
Étant donné un utilisateur "david@roadwave.fr" en mode piéton
Et il a écouté 3 séquences sur 8
Quand il consulte la carte
Alors les marqueurs sont colorés selon leur statut:
| Séquence | Statut | Couleur | Icône |
| Notre-Dame | Écoutée | Bleu | |
| Sainte-Chapelle | Non écoutée | Gris | 2 |
| Panthéon | Écoutée | Bleu | |
| Jardin du Luxembourg| Non écoutée | Gris | 4 |
| Sorbonne | Écoutée | Bleu | |
| Musée de Cluny | Non écoutée | Gris | 6 |
| Rue Mouffetard | En cours | Orange | |
| Arènes de Lutèce | Non écoutée | Gris | 8 |
Et le point le plus proche est surligné avec un halo vert
Et les distances sont affichées en temps réel
Scénario: Consultation de la liste des séquences avec filtres
Étant donné un utilisateur "eve@roadwave.fr" en mode piéton
Quand elle clique sur le bouton "Liste"
Alors une liste des séquences s'affiche:
| Séquence | Distance | Statut | Actions |
| Notre-Dame | 50m | Écoutée | [Réécouter] |
| Sainte-Chapelle | 200m | Non écoutée | [Y aller] [Lire] |
| Panthéon | 350m | Écoutée | [Réécouter] |
| Jardin du Luxembourg| 450m | Non écoutée | [Y aller] [Lire] |
Et elle peut filtrer par:
| Filtre | Options |
| Statut | Toutes / Écoutées / Restantes |
| Tri | Distance / Ordre suggéré / Durée |
Et un compteur affiche: "3/8 séquences écoutées"
Scénario: Lecture manuelle d'une séquence depuis la liste
Étant donné un utilisateur "frank@roadwave.fr" en mode piéton
Et il consulte la liste des séquences
Quand il clique sur "Lire" pour la séquence #5 "Sorbonne"
Alors l'audio de la Sorbonne démarre immédiatement
Et peu importe la distance actuelle (peut être loin du point)
Et un événement "SEQUENCE_MANUAL_PLAY" est enregistré
Et la métrique "audio_guide.sequence.manual_play" est incrémentée
Et un message d'information s'affiche: "Vous écoutez cette séquence hors localisation"
Scénario: Navigation vers un point d'intérêt depuis la liste
Étant donné un utilisateur "grace@roadwave.fr" en mode piéton
Et elle consulte la liste des séquences
Quand elle clique sur "Y aller" pour la séquence #4 "Jardin du Luxembourg"
Alors l'application lance la navigation GPS vers le Jardin du Luxembourg
Et un itinéraire piéton est calculé et affiché sur la carte
Et la distance et le temps estimé sont affichés: "450m - 6 min"
Et des instructions de navigation vocales sont données:
| Instruction |
| Dirigez-vous vers le sud |
| Tournez à gauche dans 100 mètres |
| Vous arrivez à destination |
Et un événement "NAVIGATION_TO_POI_STARTED" est enregistré
Et la métrique "audio_guide.navigation.started" est incrémentée
Scénario: Réécoute d'une séquence déjà complétée
Étant donné un utilisateur "henry@roadwave.fr" en mode piéton
Et il a déjà écouté la séquence #1 "Notre-Dame" en entier
Quand il clique sur "Réécouter" depuis la liste
Alors l'audio de Notre-Dame redémarre depuis le début
Et un événement "SEQUENCE_REPLAYED" est enregistré
Et la métrique "audio_guide.sequence.replayed" est incrémentée
Et la séquence reste marquée comme "Écoutée" (pas de duplication)
Scénario: Pause et reprise d'une séquence en cours
Étant donné un utilisateur "iris@roadwave.fr" en mode piéton
Et elle écoute la séquence #3 "Panthéon" à la position 2min 30s
Quand elle clique sur le bouton "Pause"
Alors l'audio se met en pause
Et la position de lecture est sauvegardée: 2min 30s
Et un événement "SEQUENCE_PAUSED" est enregistré
Quand elle clique sur le bouton "Lecture"
Alors l'audio reprend exactement à 2min 30s
Et un événement "SEQUENCE_RESUMED" est enregistré
Scénario: Affichage de la progression globale de l'audio-guide
Étant donné un utilisateur "jack@roadwave.fr" en mode piéton
Et il a écouté 5 séquences sur 8
Quand il consulte l'écran principal
Alors il voit la progression:
| Élément | Contenu |
| Barre de progression | 5/8 (62%) |
| Séquences restantes | 3 points à découvrir |
| Temps écouté | 42 minutes |
| Distance parcourue | 2.8 km |
| Badge de complétion | Bronze (50%+) |
Et un bouton "Terminer l'audio-guide" est disponible si toutes les séquences sont écoutées
Scénario: Découverte d'un point bonus caché (Easter egg)
Étant donné un audio-guide avec un point bonus secret non listé
Et un utilisateur "kate@roadwave.fr" en mode piéton
Quand elle passe à proximité du point bonus caché (48.8470, 2.3450)
Alors une notification s'affiche: "🎉 Point bonus découvert !"
Et l'audio du point bonus démarre automatiquement
Et un badge "Explorateur" est débloqué
Et un événement "BONUS_POI_DISCOVERED" est enregistré
Et la métrique "audio_guide.bonus.discovered" est incrémentée
Scénario: Notifications de proximité pour les points à venir
Étant donné un utilisateur "luke@roadwave.fr" en mode piéton
Et il marche vers la Sainte-Chapelle
Quand il est à 150m de la Sainte-Chapelle
Alors une notification discrète s'affiche: "Sainte-Chapelle à 150m"
Et un son subtil de notification est joué
Quand il est à 50m
Alors une notification plus visible s'affiche: "Arrivée imminente - Sainte-Chapelle"
Et un événement "POI_PROXIMITY_NOTIFICATION" est enregistré
Et la métrique "audio_guide.proximity.notified" est incrémentée
Scénario: Mode hors ligne avec téléchargement préalable
Étant donné un utilisateur "mary@roadwave.fr" en mode piéton
Et elle a téléchargé l'audio-guide "Visite du Quartier Latin" avant de partir
Quand elle active le mode avion (hors connexion)
Alors la carte s'affiche en mode hors ligne (tiles pré-téléchargées)
Et tous les audios sont disponibles en local
Et la localisation GPS fonctionne normalement
Et les séquences se déclenchent automatiquement hors ligne
Et un événement "AUDIO_GUIDE_OFFLINE_MODE" est enregistré
Et la métrique "audio_guide.offline.used" est incrémentée
Scénario: Partage de la progression avec des amis
Étant donné un utilisateur "nathan@roadwave.fr" en mode piéton
Et il a écouté 4 séquences sur 8
Quand il clique sur "Partager ma progression"
Alors un écran de partage s'ouvre avec:
| Élément | Contenu |
| Message | Je suis en train de découvrir le Quartier Latin !|
| Progression | 4/8 points visités (50%) |
| Carte visuelle | Capture d'écran de la carte avec progression |
| Lien | https://roadwave.fr/share/abc123 |
Et le partage peut être envoyé via:
| Canal | Disponible |
| SMS | Oui |
| WhatsApp | Oui |
| Facebook | Oui |
| Twitter/X | Oui |
Et un événement "AUDIO_GUIDE_PROGRESS_SHARED" est enregistré
Et la métrique "audio_guide.shared" est incrémentée
Scénario: Métriques de performance de la navigation libre
Étant donné que 10 000 utilisateurs ont terminé l'audio-guide en mode navigation libre
Quand les métriques d'usage sont collectées
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur moyenne |
| Taux de complétion | 78% |
| Nombre de séquences écoutées | 6.5/8 |
| Temps moyen de visite | 2h 15min |
| Distance moyenne parcourue | 3.2 km |
| Pourcentage d'ordre non-suggéré | 42% |
| Nombre de réécoutes par séquence | 0.8 |
Et les métriques sont exportées vers le système de monitoring