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.
135 lines
6.0 KiB
Gherkin
135 lines
6.0 KiB
Gherkin
# language: fr
|
|
|
|
@ui @search @map @mvp
|
|
Fonctionnalité: Page de résultats avec carte interactive
|
|
|
|
En tant qu'utilisateur
|
|
Je veux visualiser les résultats sur une carte
|
|
Afin de choisir des contenus proches de ma position ou d'une zone
|
|
|
|
Scénario: Affichage par défaut en mode liste + carte
|
|
Étant donné un utilisateur qui effectue une recherche
|
|
Quand les résultats s'affichent
|
|
Alors l'écran est divisé en 2 parties:
|
|
| Section | Largeur | Contenu |
|
|
| Liste | 40% | Résultats scrollables |
|
|
| Carte | 60% | Marqueurs des résultats |
|
|
Et la carte est synchronisée avec la liste
|
|
Et un événement "SEARCH_RESULTS_MAP_VIEW" est enregistré
|
|
|
|
Scénario: Bascule entre vue liste, carte, et mixte
|
|
Étant donné un utilisateur sur la page de résultats
|
|
Quand il clique sur les boutons de vue:
|
|
| Bouton | Vue résultante |
|
|
| [Liste] | Liste 100%, carte masquée |
|
|
| [Carte] | Carte 100%, liste masquée |
|
|
| [Mixte] | Liste 40% + Carte 60% |
|
|
Alors la vue change instantanément
|
|
Et la préférence est sauvegardée
|
|
Et un événement "SEARCH_VIEW_MODE_CHANGED" est enregistré
|
|
|
|
Scénario: Marqueurs groupés par zone (clustering)
|
|
Étant donné 50 résultats dans une zone de 10km
|
|
Quand la carte est affichée en zoom large
|
|
Alors les marqueurs sont regroupés en clusters:
|
|
| Cluster | Nombre de contenus |
|
|
| Paris 1 | 15 |
|
|
| Paris 2 | 12 |
|
|
| Paris 5 | 23 |
|
|
Et un clic sur un cluster zoome sur la zone
|
|
Et un événement "MAP_CLUSTERING_DISPLAYED" est enregistré
|
|
|
|
Scénario: Survol d'un marqueur affiche une preview
|
|
Étant donné un utilisateur qui survole un marqueur sur la carte
|
|
Alors une popup s'affiche avec:
|
|
| Élément | Contenu |
|
|
| Image miniature | Photo de couverture |
|
|
| Titre | Visite du Quartier Latin |
|
|
| Durée | 2h 30min |
|
|
| Note | 4.8/5 (1,234 avis) |
|
|
| Prix | Gratuit |
|
|
| Bouton | [Voir détails] |
|
|
Et un événement "MAP_MARKER_PREVIEW_SHOWN" est enregistré
|
|
|
|
Scénario: Clic sur un marqueur ouvre la fiche
|
|
Étant donné un utilisateur qui clique sur un marqueur
|
|
Alors la fiche complète du contenu s'ouvre en modal
|
|
Et la carte reste visible en arrière-plan
|
|
Et un événement "MAP_MARKER_CLICKED" est enregistré
|
|
|
|
Scénario: Synchronisation liste-carte bidirectionnelle
|
|
Étant donné un utilisateur en vue mixte (liste + carte)
|
|
Quand il scroll dans la liste
|
|
Alors la carte se centre automatiquement sur les contenus visibles
|
|
Et inversement, quand il déplace la carte
|
|
Alors la liste affiche les contenus de la zone visible
|
|
Et un événement "LIST_MAP_SYNC" est enregistré
|
|
|
|
Scénario: Recherche par zone dessinée sur la carte
|
|
Étant donné un utilisateur qui clique sur "Dessiner une zone"
|
|
Quand il dessine un polygone sur la carte
|
|
Alors seuls les contenus dans ce polygone sont affichés
|
|
Et le filtre "Zone personnalisée" s'active
|
|
Et un événement "MAP_CUSTOM_ZONE_DRAWN" est enregistré
|
|
|
|
Scénario: Calcul d'itinéraire depuis la carte
|
|
Étant donné un utilisateur qui clique sur un marqueur
|
|
Quand il clique sur "Itinéraire"
|
|
Alors un calcul d'itinéraire démarre depuis sa position
|
|
Et s'affiche sur la carte avec:
|
|
| Information | Exemple |
|
|
| Distance | 3.2 km |
|
|
| Temps piéton | 40 min |
|
|
| Temps voiture | 12 min |
|
|
| Temps vélo | 18 min |
|
|
Et un événement "MAP_ROUTE_CALCULATED" est enregistré
|
|
|
|
Scénario: Sauvegarde des contenus depuis la carte
|
|
Étant donné un utilisateur qui consulte la carte
|
|
Quand il clique sur l'icône "♡" d'un marqueur
|
|
Alors le contenu est ajouté à ses favoris
|
|
Et le marqueur change de couleur (rouge)
|
|
Et un événement "CONTENT_SAVED_FROM_MAP" est enregistré
|
|
|
|
Scénario: Affichage de la position utilisateur en temps réel
|
|
Étant donné un utilisateur avec géolocalisation activée
|
|
Quand il consulte la carte
|
|
Alors sa position est affichée par un point bleu
|
|
Et se met à jour en temps réel si il se déplace
|
|
Et un cercle indique la précision GPS (±10m)
|
|
Et un événement "USER_LOCATION_TRACKED_ON_MAP" est enregistré
|
|
|
|
Scénario: Légende de la carte avec codes couleur
|
|
Étant donné un utilisateur sur la carte
|
|
Alors une légende affiche:
|
|
| Couleur | Signification |
|
|
| Vert | Gratuit |
|
|
| Bleu | Payant |
|
|
| Or | Créateur vérifié |
|
|
| Rouge | Favoris |
|
|
Et un événement "MAP_LEGEND_DISPLAYED" est enregistré
|
|
|
|
Scénario: Export de la carte en image
|
|
Étant donné un utilisateur qui clique sur "Exporter la carte"
|
|
Alors une image PNG de la carte actuelle est générée
|
|
Et téléchargeable avec résultats visibles
|
|
Et un événement "MAP_EXPORTED" est enregistré
|
|
|
|
Scénario: Mode hors ligne de la carte
|
|
Étant donné un utilisateur qui télécharge une zone
|
|
Quand il active le mode hors ligne
|
|
Alors les tuiles de carte sont disponibles localement
|
|
Et les contenus téléchargés sont accessibles
|
|
Et un événement "MAP_OFFLINE_MODE_ENABLED" est enregistré
|
|
|
|
Scénario: Métriques d'utilisation de la carte
|
|
Étant donné que 10 000 utilisateurs ont consulté la carte
|
|
Alors les indicateurs suivants sont disponibles:
|
|
| Métrique | Valeur |
|
|
| % d'utilisations en mode carte | 42% |
|
|
| % d'utilisations en mode mixte | 48% |
|
|
| % d'utilisations en mode liste | 10% |
|
|
| Nombre moyen de clics sur marqueurs| 3.2 |
|
|
| Taux de conversion depuis carte | 18% |
|
|
Et les métriques sont exportées vers le monitoring
|