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.
116 lines
6.0 KiB
Gherkin
116 lines
6.0 KiB
Gherkin
# 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"
|