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.
96 lines
4.3 KiB
Gherkin
96 lines
4.3 KiB
Gherkin
# language: fr
|
|
|
|
@ui @search @filters @mvp
|
|
Fonctionnalité: Filtres avancés de recherche
|
|
|
|
En tant qu'utilisateur
|
|
Je veux filtrer les résultats de recherche
|
|
Afin de trouver précisément le contenu qui m'intéresse
|
|
|
|
Scénario: Filtres de base toujours visibles
|
|
Étant donné un utilisateur sur la page de recherche
|
|
Quand il consulte les filtres
|
|
Alors il voit les filtres de base:
|
|
| Filtre | Options |
|
|
| Catégorie | Tourisme, Culture, Gastronomie, etc. |
|
|
| Durée | < 30min, 30min-1h, 1h-2h, 2h+ |
|
|
| Prix | Gratuit, Payant |
|
|
| Note | 4+ étoiles, 3+ étoiles |
|
|
| Distance | < 5km, 5-10km, 10-50km, 50km+ |
|
|
Et un événement "SEARCH_FILTERS_DISPLAYED" est enregistré
|
|
|
|
Scénario: Filtres avancés dépliables
|
|
Étant donné un utilisateur qui clique sur "Filtres avancés"
|
|
Alors des filtres supplémentaires apparaissent:
|
|
| Filtre | Options |
|
|
| Langue | Français, Anglais, etc. |
|
|
| Accessibilité PMR | Oui / Non |
|
|
| Mode de déplacement | Piéton, Voiture, Vélo |
|
|
| Créateur vérifié | Oui / Non |
|
|
| Date de publication | Dernière semaine, mois, année |
|
|
| Nombre de séquences | 1-5, 6-10, 11-20, 20+ |
|
|
Et un événement "ADVANCED_FILTERS_EXPANDED" est enregistré
|
|
|
|
Scénario: Application des filtres en temps réel
|
|
Étant donné un utilisateur qui sélectionne:
|
|
| Filtre | Valeur choisie |
|
|
| Catégorie | Tourisme |
|
|
| Durée | 1h-2h |
|
|
| Distance | < 10km |
|
|
Quand il applique les filtres
|
|
Alors les résultats se mettent à jour instantanément (< 500ms)
|
|
Et le compteur affiche: "23 résultats trouvés"
|
|
Et un événement "SEARCH_FILTERS_APPLIED" est enregistré
|
|
|
|
Scénario: Sauvegarde des filtres préférés
|
|
Étant donné un utilisateur "alice@roadwave.fr" connecté
|
|
Quand elle configure des filtres spécifiques
|
|
Et clique sur "Sauvegarder ces filtres"
|
|
Alors les filtres sont sauvegardés dans son profil
|
|
Et automatiquement appliqués à sa prochaine recherche
|
|
Et un événement "SEARCH_FILTERS_SAVED" est enregistré
|
|
|
|
Scénario: Suggestions de filtres intelligentes
|
|
Étant donné un utilisateur qui recherche "Louvre"
|
|
Quand les résultats s'affichent
|
|
Alors des filtres suggérés apparaissent:
|
|
"Peut aussi vous intéresser: Musées à Paris, Art classique"
|
|
Et un clic applique automatiquement ces filtres
|
|
Et un événement "SMART_FILTERS_SUGGESTED" est enregistré
|
|
|
|
Scénario: Compteur de résultats par filtre
|
|
Étant donné un utilisateur qui survole un filtre
|
|
Alors un badge affiche le nombre de résultats:
|
|
| Filtre | Badge |
|
|
| Tourisme | (45) |
|
|
| Culture | (23) |
|
|
| Gastronomie | (12) |
|
|
| Gratuit | (34) |
|
|
| Payant | (28) |
|
|
Et aide à la décision de filtrage
|
|
Et un événement "FILTER_COUNTS_DISPLAYED" est enregistré
|
|
|
|
Scénario: Réinitialisation des filtres
|
|
Étant donné un utilisateur avec plusieurs filtres actifs
|
|
Quand il clique sur "Réinitialiser les filtres"
|
|
Alors tous les filtres sont désactivés
|
|
Et tous les résultats sont affichés
|
|
Et un événement "SEARCH_FILTERS_RESET" est enregistré
|
|
|
|
Scénario: Filtres persistants dans l'URL
|
|
Étant donné un utilisateur qui applique des filtres
|
|
Quand l'URL se met à jour
|
|
Alors elle contient: /search?category=tourisme&duration=1-2h&distance=10km
|
|
Et le lien peut être partagé avec les filtres actifs
|
|
Et un événement "SEARCH_URL_UPDATED_WITH_FILTERS" est enregistré
|
|
|
|
Scénario: Métriques d'utilisation des filtres
|
|
Étant donné que 10 000 recherches ont été effectuées
|
|
Alors les indicateurs suivants sont disponibles:
|
|
| Métrique | Valeur |
|
|
| % d'utilisateurs utilisant filtres| 68% |
|
|
| Nombre moyen de filtres/recherche | 2.3 |
|
|
| Filtre le plus utilisé | Distance|
|
|
| Filtre le moins utilisé | PMR |
|
|
Et les métriques sont exportées vers le monitoring
|