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,103 @@
|
||||
# language: fr
|
||||
|
||||
@api @audio-guides @progression @mvp
|
||||
Fonctionnalité: Reprise de progression complète
|
||||
|
||||
En tant qu'utilisateur
|
||||
Je veux reprendre un audio-guide là où je l'ai laissé
|
||||
Afin de continuer mon expérience sans perdre ma progression
|
||||
|
||||
Contexte:
|
||||
Étant donné que la sauvegarde de progression inclut:
|
||||
| Donnée | Persistance |
|
||||
| Séquences écoutées | Permanente |
|
||||
| Position dans l'audio | 7 jours |
|
||||
| Points manqués | Permanente |
|
||||
| Progression globale | Permanente |
|
||||
|
||||
Scénario: Sauvegarde automatique de la progression
|
||||
Étant donné un utilisateur "alice@roadwave.fr" qui écoute une séquence
|
||||
Quand elle ferme l'application à 3min 20s
|
||||
Alors la progression est sauvegardée automatiquement
|
||||
Et la position exacte dans l'audio est conservée
|
||||
Et un événement "PROGRESS_AUTO_SAVED" est enregistré
|
||||
|
||||
Scénario: Reprise après fermeture de l'application
|
||||
Étant donné un utilisateur "bob@roadwave.fr" qui rouvre l'application
|
||||
Et il avait un audio-guide en cours (5/10 séquences)
|
||||
Quand il accède à l'écran d'accueil
|
||||
Alors une carte "Reprendre votre visite" s'affiche:
|
||||
| Élément | Contenu |
|
||||
| Titre audio-guide | Visite du Quartier Latin |
|
||||
| Progression | 5/10 séquences (50%) |
|
||||
| Dernière position | Panthéon - 3min 20s |
|
||||
| Bouton | [Reprendre] |
|
||||
Et un événement "RESUME_CARD_DISPLAYED" est enregistré
|
||||
|
||||
Scénario: Reprise exacte de la position audio
|
||||
Étant donné un utilisateur "charlie@roadwave.fr" qui reprend un audio-guide
|
||||
Et il était à 3min 20s dans la séquence "Panthéon"
|
||||
Quand il clique sur "Reprendre"
|
||||
Alors l'audio reprend exactement à 3min 20s
|
||||
Et aucune seconde n'est perdue
|
||||
Et un événement "AUDIO_POSITION_RESTORED" est enregistré
|
||||
|
||||
Scénario: Synchronisation multi-appareils de la progression
|
||||
Étant donné un utilisateur "david@roadwave.fr" qui écoute sur iPhone
|
||||
Et il a complété 3 séquences
|
||||
Quand il passe sur son iPad
|
||||
Alors la progression est synchronisée automatiquement
|
||||
Et il peut reprendre là où il s'était arrêté
|
||||
Et un événement "PROGRESS_SYNCED_CROSS_DEVICE" est enregistré
|
||||
|
||||
Scénario: Historique des audio-guides en cours
|
||||
Étant donné un utilisateur "eve@roadwave.fr" avec 3 audio-guides en cours
|
||||
Quand elle accède à "Mes audio-guides en cours"
|
||||
Alors elle voit la liste:
|
||||
| Audio-guide | Progression | Dernière activité |
|
||||
| Quartier Latin | 5/10 (50%) | Il y a 2 heures |
|
||||
| Châteaux de la Loire | 3/8 (37%) | Il y a 3 jours |
|
||||
| Montmartre | 1/6 (16%) | Il y a 1 semaine |
|
||||
Et elle peut reprendre n'importe lequel
|
||||
Et un événement "IN_PROGRESS_LIST_VIEWED" est enregistré
|
||||
|
||||
Scénario: Expiration de la position audio après 7 jours
|
||||
Étant donné un utilisateur "frank@roadwave.fr" avec audio-guide en pause
|
||||
Et 8 jours se sont écoulés depuis la dernière écoute
|
||||
Quand il reprend l'audio-guide
|
||||
Alors la progression globale est conservée (séquences écoutées)
|
||||
Mais la position exacte dans l'audio est réinitialisée
|
||||
Et un message s'affiche: "La séquence redémarre depuis le début"
|
||||
Et un événement "AUDIO_POSITION_EXPIRED" est enregistré
|
||||
|
||||
Scénario: Badge "Explorateur assidu" pour reprises régulières
|
||||
Étant donné un utilisateur "grace@roadwave.fr" qui reprend 10 audio-guides
|
||||
Quand il complète chacun d'eux après les avoir repris
|
||||
Alors un badge "Explorateur assidu" est débloqué
|
||||
Et un événement "BADGE_PERSISTENT_EXPLORER_UNLOCKED" est enregistré
|
||||
|
||||
Scénario: Notification push de rappel après 3 jours d'inactivité
|
||||
Étant donné un utilisateur "henry@roadwave.fr" avec audio-guide en pause
|
||||
Et 3 jours se sont écoulés sans activité
|
||||
Quand le système envoie des rappels
|
||||
Alors une notification push est envoyée:
|
||||
"Vous avez laissé 'Visite du Quartier Latin' en suspens (5/10). Reprendre ?"
|
||||
Et un événement "RESUME_REMINDER_SENT" est enregistré
|
||||
|
||||
Scénario: Mode hors ligne avec sauvegarde locale
|
||||
Étant donné un utilisateur "iris@roadwave.fr" en mode hors ligne
|
||||
Quand elle écoute un audio-guide sans connexion
|
||||
Alors la progression est sauvegardée localement
|
||||
Et synchronisée automatiquement lors de la reconnexion
|
||||
Et un événement "PROGRESS_SYNCED_AFTER_OFFLINE" est enregistré
|
||||
|
||||
Scénario: Métriques de reprise de progression
|
||||
Étant donné que 10 000 audio-guides ont été mis en pause
|
||||
Alors les indicateurs suivants sont disponibles:
|
||||
| Métrique | Valeur |
|
||||
| Taux de reprise dans les 24h | 42% |
|
||||
| Taux de reprise dans les 7j | 68% |
|
||||
| Taux d'abandon définitif | 32% |
|
||||
| Temps moyen avant reprise | 2.5 jours|
|
||||
| Taux de complétion après reprise| 78% |
|
||||
Et les métriques sont exportées vers le monitoring
|
||||
Reference in New Issue
Block a user