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:
jpgiannetti
2026-02-07 17:15:02 +01:00
parent 78422bb2c0
commit 5e5fcf4714
227 changed files with 1413 additions and 1967 deletions

View File

@@ -0,0 +1,95 @@
# 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