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,234 @@
|
||||
# language: fr
|
||||
|
||||
@api @navigation @mode-detection @mvp
|
||||
Fonctionnalité: Basculement automatique entre modes voiture et piéton
|
||||
|
||||
En tant que système de navigation
|
||||
Je veux détecter automatiquement le mode de déplacement de l'utilisateur
|
||||
Et basculer entre mode voiture et mode piéton selon la vitesse GPS
|
||||
Afin d'optimiser l'expérience utilisateur sans action manuelle
|
||||
|
||||
Contexte:
|
||||
Étant donné un utilisateur authentifié avec l'application active
|
||||
Et la géolocalisation est activée et autorisée
|
||||
Et les permissions de géolocalisation en arrière-plan sont accordées
|
||||
|
||||
# ============================================================================
|
||||
# DÉTECTION INITIALE DU MODE AU DÉMARRAGE
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Démarrage application à vitesse piéton (0-4 km/h)
|
||||
Étant donné l'utilisateur ouvre l'application
|
||||
Et les 3 premières lectures GPS montrent des vitesses de [0, 2, 3] km/h
|
||||
Quand le système détermine le mode initial
|
||||
Alors le mode "piéton" doit être activé par défaut
|
||||
Et les notifications push géolocalisées doivent être activées
|
||||
Et un rayon de détection de 200m doit être appliqué
|
||||
|
||||
Scénario: Démarrage application en mouvement (≥5 km/h)
|
||||
Étant donné l'utilisateur ouvre l'application
|
||||
Et les 3 premières lectures GPS montrent des vitesses de [30, 35, 32] km/h
|
||||
Quand le système détermine le mode initial
|
||||
Alors le mode "voiture" doit être activé par défaut
|
||||
Et les notifications in-app avec compteur 7s doivent être activées
|
||||
Et l'ETA doit être calculé pour les contenus géolocalisés
|
||||
|
||||
Scénario: Démarrage avec GPS instable - mode par défaut
|
||||
Étant donné l'utilisateur ouvre l'application
|
||||
Et les lectures GPS sont erratiques : [0, 45, 2, 60, 1] km/h
|
||||
Quand le système ne peut pas déterminer le mode avec confiance
|
||||
Alors le mode "piéton" doit être activé par défaut (mode le plus sûr)
|
||||
Et une modal doit demander à l'utilisateur de confirmer son mode
|
||||
Et le choix utilisateur doit être mémorisé pour la session
|
||||
|
||||
# ============================================================================
|
||||
# BASCULEMENT VOITURE → PIÉTON (vitesse <5 km/h soutenue)
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Arrêt prolongé déclenche basculement piéton
|
||||
Étant donné l'utilisateur est en mode voiture
|
||||
Et la vitesse moyenne sur 2 minutes est de 2 km/h (embouteillage ou arrêt)
|
||||
Quand le système détecte cette condition pendant 2 minutes consécutives
|
||||
Alors le mode doit basculer automatiquement vers "piéton"
|
||||
Et une notification toast doit informer : "Mode piéton activé"
|
||||
Et les notifications push géolocalisées doivent être activées
|
||||
Et le cooldown voiture actif doit être annulé
|
||||
|
||||
Scénario: Stationnement confirmé (vitesse = 0 pendant 2 minutes)
|
||||
Étant donné l'utilisateur est en mode voiture
|
||||
Et la vitesse GPS est de 0 km/h pendant 2 minutes consécutives
|
||||
Et la précision GPS est <20m (pas de perte signal)
|
||||
Quand le système détecte l'arrêt prolongé
|
||||
Alors le mode doit basculer vers "piéton"
|
||||
Et une notification doit proposer : "Voulez-vous activer le mode piéton ?"
|
||||
Et si l'utilisateur ne répond pas, le basculement doit être automatique après 30 secondes
|
||||
|
||||
Scénario: Embouteillage prolongé (vitesse <5 km/h mais en mouvement)
|
||||
Étant donné l'utilisateur est en mode voiture à 35 km/h
|
||||
Et la vitesse chute à 3 km/h et oscille entre 0-4 km/h
|
||||
Et cette condition dure 3 minutes
|
||||
Quand le système détecte un mouvement résiduel (pas totalement arrêté)
|
||||
Alors le mode "voiture" doit être maintenu temporairement
|
||||
Mais le calcul ETA doit passer en mode "vitesse lente"
|
||||
Et après 5 minutes <5 km/h, le mode piéton doit être proposé
|
||||
|
||||
Scénario: Feu rouge ou arrêt temporaire ne déclenche PAS de basculement
|
||||
Étant donné l'utilisateur est en mode voiture à 50 km/h
|
||||
Et la vitesse chute à 0 km/h pendant 45 secondes (feu rouge)
|
||||
Quand le système évalue les conditions
|
||||
Alors le mode "voiture" doit être maintenu
|
||||
Car la durée <2 minutes (seuil de basculement)
|
||||
Et aucune notification ne doit être affichée
|
||||
|
||||
# ============================================================================
|
||||
# BASCULEMENT PIÉTON → VOITURE (vitesse ≥5 km/h soutenue)
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Démarrage voiture déclenche basculement automatique
|
||||
Étant donné l'utilisateur est en mode piéton
|
||||
Et la vitesse passe de 0 km/h à 15 km/h en 10 secondes
|
||||
Et la vitesse reste ≥10 km/h pendant 30 secondes
|
||||
Quand le système détecte une accélération soutenue
|
||||
Alors le mode doit basculer automatiquement vers "voiture"
|
||||
Et une notification toast doit informer : "Mode voiture activé"
|
||||
Et les notifications in-app avec ETA doivent être activées
|
||||
Et les notifications push piéton doivent être désactivées
|
||||
|
||||
Scénario: Course à pied ou vélo lent ne déclenche PAS de basculement voiture
|
||||
Étant donné l'utilisateur est en mode piéton
|
||||
Et la vitesse monte à 8 km/h et oscille entre 6-10 km/h
|
||||
Quand le système évalue les conditions
|
||||
Alors le mode "piéton" doit être maintenu
|
||||
Car la vitesse reste <15 km/h (seuil de confiance pour voiture)
|
||||
Et l'utilisateur peut basculer manuellement si nécessaire
|
||||
|
||||
Scénario: Trajet en bus ou vélo rapide (15-25 km/h)
|
||||
Étant donné l'utilisateur est en mode piéton
|
||||
Et la vitesse passe à 20 km/h et reste stable
|
||||
Quand le système détecte une vitesse ≥15 km/h pendant 1 minute
|
||||
Alors une notification doit proposer : "Passer en mode véhicule ?"
|
||||
Et si l'utilisateur accepte, basculer en mode "voiture"
|
||||
Et si l'utilisateur refuse, mémoriser le choix pour 30 minutes
|
||||
|
||||
Scénario: Sortie de transport en commun
|
||||
Étant donné l'utilisateur est en mode piéton
|
||||
Et la vitesse était de 0 km/h (dans le bus)
|
||||
Et la vitesse monte soudainement à 40 km/h (bus démarre)
|
||||
Puis retombe à 2 km/h après 5 minutes (descente du bus)
|
||||
Quand le système détecte ce pattern
|
||||
Alors le mode "piéton" doit être maintenu
|
||||
Et aucun basculement automatique ne doit être déclenché
|
||||
Car les transports en commun sont ambigus
|
||||
|
||||
# ============================================================================
|
||||
# BASCULEMENT AVEC AUDIO-GUIDE EN COURS
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Basculement voiture → piéton pendant audio-guide voiture
|
||||
Étant donné l'utilisateur écoute un audio-guide en mode voiture
|
||||
Et l'utilisateur se gare (vitesse = 0 km/h pendant 2 minutes)
|
||||
Quand le système bascule en mode piéton
|
||||
Alors l'audio-guide doit continuer en mode piéton
|
||||
Et les séquences restantes doivent s'adapter au mode piéton :
|
||||
| voiture | piéton |
|
||||
| Déclenchement automatique GPS | Navigation manuelle |
|
||||
| Distance affichée en mètres | Distance masquée |
|
||||
| Flèche direction | Pas de flèche |
|
||||
Et une notification doit informer : "Audio-guide adapté au mode piéton"
|
||||
|
||||
Scénario: Basculement piéton → voiture pendant audio-guide piéton
|
||||
Étant donné l'utilisateur écoute un audio-guide en mode piéton
|
||||
Et l'audio-guide est configuré pour "piéton uniquement"
|
||||
Et l'utilisateur monte en voiture (vitesse passe à 30 km/h)
|
||||
Quand le système bascule en mode voiture
|
||||
Alors l'audio-guide doit être mis en pause automatiquement
|
||||
Et une notification doit proposer : "Mettre l'audio-guide en pause ?"
|
||||
Et si confirmé, sauvegarder la progression pour reprise ultérieure
|
||||
|
||||
# ============================================================================
|
||||
# GESTION DES TRANSITIONS ET EDGE CASES
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Basculement rapide voiture → piéton → voiture (indécision)
|
||||
Étant donné l'utilisateur est en mode voiture
|
||||
Et la vitesse oscille : 40 km/h → 0 km/h (1 min) → 35 km/h → 0 km/h (1 min)
|
||||
Quand le système détecte une instabilité de mode
|
||||
Alors le mode "voiture" doit être maintenu par défaut
|
||||
Et un délai de stabilisation de 3 minutes doit être appliqué
|
||||
Et aucune notification de basculement ne doit être envoyée
|
||||
|
||||
Scénario: Tunnel ou perte GPS ne déclenche PAS de basculement
|
||||
Étant donné l'utilisateur est en mode voiture à 90 km/h
|
||||
Et le signal GPS est perdu pendant 2 minutes (tunnel)
|
||||
Quand le système détecte l'absence de signal GPS
|
||||
Alors le mode "voiture" doit être maintenu
|
||||
Et la dernière vitesse connue doit être utilisée
|
||||
Et aucun basculement ne doit être déclenché
|
||||
|
||||
Scénario: Utilisateur force le mode manuellement
|
||||
Étant donné l'utilisateur est en mode voiture automatique
|
||||
Et l'utilisateur bascule manuellement en mode piéton via l'interface
|
||||
Quand le basculement manuel est effectué
|
||||
Alors le mode manuel doit être prioritaire pendant 30 minutes
|
||||
Et les basculements automatiques doivent être désactivés pendant cette période
|
||||
Et un flag "manual_override" doit être loggé
|
||||
|
||||
Scénario: Reprise après override manuel
|
||||
Étant donné l'utilisateur a forcé le mode piéton il y a 35 minutes
|
||||
Et la vitesse actuelle est de 60 km/h depuis 5 minutes
|
||||
Quand la période d'override (30 min) expire
|
||||
Alors le système doit reprendre la détection automatique
|
||||
Et basculer en mode voiture car vitesse ≥5 km/h
|
||||
Et notifier l'utilisateur du basculement
|
||||
|
||||
# ============================================================================
|
||||
# IMPACT SUR LES AUTRES FONCTIONNALITÉS
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Basculement annule le cooldown notification voiture
|
||||
Étant donné l'utilisateur est en mode voiture
|
||||
Et un cooldown de 10 minutes est actif (notification ignorée)
|
||||
Quand le mode bascule vers piéton
|
||||
Alors le cooldown doit être immédiatement annulé
|
||||
Et les notifications piéton doivent être activées
|
||||
Car les mécanismes de notification sont différents entre modes
|
||||
|
||||
Scénario: Basculement adapte le rayon de détection géolocalisée
|
||||
Étant donné l'utilisateur est en mode voiture
|
||||
Et le rayon de détection pour contenus géolocalisés est adaptatif (basé sur vitesse)
|
||||
Quand le mode bascule vers piéton
|
||||
Alors le rayon de détection doit être fixé à 200m
|
||||
Et les contenus hors rayon doivent être retirés de la file d'attente
|
||||
Et une nouvelle recherche géospatiale doit être effectuée
|
||||
|
||||
Scénario: Quota notifications indépendant du mode
|
||||
Étant donné l'utilisateur a reçu 4 notifications en mode voiture (quota 4/6)
|
||||
Quand le mode bascule vers piéton
|
||||
Alors le compteur de quota doit être conservé (toujours 4/6)
|
||||
Car le quota de 6/heure s'applique globalement (tous modes confondus)
|
||||
|
||||
# ============================================================================
|
||||
# MÉTRIQUES & ANALYTICS
|
||||
# ============================================================================
|
||||
|
||||
Scénario: Logging des basculements de mode pour analytics
|
||||
Étant donné l'utilisateur bascule de voiture à piéton
|
||||
Quand le basculement est effectué
|
||||
Alors un événement analytics doit être loggé :
|
||||
| event_type | mode_switch |
|
||||
| from_mode | car |
|
||||
| to_mode | pedestrian |
|
||||
| trigger | speed_threshold |
|
||||
| speed_kmh | 1.5 |
|
||||
| duration_previous_mode | 1800 |
|
||||
| manual_override | false |
|
||||
| timestamp | 2026-02-03 14:30:00 |
|
||||
Et ces métriques doivent alimenter le dashboard de monitoring
|
||||
|
||||
Scénario: Détection pattern utilisateur (majoritairement piéton vs voiture)
|
||||
Étant donné l'utilisateur utilise l'application depuis 30 jours
|
||||
Et 80% du temps d'écoute est en mode piéton
|
||||
Quand le système analyse le comportement
|
||||
Alors un flag "primary_mode: pedestrian" doit être défini
|
||||
Et le mode par défaut au démarrage doit être "piéton"
|
||||
Et l'algorithme de recommandation doit favoriser les audio-guides piétons
|
||||
Reference in New Issue
Block a user