Files
roadwave/docs/domains/content/features/audio-guides/creation-wizard-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

248 lines
15 KiB
Gherkin

# language: fr
@api @audio-guides @content-creation @mvp
Fonctionnalité: Wizard complet de création d'audio-guide multi-séquences
En tant que créateur de contenu
Je veux créer un audio-guide avec plusieurs séquences géolocalisées
Afin de proposer une expérience guidée immersive aux utilisateurs
Contexte:
Étant donné que le système supporte les limites suivantes:
| Paramètre | Valeur |
| Nombre max de séquences par guide | 50 |
| Taille max fichier audio | 100 MB |
| Formats audio acceptés | MP3, M4A, WAV |
| Durée max par séquence | 15 minutes |
| Rayon min d'un point d'intérêt | 10 mètres |
| Rayon max d'un point d'intérêt | 500 mètres |
Scénario: Création d'un audio-guide - Étape 1: Informations générales
Étant donné un créateur "alice@roadwave.fr" connecté
Quand le créateur clique sur "Créer un audio-guide"
Alors le wizard s'ouvre sur l'étape 1 "Informations générales"
Et le créateur remplit le formulaire:
| Champ | Valeur |
| Titre | Visite guidée du Quartier Latin |
| Description courte | Découvrez l'histoire du quartier étudiant |
| Description longue | Plongez dans 2000 ans d'histoire... |
| Catégorie | Tourisme |
| Langues disponibles | Français, Anglais |
| Durée estimée | 2 heures |
| Difficulté | Facile |
| Accessibilité PMR | Oui |
Et le créateur clique sur "Suivant"
Alors les données sont validées et enregistrées en brouillon
Et un événement "AUDIO_GUIDE_CREATION_STARTED" est enregistré
Et la métrique "audio_guide.creation.step1_completed" est incrémentée
Scénario: Création d'un audio-guide - Étape 2: Image de couverture
Étant donné un créateur "bob@roadwave.fr" à l'étape 2 du wizard
Quand le créateur upload une image de couverture:
| Propriété | Valeur |
| Fichier | quartier-latin-cover.jpg |
| Taille | 1920x1080 px |
| Format | JPEG |
| Poids | 2.5 MB |
Alors l'image est uploadée vers le stockage S3
Et une miniature est générée automatiquement (300x200 px)
Et un aperçu de l'image est affiché
Et le créateur peut recadrer l'image via un éditeur intégré
Et le créateur clique sur "Suivant"
Alors l'image est associée au brouillon
Et un événement "AUDIO_GUIDE_COVER_UPLOADED" est enregistré
Et la métrique "audio_guide.creation.step2_completed" est incrémentée
Scénario: Création d'un audio-guide - Étape 3: Ajout de séquences via carte
Étant donné un créateur "charlie@roadwave.fr" à l'étape 3 du wizard
Quand le créateur voit une carte interactive centrée sur Paris
Et clique sur "Ajouter un point d'intérêt" sur la carte
Et place un marqueur à la position: 48.8534, 2.3488 (Notre-Dame)
Alors un formulaire de séquence s'ouvre:
| Champ | Valeur par défaut |
| Nom du point | [Vide] |
| Position GPS | 48.8534, 2.3488 |
| Rayon de déclenchement| 50 mètres |
| Ordre dans le parcours| 1 |
| Fichier audio | [Non uploadé] |
Et le créateur remplit les informations:
| Champ | Valeur |
| Nom du point | Cathédrale Notre-Dame de Paris |
| Rayon de déclenchement| 100 mètres |
| Ordre dans le parcours| 1 |
Et le créateur upload un fichier audio "notre-dame.mp3" (12 MB, 8min 30s)
Et le créateur clique sur "Enregistrer le point"
Alors la séquence 1 est créée et affichée sur la carte
Et un événement "AUDIO_GUIDE_SEQUENCE_ADDED" est enregistré
Et la métrique "audio_guide.sequences.added" est incrémentée
Scénario: Ajout de plusieurs séquences consécutives
Étant donné un créateur "david@roadwave.fr" avec 1 séquence créée
Quand le créateur ajoute 4 nouvelles séquences:
| Ordre | Nom | Position GPS | Rayon | Audio |
| 2 | Sainte-Chapelle | 48.8555, 2.3450 | 80m | chapelle.mp3 |
| 3 | Panthéon | 48.8462, 2.3464 | 100m | pantheon.mp3 |
| 4 | Jardin du Luxembourg | 48.8462, 2.3371 | 150m | jardin.mp3 |
| 5 | Sorbonne | 48.8487, 2.3431 | 70m | sorbonne.mp3 |
Alors les 5 séquences sont affichées sur la carte avec des marqueurs numérotés
Et une ligne de parcours relie les points dans l'ordre
Et la distance totale du parcours est calculée: 3.2 km
Et la durée totale des audios est calculée: 42 minutes
Et un panneau latéral liste les séquences avec possibilité de réorganiser
Et un événement "AUDIO_GUIDE_SEQUENCES_BATCH_ADDED" est enregistré
Et la métrique "audio_guide.sequences.count" est mise à jour: 5
Scénario: Réorganisation de l'ordre des séquences par drag & drop
Étant donné un créateur "eve@roadwave.fr" avec 5 séquences créées
Quand le créateur utilise le panneau latéral
Et fait glisser la séquence #3 "Panthéon" vers la position #2
Alors l'ordre des séquences est mis à jour:
| Nouvel ordre | Nom |
| 1 | Cathédrale Notre-Dame |
| 2 | Panthéon |
| 3 | Sainte-Chapelle |
| 4 | Jardin du Luxembourg |
| 5 | Sorbonne |
Et la ligne de parcours sur la carte est recalculée
Et la distance totale est recalculée: 3.5 km
Et un événement "AUDIO_GUIDE_SEQUENCES_REORDERED" est enregistré
Et la métrique "audio_guide.sequences.reordered" est incrémentée
Scénario: Modification d'une séquence existante
Étant donné un créateur "frank@roadwave.fr" avec 5 séquences créées
Quand le créateur clique sur le marqueur #2 "Panthéon" sur la carte
Alors le formulaire d'édition s'ouvre avec les données actuelles
Et le créateur modifie:
| Champ | Ancienne valeur | Nouvelle valeur |
| Rayon de déclenchement| 100m | 120m |
| Fichier audio | pantheon.mp3 | pantheon-v2.mp3 |
Et le créateur clique sur "Enregistrer les modifications"
Alors la séquence est mise à jour
Et le nouveau fichier audio remplace l'ancien
Et l'ancien fichier est supprimé du stockage S3
Et un événement "AUDIO_GUIDE_SEQUENCE_UPDATED" est enregistré
Et la métrique "audio_guide.sequences.updated" est incrémentée
Scénario: Suppression d'une séquence
Étant donné un créateur "grace@roadwave.fr" avec 5 séquences créées
Quand le créateur clique sur l'icône de suppression de la séquence #3
Alors un dialogue de confirmation s'affiche: "Supprimer cette séquence ?"
Et le créateur confirme la suppression
Alors la séquence #3 est supprimée
Et le fichier audio associé est marqué pour suppression différée (30 jours)
Et les séquences suivantes sont renumérotées automatiquement:
| Ancien ordre | Nouveau ordre | Nom |
| 4 | 3 | Jardin du Luxembourg |
| 5 | 4 | Sorbonne |
Et la ligne de parcours est recalculée
Et un événement "AUDIO_GUIDE_SEQUENCE_DELETED" est enregistré
Et la métrique "audio_guide.sequences.deleted" est incrémentée
Scénario: Validation de la distance minimale entre séquences
Étant donné un créateur "henry@roadwave.fr" avec 2 séquences créées
Quand le créateur tente d'ajouter une 3ème séquence à 5 mètres de la séquence #1
Alors un message d'erreur s'affiche: "Ce point est trop proche d'un point existant (min: 20m)"
Et le marqueur est affiché en rouge sur la carte
Et la séquence n'est pas enregistrée tant que le créateur ne déplace pas le marqueur
Et un événement "AUDIO_GUIDE_SEQUENCE_TOO_CLOSE" est enregistré
Et la métrique "audio_guide.validation.sequence_too_close" est incrémentée
Scénario: Création d'un audio-guide - Étape 4: Configuration avancée
Étant donné un créateur "iris@roadwave.fr" à l'étape 4 du wizard
Quand le créateur configure les options avancées:
| Option | Valeur |
| Prix (gratuit ou payant) | Gratuit |
| Visibilité | Publique |
| Mode de lecture | Séquentiel obligatoire |
| Autoriser les avis utilisateurs | Oui |
| Autoriser le téléchargement | Non |
| Activer les sous-titres | Oui |
Et clique sur "Suivant"
Alors les options sont enregistrées
Et un événement "AUDIO_GUIDE_CONFIG_COMPLETED" est enregistré
Et la métrique "audio_guide.creation.step4_completed" est incrémentée
Scénario: Création d'un audio-guide - Étape 5: Prévisualisation et publication
Étant donné un créateur "jack@roadwave.fr" à l'étape 5 du wizard
Quand le créateur voit la prévisualisation complète:
| Section | Contenu |
| Informations | Titre, description, durée |
| Image | Aperçu de la couverture |
| Parcours | Carte avec 5 séquences |
| Audio | Liste des 5 fichiers audio |
| Configuration | Prix, visibilité, options |
Et clique sur "Tester le parcours en simulation"
Alors une simulation GPS est lancée avec lecture des audios
Et le créateur peut naviguer dans le parcours virtuel
Et après validation, le créateur clique sur "Publier l'audio-guide"
Alors l'audio-guide passe du statut "brouillon" à "publié"
Et l'audio-guide devient visible dans les recherches et recommandations
Et un événement "AUDIO_GUIDE_PUBLISHED" est enregistré
Et la métrique "audio_guide.published" est incrémentée
Et un email de confirmation est envoyé au créateur
Scénario: Sauvegarde automatique du brouillon pendant la création
Étant donné un créateur "kate@roadwave.fr" en train de créer un audio-guide
Quand le créateur remplit des informations à chaque étape
Alors le brouillon est automatiquement sauvegardé toutes les 30 secondes
Et un indicateur "Sauvegardé automatiquement à 14:32" s'affiche
Et en cas de fermeture accidentelle, le créateur peut reprendre la création
Et un événement "AUDIO_GUIDE_DRAFT_AUTOSAVED" est enregistré toutes les 30s
Et la métrique "audio_guide.drafts.autosaved" est incrémentée
Scénario: Récupération d'un brouillon après interruption
Étant donné un créateur "luke@roadwave.fr" qui a commencé un audio-guide hier
Et le brouillon a été sauvegardé automatiquement à l'étape 3
Quand le créateur clique sur "Créer un audio-guide"
Alors un message s'affiche: "Vous avez un brouillon en cours. Reprendre la création ?"
Et le créateur clique sur "Reprendre"
Alors le wizard s'ouvre directement à l'étape 3
Et toutes les données saisies sont restaurées
Et un événement "AUDIO_GUIDE_DRAFT_RESUMED" est enregistré
Et la métrique "audio_guide.drafts.resumed" est incrémentée
Scénario: Import d'un parcours GPX pour créer automatiquement les séquences
Étant donné un créateur "mary@roadwave.fr" à l'étape 3 du wizard
Quand le créateur clique sur "Importer un parcours GPX"
Et upload un fichier "parcours-paris.gpx" avec 10 waypoints
Alors le système extrait les coordonnées GPS de chaque waypoint
Et crée automatiquement 10 séquences avec positions GPS pré-remplies
Et les marqueurs sont affichés sur la carte
Et le créateur doit ensuite ajouter les fichiers audio et noms pour chaque séquence
Et un événement "AUDIO_GUIDE_GPX_IMPORTED" est enregistré
Et la métrique "audio_guide.gpx.imported" est incrémentée
Scénario: Validation de la qualité audio avant publication
Étant donné un créateur "nathan@roadwave.fr" qui tente de publier un audio-guide
Quand le système analyse les fichiers audio uploadés
Et détecte que le fichier "sequence-3.mp3" a un bitrate de 32 kbps (trop faible)
Alors un avertissement s'affiche: "Le fichier 'sequence-3.mp3' a une qualité audio faible. Recommandé: 128 kbps minimum"
Et le créateur peut choisir de:
| Action | Conséquence |
| Ignorer et publier quand même | Publication autorisée |
| Remplacer le fichier | Retour à l'édition |
Et un événement "AUDIO_GUIDE_LOW_QUALITY_WARNING" est enregistré
Et la métrique "audio_guide.quality.warnings" est incrémentée
Scénario: Limitation du nombre de brouillons par créateur
Étant donné un créateur "olive@roadwave.fr" avec 10 brouillons en cours
Quand le créateur tente de créer un 11ème audio-guide
Alors un message s'affiche: "Vous avez atteint la limite de 10 brouillons. Veuillez publier ou supprimer des brouillons existants."
Et un lien vers la liste des brouillons est affiché
Et la création est bloquée jusqu'à suppression d'un brouillon
Et un événement "AUDIO_GUIDE_DRAFT_LIMIT_REACHED" est enregistré
Et la métrique "audio_guide.drafts.limit_reached" est incrémentée
Scénario: Métriques de performance du wizard de création
Étant donné que 1000 audio-guides sont créés par mois
Quand les métriques de création sont collectées
Alors les indicateurs suivants sont disponibles:
| Métrique | Valeur cible |
| Taux de complétion du wizard | > 65% |
| Temps moyen de création | < 45 min |
| Nombre moyen de séquences par guide | 5-8 |
| Taux d'abandon à chaque étape | < 15% |
| Taux d'utilisation de l'autosave | 100% |
Et les métriques sont exportées vers le système de monitoring
Et des optimisations UX sont proposées si taux d'abandon > 20%