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.
240 lines
11 KiB
Gherkin
240 lines
11 KiB
Gherkin
# language: fr
|
|
Fonctionnalité: Notifications contextuelles selon le mode de déplacement
|
|
En tant qu'auditeur
|
|
Je veux recevoir des notifications adaptées à mon contexte
|
|
Afin d'être informé sans être distrait en conduisant
|
|
|
|
Contexte:
|
|
Étant donné que l'API RoadWave est disponible
|
|
Et que je suis connecté en tant qu'auditeur
|
|
Et que j'ai activé les notifications
|
|
|
|
Scénario: Détection automatique du contexte en voiture
|
|
Étant donné que ma vitesse GPS est de 50 km/h
|
|
Quand le système détecte mon contexte
|
|
Alors je suis identifié comme "En voiture"
|
|
Et les notifications push sont désactivées
|
|
Et seules les notifications in-app sont actives
|
|
|
|
Scénario: Détection automatique du contexte à pied
|
|
Étant donné que ma vitesse GPS est de 3 km/h
|
|
Quand le système détecte mon contexte
|
|
Alors je suis identifié comme "À pied"
|
|
Et les notifications push sont activées
|
|
Et l'interface tactile et vocale sont disponibles
|
|
|
|
Scénario: Zone de transition 5-10 km/h
|
|
Étant donné que ma vitesse GPS varie entre 5 et 10 km/h
|
|
Quand le système détecte mon contexte
|
|
Alors un algorithme de lissage est appliqué sur 30 secondes
|
|
Et le mode est déterminé selon la vitesse moyenne
|
|
Et les changements de mode ne sont pas trop fréquents
|
|
|
|
Scénario: Nouveau contenu créateur suivi - Mode voiture
|
|
Étant donné que je suis en voiture (vitesse >10 km/h)
|
|
Et que je suis abonné au créateur "JeanDupont"
|
|
Quand "JeanDupont" publie un nouveau contenu dans ma zone
|
|
Alors je ne reçois pas de notification push
|
|
Mais je vois un badge compteur in-app
|
|
Et le contenu apparaît dans ma file avec boost +30%
|
|
|
|
Scénario: Nouveau contenu créateur suivi - Mode piéton
|
|
Étant donné que je suis à pied (vitesse <5 km/h)
|
|
Et que je suis abonné au créateur "JeanDupont"
|
|
Et que je suis situé en Île-de-France
|
|
Quand "JeanDupont" publie un contenu géolocalisé en Île-de-France
|
|
Alors je reçois une notification push:
|
|
"""
|
|
🎧 JeanDupont a publié : "Titre du contenu"
|
|
Tap pour écouter
|
|
"""
|
|
|
|
Scénario: Live créateur suivi - Mode voiture
|
|
Étant donné que je suis en voiture
|
|
Et que je suis abonné au créateur "RadioLive"
|
|
Quand "RadioLive" démarre un live dans ma zone
|
|
Alors je ne reçois pas de notification push
|
|
Mais je vois un badge compteur in-app
|
|
Et le live peut apparaître dans ma recommandation automatiquement
|
|
|
|
Scénario: Live créateur suivi - Mode piéton
|
|
Étant donné que je suis à pied
|
|
Et que je suis abonné au créateur "RadioLive"
|
|
Et que je suis situé dans la zone du live
|
|
Quand "RadioLive" démarre un live
|
|
Alors je reçois une notification push:
|
|
"""
|
|
🔴 RadioLive est en direct : "Titre du live"
|
|
Tap pour rejoindre
|
|
"""
|
|
|
|
Scénario: Audio-guide disponible à proximité - Mode piéton
|
|
Étant donné que je suis à pied
|
|
Quand je passe à moins de 100m d'un lieu avec audio-guides
|
|
Alors je reçois une notification push:
|
|
"""
|
|
📍 Audio-guide disponible : Musée du Louvre
|
|
Choisissez parmi 3 guides pour Musée du Louvre
|
|
Tap pour explorer
|
|
"""
|
|
|
|
Scénario: Audio-guide disponible à proximité - Mode voiture
|
|
Étant donné que je suis en voiture
|
|
Quand je passe à moins de 100m d'un lieu avec audio-guides
|
|
Alors je reçois une notification audio (bip)
|
|
Et une annonce vocale: "Audio-guide disponible"
|
|
Mais pas de notification push (sécurité)
|
|
|
|
Scénario: Filtrage géographique des notifications
|
|
Étant donné que je suis abonné au créateur "CreateurMarseille"
|
|
Et que je suis situé à Paris
|
|
Quand "CreateurMarseille" publie un contenu ancré à Marseille
|
|
Alors je ne reçois pas de notification
|
|
Car le contenu est hors de ma zone géographique
|
|
Et cela évite la frustration de contenus non écoutables
|
|
|
|
Scénario: Contenu national notifie tous les abonnés
|
|
Étant donné que je suis abonné au créateur "MediaNational"
|
|
Et que je suis situé n'importe où en France
|
|
Quand "MediaNational" publie un contenu de type "National"
|
|
Alors je reçois une notification (si mode piéton)
|
|
Car les contenus nationaux ne sont pas filtrés géographiquement
|
|
|
|
Scénario: Limite de 10 notifications push par jour
|
|
Étant donné que je suis abonné à 50 créateurs actifs
|
|
Et que j'ai déjà reçu 10 notifications push aujourd'hui
|
|
Quand un 11ème contenu est publié
|
|
Alors je ne reçois pas de notification push individuelle
|
|
Mais une notification groupée: "🎧 3 nouveaux contenus de créateurs suivis"
|
|
|
|
Scénario: Paramétrage de la limite quotidienne
|
|
Étant donné que la limite par défaut est de 10 notifications/jour
|
|
Quand j'accède aux paramètres de notifications
|
|
Alors je peux modifier la limite entre 5 et 20
|
|
Et si je choisis 15, je recevrai jusqu'à 15 notifications/jour
|
|
|
|
Scénario: Mode silencieux nocturne par défaut
|
|
Étant donné que le mode silencieux est activé de 22h à 8h par défaut
|
|
Et qu'il est 23h30
|
|
Quand un créateur suivi publie un contenu
|
|
Alors je ne reçois pas de notification push
|
|
Mais les notifications sont empilées
|
|
Et je les vois le lendemain matin à 8h01
|
|
|
|
Scénario: Exception du mode silencieux pour les lives
|
|
Étant donné que le mode silencieux est activé (22h-8h)
|
|
Et qu'il est 23h00
|
|
Et que j'ai activé "Notifications importantes uniquement" (lives uniquement)
|
|
Quand un créateur suivi démarre un live
|
|
Alors je reçois quand même la notification push du live
|
|
Car les lives sont des événements temps réel prioritaires
|
|
|
|
Scénario: Désactivation complète des notifications
|
|
Étant donné que j'accède aux paramètres de notifications
|
|
Quand je désactive toutes les notifications
|
|
Alors je ne reçois plus aucune notification push
|
|
Et les badges in-app sont également désactivés
|
|
Et seule la recommandation algorithmique reste active
|
|
|
|
Scénario: Notification "Nouveaux contenus" activée par défaut
|
|
Étant donné que je crée un nouveau compte
|
|
Et que je m'abonne à mon premier créateur
|
|
Quand je consulte les préférences de notifications
|
|
Alors "Nouveaux contenus" est activé par défaut
|
|
Et "Lives" est activé par défaut
|
|
Et "Audio-guides proximité" est activé par défaut
|
|
|
|
Scénario: Désactivation sélective par type de notification
|
|
Étant donné que j'ai activé toutes les notifications
|
|
Quand je désactive uniquement "Nouveaux contenus"
|
|
Alors je ne reçois plus de notifications pour nouveaux contenus
|
|
Mais je reçois toujours les notifications de lives
|
|
Et les notifications d'audio-guides restent actives
|
|
|
|
Scénario: Notification groupée après limite dépassée
|
|
Étant donné que j'ai reçu 10 notifications push aujourd'hui
|
|
Et que 5 nouveaux contenus sont publiés dans l'heure suivante
|
|
Quand la 11ème notification devrait être envoyée
|
|
Alors les 5 contenus sont regroupés en une seule notification:
|
|
"""
|
|
🎧 5 nouveaux contenus de créateurs suivis
|
|
Tap pour voir la liste
|
|
"""
|
|
|
|
Scénario: Détail de la notification groupée
|
|
Étant donné que j'ai reçu une notification groupée "3 nouveaux contenus"
|
|
Quand je tape sur la notification
|
|
Alors l'app s'ouvre sur une liste des 3 contenus:
|
|
| créateur | titre |
|
|
| JeanDupont | "Actualité du jour" |
|
|
| MarieDurand | "Podcast économie" |
|
|
| PaulMartin | "Anecdote historique" |
|
|
Et je peux choisir lequel écouter en premier
|
|
|
|
Scénario: Personnalisation des plages horaires du mode silencieux
|
|
Étant donné que le mode silencieux est 22h-8h par défaut
|
|
Quand j'accède aux paramètres
|
|
Alors je peux modifier les heures: par exemple 23h-7h
|
|
Et le mode silencieux s'applique dans la nouvelle plage horaire
|
|
|
|
Scénario: Format notification nouveau contenu complet
|
|
Étant donné que je suis à pied
|
|
Et qu'un créateur suivi publie un contenu
|
|
Quand je reçois la notification push
|
|
Alors elle contient:
|
|
| élément | exemple |
|
|
| Emoji | 🎧 |
|
|
| Créateur | JeanDupont |
|
|
| Action | a publié |
|
|
| Titre | "Les secrets du Louvre" |
|
|
| CTA | Tap pour écouter |
|
|
|
|
Scénario: Format notification live complet
|
|
Étant donné que je suis à pied
|
|
Et qu'un créateur suivi démarre un live
|
|
Quand je reçois la notification push
|
|
Alors elle contient:
|
|
| élément | exemple |
|
|
| Emoji | 🔴 |
|
|
| Créateur | RadioLive |
|
|
| Action | est en direct |
|
|
| Titre | "Débat politique ce soir" |
|
|
| CTA | Tap pour rejoindre |
|
|
|
|
Scénario: Notification disparaît si contenu supprimé
|
|
Étant donné que j'ai reçu une notification pour un contenu
|
|
Et que je n'ai pas encore tapé dessus
|
|
Quand le créateur supprime le contenu
|
|
Alors la notification est automatiquement retirée de mon centre de notifications
|
|
Et si je tape dessus par erreur, je vois "Contenu non disponible"
|
|
|
|
Scénario: Badge compteur in-app en mode voiture
|
|
Étant donné que je suis en voiture
|
|
Et que 5 créateurs suivis publient des contenus
|
|
Quand j'ouvre l'application
|
|
Alors je vois un badge "5" sur l'onglet "Nouveautés"
|
|
Et en consultant l'onglet, je vois les 5 nouveaux contenus
|
|
Et le badge disparaît après consultation
|
|
|
|
Scénario: Coût des notifications push Firebase
|
|
Étant donné que je reçois 10 notifications push par jour
|
|
Et que je suis actif 365 jours par an
|
|
Quand le système calcule le coût
|
|
Alors 3650 notifications/an sont envoyées
|
|
Et Firebase Cloud Messaging est gratuit jusqu'à plusieurs millions de notifications
|
|
Et le coût reste 0€ pour le volume MVP/Growth
|
|
|
|
Scénario: Deep link depuis notification push
|
|
Étant donné que je reçois une notification push pour un contenu
|
|
Quand je tape sur la notification
|
|
Alors l'app s'ouvre directement sur le contenu
|
|
Et la lecture démarre automatiquement (si j'étais à pied)
|
|
Ou le contenu est ajouté en première position dans la file (si je suis en voiture)
|
|
|
|
Scénario: Notification refusée si permissions désactivées au niveau OS
|
|
Étant donné que j'ai désactivé les notifications dans les paramètres iOS/Android
|
|
Quand un créateur suivi publie un contenu
|
|
Alors aucune notification push n'est envoyée
|
|
Et l'app propose de réactiver les permissions dans les paramètres
|
|
Mais les badges in-app continuent de fonctionner
|