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.
248 lines
15 KiB
Gherkin
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%
|