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,115 @@
# language: fr
@error-handling @no-content
Fonctionnalité: Élargissement automatique de zone quand aucun contenu n'est disponible
Contexte:
Étant donné que je suis un utilisateur connecté
Et que la géolocalisation est activée
Et que je suis en mode écoute
# 12.1 - Élargissement progressif
Scénario: Aucun contenu dans rayon 50km - élargissement à 100km
Étant donné que je suis situé à la position GPS 48.8566, 2.3522
Et qu'aucun contenu n'existe dans un rayon de 50 km autour de ma position
Mais qu'au moins 1 contenu existe dans un rayon de 100 km
Quand le système recherche du contenu à me proposer
Alors le système élargit automatiquement la zone de recherche à 100 km
Et je reçois un message "Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km)"
Et un contenu dans le rayon de 100 km m'est proposé
Scénario: Aucun contenu dans rayon 100km - élargissement au département
Étant donné que je suis situé dans le département "75" (Paris)
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
Mais qu'au moins 1 contenu existe avec la zone "département" pour "75"
Quand le système recherche du contenu à me proposer
Alors le système élargit automatiquement la zone de recherche au département
Et je reçois un message "Aucun contenu local disponible. Voici du contenu dans votre département"
Et un contenu départemental m'est proposé
Scénario: Aucun contenu départemental - élargissement à la région
Étant donné que je suis situé dans la région "Île-de-France"
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
Et qu'aucun contenu départemental n'existe pour mon département
Mais qu'au moins 1 contenu existe avec la zone "région" pour "Île-de-France"
Quand le système recherche du contenu à me proposer
Alors le système élargit automatiquement la zone de recherche à la région
Et je reçois un message "Aucun contenu local disponible. Voici du contenu dans votre région"
Et un contenu régional m'est proposé
Scénario: Aucun contenu régional - basculement sur contenu national
Étant donné que je suis situé en France
Et qu'aucun contenu n'existe dans un rayon de 100 km autour de ma position
Et qu'aucun contenu départemental n'existe pour mon département
Et qu'aucun contenu régional n'existe pour ma région
Quand le système recherche du contenu à me proposer
Alors le système bascule automatiquement sur du contenu national
Et je reçois un message "Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser"
Et un contenu national m'est proposé
Et je ne reste jamais sans contenu disponible
Scénario: Élargissement progressif avec plusieurs étapes
Étant donné que je suis situé dans une zone rurale isolée
Et qu'aucun contenu n'existe dans un rayon de 50 km
Et qu'aucun contenu n'existe dans un rayon de 100 km
Et qu'aucun contenu départemental n'existe
Et qu'aucun contenu régional n'existe
Quand le système recherche du contenu à me proposer
Alors le système essaie d'abord 50 km
Puis essaie 100 km
Puis essaie le département
Puis essaie la région
Puis bascule sur le contenu national
Et tout ce processus se fait de manière transparente et automatique
Et je reçois le message correspondant au dernier niveau trouvé
# Messages adaptatifs selon le niveau d'élargissement
Scénario: Message personnalisé selon la distance trouvée
Étant donné que je suis situé à la position GPS 43.6047, 1.4442
Et que <niveau_geo> contenu(s) est/sont trouvé(s)
Quand le système me propose du contenu
Alors je reçois le message "<message_attendu>"
Exemples:
| niveau_geo | message_attendu |
| 100 km | Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km) |
| département | Aucun contenu local disponible. Voici du contenu dans votre département |
| région | Aucun contenu local disponible. Voici du contenu dans votre région |
| national | Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser|
# Filet de sécurité - toujours du contenu disponible
Scénario: Le contenu national sert de filet de sécurité
Étant donné que le système a épuisé toutes les zones géographiques locales
Quand le système bascule sur du contenu national
Alors je dois toujours avoir au moins 1 contenu disponible
Et ce contenu peut être:
| type_contenu |
| Actualités Le Monde |
| Podcasts génériques |
| Contenu éducatif national |
| Contenu culturel national |
# Pas de message d'erreur bloquant
Scénario: Pas d'écran d'erreur "Aucun contenu"
Étant donné que je lance l'application
Et qu'aucun contenu local n'est disponible dans ma zone
Quand le système recherche du contenu
Alors je ne dois jamais voir un message d'erreur "Aucun contenu disponible"
Et je ne dois jamais voir un écran vide
Et un contenu doit toujours m'être proposé, même si c'est du contenu national
# Comportement avec historique d'écoute
Scénario: Élargissement avec prise en compte des centres d'intérêt
Étant donné que je suis situé dans une zone rurale
Et qu'aucun contenu n'existe dans un rayon de 50 km
Et que mes centres d'intérêt incluent "Automobile" à 80% et "Voyage" à 70%
Et qu'un contenu national existe avec le tag "Automobile"
Et qu'un contenu national existe avec le tag "Politique"
Quand le système bascule sur du contenu national
Alors le contenu national proposé prend en compte mes centres d'intérêt
Et le contenu "Automobile" a un score supérieur au contenu "Politique"