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:
@@ -0,0 +1,191 @@
|
||||
# language: fr
|
||||
|
||||
@api @audio-guides @navigation @mvp
|
||||
Fonctionnalité: Gestion des points d'intérêt manqués
|
||||
|
||||
En tant qu'utilisateur
|
||||
Je veux pouvoir gérer les points d'intérêt que j'ai manqués
|
||||
Afin de compléter mon expérience audio-guide même après avoir dépassé certains points
|
||||
|
||||
Contexte:
|
||||
Étant donné que le système de gestion des points manqués respecte:
|
||||
| Paramètre | Valeur |
|
||||
| Distance max pour considérer "manqué" | 1 km |
|
||||
| Temps max pour considérer "manqué" | 10 minutes |
|
||||
| Possibilité de retour arrière | Oui |
|
||||
| Lecture différée autorisée | Oui |
|
||||
|
||||
Scénario: Détection automatique d'un point manqué en mode voiture
|
||||
Étant donné un utilisateur "alice@roadwave.fr" en mode voiture à 90 km/h
|
||||
Et elle suit l'audio-guide "Route des Châteaux de la Loire"
|
||||
Et le prochain point d'intérêt est le Château de Chaumont
|
||||
Quand elle dépasse le château sans entrer dans son rayon de déclenchement (400m)
|
||||
Et elle s'éloigne à plus de 1 km du point
|
||||
Alors le système marque le point comme "Manqué"
|
||||
Et une notification discrète s'affiche: "Point manqué : Château de Chaumont"
|
||||
Et le point apparaît dans la section "Points manqués" de la liste
|
||||
Et un événement "POI_MARKED_AS_MISSED" est enregistré avec raison: "out_of_range"
|
||||
Et la métrique "poi.missed.out_of_range" est incrémentée
|
||||
|
||||
Scénario: Affichage de la liste des points manqués
|
||||
Étant donné un utilisateur "bob@roadwave.fr" qui a manqué 3 points sur 10
|
||||
Quand il ouvre la liste des séquences
|
||||
Alors il voit une section dédiée "Points manqués (3)":
|
||||
| Point d'intérêt | Distance actuelle | Actions |
|
||||
| Château de Chaumont | 15 km en arrière | [Écouter] [Y retourner] |
|
||||
| Musée de Cluny | 8 km en arrière | [Écouter] [Y retourner] |
|
||||
| Rue Mouffetard | 2 km en arrière | [Écouter] [Y retourner] |
|
||||
Et un compteur global affiche: "7/10 points visités"
|
||||
Et un événement "MISSED_POIS_LIST_VIEWED" est enregistré
|
||||
Et la métrique "missed_pois.list_viewed" est incrémentée
|
||||
|
||||
Scénario: Écoute différée d'un point manqué sans retour physique
|
||||
Étant donné un utilisateur "charlie@roadwave.fr" qui a manqué le Château de Chaumont
|
||||
Et il est maintenant à 20 km du château
|
||||
Quand il clique sur "Écouter" dans la liste des points manqués
|
||||
Alors l'audio du Château de Chaumont démarre immédiatement
|
||||
Et un bandeau indique: "Écoute différée - Vous n'êtes pas sur place"
|
||||
Et le point reste marqué comme "Manqué mais écouté"
|
||||
Et un événement "MISSED_POI_LISTENED_REMOTE" est enregistré
|
||||
Et la métrique "missed_poi.listened.remote" est incrémentée
|
||||
|
||||
Scénario: Navigation de retour vers un point manqué
|
||||
Étant donné un utilisateur "david@roadwave.fr" qui a manqué le Musée de Cluny
|
||||
Et il est à 5 km du musée
|
||||
Quand il clique sur "Y retourner" dans la liste des points manqués
|
||||
Alors l'application lance la navigation GPS vers le Musée de Cluny
|
||||
Et un itinéraire est calculé et affiché
|
||||
Et l'ETA est affiché: "12 min en voiture"
|
||||
Et un événement "NAVIGATION_TO_MISSED_POI_STARTED" est enregistré
|
||||
Et la métrique "missed_poi.navigation_started" est incrémentée
|
||||
|
||||
Scénario: Retour physique et déclenchement automatique d'un point manqué
|
||||
Étant donné un utilisateur "eve@roadwave.fr" qui a manqué le Château de Chaumont
|
||||
Et elle a cliqué sur "Y retourner"
|
||||
Quand elle arrive dans le rayon de déclenchement du château (400m)
|
||||
Alors l'audio du château démarre automatiquement
|
||||
Et le point passe du statut "Manqué" à "Visité"
|
||||
Et une notification de succès s'affiche: "✓ Point complété : Château de Chaumont"
|
||||
Et un événement "MISSED_POI_COMPLETED" est enregistré
|
||||
Et la métrique "missed_poi.completed" est incrémentée
|
||||
|
||||
Scénario: Proposition automatique de retour pour points manqués à proximité
|
||||
Étant donné un utilisateur "frank@roadwave.fr" qui a manqué la Rue Mouffetard
|
||||
Et il continue son parcours et arrive près d'un autre point
|
||||
Quand le système détecte qu'il est à 800m de la Rue Mouffetard
|
||||
Alors une notification proactive s'affiche: "Point manqué à proximité : Rue Mouffetard (800m). Y aller ?"
|
||||
Et deux boutons sont proposés: [Oui, y aller] [Non, continuer]
|
||||
Et un événement "MISSED_POI_PROXIMITY_SUGGESTION" est enregistré
|
||||
Et la métrique "missed_poi.proximity_suggestion" est incrémentée
|
||||
|
||||
Scénario: Ignorance volontaire d'un point manqué
|
||||
Étant donné un utilisateur "grace@roadwave.fr" qui a manqué le Musée de Cluny
|
||||
Et elle ne souhaite pas y retourner
|
||||
Quand elle fait glisser le point vers la gauche dans la liste
|
||||
Et clique sur "Ignorer définitivement"
|
||||
Alors le point est retiré de la liste des points manqués
|
||||
Et il passe au statut "Ignoré"
|
||||
Et il ne sera plus proposé dans les suggestions
|
||||
Et un événement "MISSED_POI_IGNORED" est enregistré
|
||||
Et la métrique "missed_poi.ignored" est incrémentée
|
||||
|
||||
Scénario: Réinitialisation d'un point ignoré
|
||||
Étant donné un utilisateur "henry@roadwave.fr" qui a ignoré le Musée de Cluny
|
||||
Quand il accède aux paramètres de l'audio-guide
|
||||
Et clique sur "Voir les points ignorés (1)"
|
||||
Alors il voit la liste: "Musée de Cluny - Ignoré"
|
||||
Quand il clique sur "Réactiver"
|
||||
Alors le point repasse en statut "Manqué"
|
||||
Et il réapparaît dans la liste des points manqués
|
||||
Et un événement "MISSED_POI_REACTIVATED" est enregistré
|
||||
Et la métrique "missed_poi.reactivated" est incrémentée
|
||||
|
||||
Scénario: Marquage automatique comme manqué après délai en mode piéton
|
||||
Étant donné un utilisateur "iris@roadwave.fr" en mode piéton
|
||||
Et elle est à 150m du Panthéon depuis 15 minutes (stationnaire)
|
||||
Et elle n'a pas déclenché le point d'intérêt
|
||||
Quand elle reprend sa marche et s'éloigne à plus de 500m
|
||||
Alors le point est marqué comme "Manqué"
|
||||
Et une notification s'affiche: "Point manqué : Panthéon. Voulez-vous y retourner ?"
|
||||
Et un événement "POI_MARKED_AS_MISSED" est enregistré avec raison: "timeout_stationary"
|
||||
Et la métrique "poi.missed.timeout" est incrémentée
|
||||
|
||||
Scénario: Statistiques des points manqués en fin de parcours
|
||||
Étant donné un utilisateur "jack@roadwave.fr" qui a terminé un audio-guide
|
||||
Et il a visité 7 points sur 10, manqué 2 points et ignoré 1 point
|
||||
Quand il consulte l'écran de fin de parcours
|
||||
Alors il voit les statistiques:
|
||||
| Métrique | Valeur |
|
||||
| Points visités | 7/10 (70%) |
|
||||
| Points manqués | 2 (Chaumont, Cluny) |
|
||||
| Points ignorés | 1 (Rue Mouffetard) |
|
||||
| Taux de complétion | 70% |
|
||||
| Badge obtenu | Explorateur Bronze |
|
||||
Et un bouton "Compléter les points manqués" est proposé
|
||||
Et un événement "AUDIO_GUIDE_STATS_VIEWED" est enregistré
|
||||
|
||||
Scénario: Reprise d'un audio-guide pour compléter les points manqués
|
||||
Étant donné un utilisateur "kate@roadwave.fr" qui a terminé un audio-guide avec 2 points manqués
|
||||
Quand elle clique sur "Compléter les points manqués"
|
||||
Alors l'audio-guide est réactivé en mode "Rattrapage"
|
||||
Et seuls les 2 points manqués sont actifs sur la carte
|
||||
Et les points déjà visités sont grisés
|
||||
Et la navigation se concentre uniquement sur les points manqués
|
||||
Et un événement "AUDIO_GUIDE_CATCH_UP_MODE" est enregistré
|
||||
Et la métrique "audio_guide.catch_up.started" est incrémentée
|
||||
|
||||
Scénario: Badge de complétion "Perfectionniste" pour 100% de complétion
|
||||
Étant donné un utilisateur "luke@roadwave.fr" qui a visité 10/10 points
|
||||
Et il a initialement manqué 2 points mais y est retourné
|
||||
Quand il termine l'audio-guide avec 100% de complétion
|
||||
Alors un badge spécial "Perfectionniste" est débloqué
|
||||
Et une animation de célébration est affichée
|
||||
Et un événement "BADGE_PERFECTIONIST_UNLOCKED" est enregistré
|
||||
Et la métrique "badges.perfectionist.unlocked" est incrémentée
|
||||
|
||||
Scénario: Notification push après 24h pour rappel des points manqués
|
||||
Étant donné un utilisateur "mary@roadwave.fr" qui a terminé un audio-guide hier
|
||||
Et elle a manqué 3 points sur 10
|
||||
Quand 24 heures se sont écoulées depuis la fin du parcours
|
||||
Alors une notification push est envoyée:
|
||||
"Vous avez manqué 3 points lors de votre visite du Quartier Latin. Voulez-vous les découvrir ?"
|
||||
Et un lien direct vers la liste des points manqués est inclus
|
||||
Et un événement "MISSED_POIS_REMINDER_SENT" est enregistré
|
||||
Et la métrique "missed_pois.reminder_sent" est incrémentée
|
||||
|
||||
Scénario: Mode "Rattrapage intelligent" avec optimisation de l'itinéraire
|
||||
Étant donné un utilisateur "nathan@roadwave.fr" avec 3 points manqués:
|
||||
| Point | Position actuelle | Distance |
|
||||
| Château de Chaumont | 48.8475, 2.3450 | 12 km |
|
||||
| Musée de Cluny | 48.8505, 2.3434 | 8 km |
|
||||
| Rue Mouffetard | 48.8429, 2.3498 | 5 km |
|
||||
Quand il clique sur "Itinéraire optimisé pour rattrapage"
|
||||
Alors le système calcule l'itinéraire le plus court pour visiter les 3 points:
|
||||
| Ordre | Point | Distance cumulée |
|
||||
| 1 | Rue Mouffetard | 5 km |
|
||||
| 2 | Musée de Cluny | 8.5 km |
|
||||
| 3 | Château de Chaumont | 20.5 km |
|
||||
Et l'ETA total est affiché: "1h 15min en voiture"
|
||||
Et un événement "OPTIMIZED_CATCH_UP_ROUTE_CALCULATED" est enregistré
|
||||
Et la métrique "missed_pois.optimized_route" est incrémentée
|
||||
|
||||
Scénario: Désactivation de la détection automatique des points manqués
|
||||
Étant donné un utilisateur "olive@roadwave.fr" qui préfère une expérience libre
|
||||
Quand elle active l'option "Désactiver la détection des points manqués"
|
||||
Alors les points ne sont jamais marqués comme "Manqués"
|
||||
Et aucune notification de point manqué n'est affichée
|
||||
Et l'utilisateur peut toujours écouter tous les points manuellement
|
||||
Et un événement "MISSED_POIS_DETECTION_DISABLED" est enregistré
|
||||
Et la métrique "missed_pois.detection_disabled" est incrémentée
|
||||
|
||||
Scénario: Métriques de performance de la gestion des points manqués
|
||||
Étant donné que 10 000 utilisateurs ont terminé des audio-guides
|
||||
Quand les métriques sont collectées
|
||||
Alors les indicateurs suivants sont disponibles:
|
||||
| Métrique | Valeur moyenne |
|
||||
| Pourcentage de points manqués par parcours| 18% |
|
||||
| Taux de retour aux points manqués | 35% |
|
||||
| Taux d'écoute différée (sans retour) | 55% |
|
||||
| Taux d'ignorance définitive | 10% |
|
||||
| Taux de complétion après rattrapage | 92% |
|
||||
Et les métriques sont exportées vers le système de monitoring
|
||||
Reference in New Issue
Block a user