Files
roadwave/docs/domains/moderation/features/ui/historique-signalements.feature
jpgiannetti 5e5fcf4714 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.
2026-02-07 17:15:02 +01:00

305 lines
12 KiB
Gherkin

# language: fr
@ui @moderation @historique
Fonctionnalité: Historique des signalements utilisateur (Mobile)
En tant qu'utilisateur
Je veux consulter l'historique de mes signalements
Afin de suivre leur traitement et comprendre les décisions prises
# 14.1.3 - Historique personnel des signalements
Contexte:
Étant donné que je suis connecté à l'application mobile
Et que j'ai envoyé des signalements précédemment
# Accès à l'historique
Scénario: Accéder à l'historique depuis le profil
Étant donné que je suis dans mon profil utilisateur
Quand je scroll vers le bas
Alors je vois une section "📊 Modération"
Et je vois l'option "Mes signalements"
Et je vois le nombre de signalements en badge: "(12)"
Et je peux cliquer pour accéder à l'historique
Scénario: Accéder à l'historique depuis le toast de confirmation
Étant donné que je viens d'envoyer un signalement
Et que le toast de confirmation est affiché
Quand je clique sur "Voir mes signalements"
Alors je suis redirigé vers la page "Mes signalements"
Et la page s'affiche en moins de 500ms
Et mon dernier signalement est en tête de liste
# Affichage de la liste des signalements
Scénario: Affichage de l'historique vide
Étant donné que je n'ai jamais envoyé de signalement
Quand j'ouvre "Mes signalements"
Alors je vois un message:
"""
Aucun signalement pour le moment
Vous pouvez signaler un contenu inapproprié
depuis le menu de n'importe quel contenu.
"""
Et je vois une illustration vide sympathique
Et un bouton "Découvrir les règles de la communauté"
Scénario: Liste des signalements avec informations clés
Étant donné que j'ai envoyé 5 signalements
Quand j'ouvre "Mes signalements"
Alors je vois une liste de 5 cartes de signalements
Et chaque carte affiche:
| information | exemple | position |
| Statut badge | "En cours 🔍" (orange) | Haut à droite |
| Titre du contenu | "Podcast #42" | Titre |
| Créateur | "@pseudo_createur" | Sous-titre |
| Catégorie | "🚫 Haine & violence" | Ligne 1 |
| Date | "Il y a 2 jours" ou "15/01/2026" | Ligne 2 |
| Mon commentaire | "Propos discriminatoires à 2:30" | Ligne 3 (si rempli) |
Et les cartes sont triées par date décroissante (plus récent en haut)
Plan du Scénario: Couleur du badge selon statut
Étant donné que j'ai un signalement avec le statut "<statut>"
Quand j'affiche l'historique
Alors le badge affiché est "<badge>"
Et la couleur du badge est "<couleur>"
Exemples:
| statut | badge | couleur |
| En cours | En cours 🔍 | Orange |
| Traité | Traité | Vert |
| Rejeté | Rejeté | Rouge |
Scénario: Affichage de la date relative
Étant donné que j'ai envoyé des signalements à différentes dates
Quand j'affiche l'historique
Alors les dates récentes s'affichent en format relatif:
| date signalement | affichage |
| Il y a 5 minutes | "À l'instant" |
| Il y a 2 heures | "Il y a 2h" |
| Il y a 1 jour | "Hier" |
| Il y a 3 jours | "Il y a 3j" |
| Il y a 10 jours | "15/01/2026" |
Et les dates anciennes (>7 jours) sont en format absolu
# Détails d'un signalement
Scénario: Consulter les détails d'un signalement
Étant donné que j'ai envoyé un signalement il y a 3 jours
Quand je clique sur la carte du signalement
Alors une page de détails s'affiche
Et je vois toutes les informations:
| section | contenu |
| En-tête | Titre du contenu + lien vers le contenu |
| Créateur | Pseudo + lien vers profil créateur |
| Ma catégorie | 🚫 Haine & violence |
| Mon commentaire | "Propos discriminatoires à 2:30" |
| Date d'envoi | "Envoyé le 15/01/2026 à 14:32" |
| Statut actuel | "En cours 🔍 - En attente de traitement" |
| Délai estimé | "Traitement sous 24-48h" |
Et je vois un bouton "Retour à mes signalements"
Scénario: Lien vers le contenu signalé
Étant donné que je consulte les détails d'un signalement
Et que le contenu signalé est toujours en ligne
Quand je clique sur le titre du contenu
Alors je suis redirigé vers la page du contenu
Et je peux réécouter le contenu si besoin
Et un badge "Signalé par vous" s'affiche discrètement
Scénario: Contenu supprimé suite au signalement
Étant donné que le contenu que j'ai signalé a été supprimé
Quand je consulte les détails du signalement
Alors le titre du contenu est affiché en gris barré
Et un message s'affiche: "Ce contenu a été retiré de la plateforme"
Et je ne peux pas accéder au contenu
Et le statut est "Traité "
# Notifications de changement de statut
Scénario: Notification quand un signalement est traité
Étant donné que j'ai signalé un contenu il y a 24h
Quand le modérateur traite mon signalement
Et que le contenu est retiré
Alors je reçois une notification push:
"""
Votre signalement a été traité
Le contenu a été retiré de la plateforme.
"""
Et je reçois une notification in-app identique
Et le statut dans mon historique passe à "Traité "
Et un badge (1) apparaît sur l'onglet "Mes signalements"
Scénario: Notification quand un signalement est rejeté
Étant donné que j'ai signalé un contenu
Quand le modérateur rejette mon signalement
Alors je reçois une notification:
"""
Votre signalement a été examiné
Le contenu ne viole pas les règles de la communauté.
"""
Et le statut dans mon historique passe à "Rejeté "
Et je peux voir la raison du rejet dans les détails
Scénario: Affichage de la raison du rejet
Étant donné que mon signalement a été rejeté
Quand je consulte les détails du signalement
Alors je vois une section "Raison du rejet":
"""
Après examen, le contenu ne viole pas nos règles.
Le passage mentionné est dans un contexte éducatif.
"""
Et la raison est claire et compréhensible
Et je peux apprendre pour améliorer mes futurs signalements
# Filtres et recherche
Scénario: Filtrer les signalements par statut
Étant donné que j'ai 20 signalements avec différents statuts
Quand j'ouvre l'historique
Alors je vois des onglets de filtres:
| onglet | nombre |
| Tous (20) | 20 |
| En cours (8)| 8 |
| Traités (9) | 9 |
| Rejetés (3) | 3 |
Et je peux cliquer sur un onglet pour filtrer
Et la liste se met à jour instantanément
Scénario: Rechercher dans mes signalements
Étant donné que j'ai 50 signalements
Quand j'ouvre la barre de recherche
Et que je tape "podcast"
Alors seuls les signalements contenant "podcast" s'affichent:
| recherche dans |
| Titre du contenu |
| Pseudo du créateur |
| Mon commentaire |
Et les résultats sont mis en évidence
Et la recherche est instantanée (pas de délai)
# Pull-to-refresh
Scénario: Actualiser la liste des signalements
Étant donné que je suis sur la page "Mes signalements"
Quand je tire vers le bas (pull-to-refresh)
Alors un spinner de chargement s'affiche
Et la liste est actualisée depuis le serveur
Et les nouveaux statuts sont affichés
Et un toast s'affiche: " Mis à jour"
# Pagination et performance
Scénario: Chargement progressif des signalements (pagination)
Étant donné que j'ai 100 signalements
Quand j'ouvre "Mes signalements"
Alors seuls les 20 premiers signalements sont chargés
Et quand je scroll en bas de liste
Alors les 20 suivants sont chargés automatiquement
Et un loader discret s'affiche pendant le chargement
Et l'UX est fluide sans saccade
Scénario: Performance de la liste
Étant donné que j'ai 100 signalements
Quand j'ouvre l'historique
Alors le premier affichage prend <500ms
Et le scroll est fluide (60 FPS)
Et les images/avatars se chargent en lazy loading
Et la mémoire utilisée reste <100 MB
# État vide pour chaque filtre
Scénario: Aucun signalement "En cours"
Étant donné que tous mes signalements ont été traités
Quand je clique sur l'onglet "En cours"
Alors je vois un message:
"""
Aucun signalement en cours
Tous vos signalements ont été traités.
"""
Et je vois une illustration vide
Scénario: Aucun signalement "Rejeté"
Étant donné que tous mes signalements ont été acceptés
Quand je clique sur l'onglet "Rejetés"
Alors je vois un message:
"""
Aucun signalement rejeté
Tous vos signalements étaient pertinents ! 🎉
"""
Et je vois un message encourageant
# Dark mode et accessibilité
Scénario: Support du dark mode
Étant donné que j'ai activé le dark mode
Quand j'affiche "Mes signalements"
Alors les couleurs s'adaptent:
| élément | couleur light | couleur dark |
| Fond page | Blanc | Noir (#121212) |
| Cartes | Gris clair | Gris foncé |
| Texte principal | Noir | Blanc |
| Badge "En cours" | Orange (#FF8C00) | Orange (#FFA500) |
| Badge "Traité" | Vert (#28A745) | Vert (#34D058) |
| Badge "Rejeté" | Rouge (#DC3545) | Rouge (#F85149) |
Et le contraste reste suffisant (WCAG AA)
Scénario: Accessibilité pour lecteur d'écran
Étant donné que j'utilise un lecteur d'écran
Quand je navigue dans l'historique
Alors chaque carte est annoncée clairement:
"""
Signalement du contenu "Podcast #42" par @pseudo.
Catégorie: Haine et violence.
Statut: En cours d'examen.
Envoyé il y a 2 jours.
"""
Et je peux naviguer au clavier entre les cartes
Et tous les boutons ont des labels descriptifs
# Gestion d'erreur
Scénario: Erreur réseau lors du chargement
Étant donné que je n'ai pas de connexion internet
Quand j'ouvre "Mes signalements"
Alors un message d'erreur s'affiche:
"""
Impossible de charger vos signalements
Vérifiez votre connexion internet
"""
Et un bouton "Réessayer" est affiché
Et je peux cliquer pour réessayer
Scénario: Cache local pour consultation hors ligne
Étant donné que j'ai consulté mes signalements hier
Et que je n'ai pas de connexion internet aujourd'hui
Quand j'ouvre "Mes signalements"
Alors les signalements en cache s'affichent
Et un message discret indique:
"""
📡 Mode hors ligne - Données mises en cache
"""
Et je peux consulter les détails
Mais les statuts peuvent ne pas être à jour
# Coût et conformité
Scénario: Coût de la fonctionnalité
Étant donné que l'historique des signalements est en place
Quand on évalue le coût
Alors le développement est 100% interne (Flutter)
Et aucun service tiers n'est utilisé
Et le coût opérationnel est de 0
Et les notifications in-app sont gratuites
Scénario: Conformité RGPD
Étant donné que mes données de signalement sont stockées
Quand je supprime mon compte
Alors tous mes signalements sont anonymisés
Et mes commentaires personnels sont supprimés
Et seules les métadonnées nécessaires sont conservées (conformité DSA)
Et je suis informé de cette procédure