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.
4.2 KiB
4.2 KiB
12. Gestion des erreurs
12.1 Aucun contenu disponible
Stratégie : Élargissement automatique progressif
Flow :
1. Recherche rayon 50 km → aucun résultat
2. Élargissement auto 100 km
3. Si toujours rien → département
4. Si toujours rien → région
5. Dernier recours → contenu national (toujours disponible)
Messages adaptatifs :
| Cas | Message |
|---|---|
| Trouvé à 100 km | "Aucun contenu dans votre zone immédiate. Voici du contenu à proximité (100 km)" |
| Trouvé département | "Aucun contenu local disponible. Voici du contenu dans votre département" |
| Contenu national | "Aucun contenu local disponible. Voici du contenu national qui pourrait vous intéresser" |
Justification :
- UX fluide : pas de message d'erreur bloquant "Aucun contenu"
- User ne reste jamais sans contenu
- Contenu national = filet de sécurité : actualités Le Monde, podcasts génériques
12.2 Contenu signalé/supprimé pendant l'écoute
Décision : Pas d'interruption brutale
Flow :
1. Contenu supprimé côté backend (modération)
2. Si contenu en écoute → laisser terminer lecture en cours
3. Après fin lecture → désactiver bouton "Précédent" pour ce contenu
4. Passage automatique suivant après 2s
5. Toast notification discrète : "Contenu précédent retiré (violation règles)"
Si tentative "Précédent" manuellement :
- Message : "Ce contenu n'est plus disponible"
- Retour au contenu actuel
Justification :
- Sécurité routière : pas d'interruption brutale pendant conduite
- User informé mais pas alarmé : message discret
- Empêche réécoute : contenu modéré inaccessible
12.3 Perte de réseau
Buffer adaptatif (cf. TECHNICAL.md) :
| Réseau | Buffer min | Buffer cible | Buffer max |
|---|---|---|---|
| WiFi | 5s | 30s | 120s |
| 4G/5G | 10s | 45s | 120s |
| 3G | 30s | 90s | 300s |
Comportement détaillé :
Phase 1 : Connexion instable (latence élevée, paquets perdus)
- Aucun message immédiat
- Lecture continue sur buffer
- Si > 10s latence : toast discret "Connexion instable"
Phase 2 : Perte totale réseau
- Lecture continue jusqu'à épuisement buffer
- Toast : "Hors ligne, lecture sur buffer (30s restantes)"
- Compte à rebours visible
Phase 3 : Buffer épuisé sans reconnexion
- Pause automatique
- Overlay : "Connexion perdue. Reconnexion en cours..."
- Retry automatique toutes les 5s (max 6 tentatives = 30s)
Phase 4 : Basculement mode offline (après 30s échec)
- Popup : "Voulez-vous continuer avec vos contenus téléchargés ?"
- Boutons : "Réessayer" / "Mode offline"
- Si "Mode offline" → lecture contenus téléchargés
Reconnexion réussie :
- Reprise automatique lecture au point d'arrêt exact
- Toast : "Connexion rétablie"
Justification :
- Expérience fluide zones blanches (tunnels, campagne)
- Buffer généreux : absorbe fluctuations réseau mobile
- Mode offline secours : si coupure prolongée
12.4 Géolocalisation désactivée
Mode dégradé automatique
Contenu disponible :
| Type contenu | Disponible |
|---|---|
| Contenu national (podcasts, actualités) | ✅ |
| Contenu téléchargé (offline) | ✅ |
| Contenus "Neutre" géographiquement | ✅ |
| Contenu géolocalisé (Ancré/Contextuel) | ❌ |
| Audio-guides | ❌ |
| Notifications push géo-déclenchées | ❌ |
Popup au lancement :
- Apparition : Premier lancement après refus géolocalisation
- Message : "RoadWave fonctionne mieux avec la géolocalisation activée. Sans elle, seul le contenu national sera disponible."
- Boutons :
- "Activer" → Redirection paramètres OS
- "Continuer sans" → Mode dégradé
- Checkbox : "Ne plus me demander"
Banner permanent si refus :
- Bandeau haut écran : "Mode limité : géolocalisation désactivée. [Activer]"
- Pas intrusif mais rappel constant
- Disparaît si géolocalisation réactivée
Justification :
- App reste fonctionnelle sans GPS (pas de blocage)
- Incitation forte à activer (meilleure UX)
- Respecte choix user (RGPD : consentement libre)