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.
398 lines
17 KiB
Gherkin
398 lines
17 KiB
Gherkin
# language: fr
|
||
|
||
@moderation @community
|
||
Fonctionnalité: Modération communautaire - Badges et récompenses
|
||
En tant que plateforme
|
||
Je veux gamifier les signalements pertinents
|
||
Afin d'améliorer la qualité des signalements et réduire la charge modérateurs
|
||
|
||
# 19. Modération Communautaire - Badges et Récompenses
|
||
|
||
Contexte:
|
||
Étant donné que le système de modération communautaire est actif
|
||
|
||
# 19.1 - Système de badges
|
||
|
||
Scénario: Trois niveaux de badges disponibles
|
||
Étant donné que je consulte le système de badges
|
||
Quand je vois les badges disponibles
|
||
Alors 3 niveaux de badges existent:
|
||
| badge | nom | critères | avantages |
|
||
| 🥉 | Contributeur Bronze | 5 validés + 70% pertinence | Signalements prioritaires (+10 points) |
|
||
| 🥈 | Contributeur Argent | 20 validés + 80% pertinence | +20 points + Badge visible profil |
|
||
| 🥇 | Contributeur Or | 50 validés + 90% pertinence | +30 points + Badge + Réduction Premium |
|
||
Et les badges valorisent la qualité plutôt que la quantité
|
||
|
||
Scénario: Règles d'éligibilité aux badges
|
||
Étant donné que je veux obtenir un badge
|
||
Quand je consulte les règles d'éligibilité
|
||
Alors les critères suivants s'appliquent:
|
||
| règle | valeur |
|
||
| Minimum signalements envoyés pour éligibilité | 10 |
|
||
| Signalements "En cours" comptent dans le calcul | non |
|
||
| Signalements rejetés font baisser le taux | oui |
|
||
| Période de calcul (glissante) | 6 mois |
|
||
Et seuls les 6 derniers mois sont pris en compte
|
||
|
||
Scénario: Calcul du taux de pertinence
|
||
Étant donné que j'ai envoyé 20 signalements
|
||
Et que 16 ont été validés par les modérateurs
|
||
Et que 4 ont été rejetés
|
||
Quand le système calcule mon taux de pertinence
|
||
Alors la formule appliquée est "Signalements validés / Total signalements × 100"
|
||
Et mon taux est de 80% (16 / 20 × 100)
|
||
Et ce taux détermine mon éligibilité aux badges
|
||
|
||
Scénario: Obtention du badge Bronze
|
||
Étant donné que j'ai 10 signalements envoyés
|
||
Et que 7 signalements ont été validés
|
||
Et que mon taux de pertinence est de 70%
|
||
Quand le système évalue mon éligibilité
|
||
Alors j'obtiens le badge 🥉 Contributeur Bronze
|
||
Et je reçois une notification:
|
||
"""
|
||
🎉 Félicitations ! Vous êtes désormais Contributeur Bronze.
|
||
Merci de rendre RoadWave meilleur !
|
||
"""
|
||
Et mes futurs signalements gagnent +10 points de priorité
|
||
|
||
Scénario: Obtention du badge Argent
|
||
Étant donné que j'ai déjà le badge Bronze
|
||
Et que j'ai 25 signalements envoyés
|
||
Et que 20 signalements ont été validés
|
||
Et que mon taux de pertinence est de 80%
|
||
Et que 30 jours se sont écoulés depuis l'obtention du badge Bronze
|
||
Quand le système évalue mon éligibilité
|
||
Alors j'obtiens le badge 🥈 Contributeur Argent
|
||
Et je reçois une notification:
|
||
"""
|
||
🎉 Impressionnant ! Badge Contributeur Argent obtenu.
|
||
Votre engagement fait la différence !
|
||
"""
|
||
Et le badge est visible sur mon profil public
|
||
Et mes futurs signalements gagnent +20 points de priorité
|
||
|
||
Scénario: Obtention du badge Or
|
||
Étant donné que j'ai déjà le badge Argent
|
||
Et que j'ai 60 signalements envoyés
|
||
Et que 54 signalements ont été validés
|
||
Et que mon taux de pertinence est de 90%
|
||
Et que 60 jours se sont écoulés depuis l'obtention du badge Argent
|
||
Quand le système évalue mon éligibilité
|
||
Alors j'obtiens le badge 🥇 Contributeur Or
|
||
Et je reçois une notification:
|
||
"""
|
||
🎉 Exceptionnel ! Vous êtes Contributeur Or.
|
||
La communauté vous remercie pour votre aide précieuse !
|
||
"""
|
||
Et je bénéficie d'une réduction Premium -50% pendant 3 mois
|
||
Et mes futurs signalements gagnent +30 points de priorité
|
||
|
||
Scénario: Délai minimum entre niveaux de badges
|
||
Étant donné que j'ai obtenu le badge Bronze il y a 15 jours
|
||
Et que je remplis les critères pour le badge Argent
|
||
Quand le système évalue mon éligibilité
|
||
Alors je ne peux pas encore obtenir le badge Argent
|
||
Et je dois attendre 15 jours supplémentaires (30 jours minimum)
|
||
Et cela évite la montée en badge trop rapide (anti-farming)
|
||
|
||
# 19.1.3 - Découverte du système
|
||
|
||
Scénario: Modal d'information au premier signalement
|
||
Étant donné que je viens d'envoyer mon tout premier signalement
|
||
Et que le toast de confirmation standard s'est affiché
|
||
Quand exactement 2 secondes se sont écoulées
|
||
Alors une modal d'information s'affiche automatiquement
|
||
Et la modal explique le système de badges et récompenses
|
||
Et la modal contient le titre "🎯 Bravo ! Vous contribuez à une communauté plus saine"
|
||
Et la modal contient le message suivant:
|
||
"""
|
||
En signalant ce contenu, vous participez activement à améliorer
|
||
l'expérience de tous les utilisateurs RoadWave.
|
||
|
||
Vos contributions de qualité sont valorisées et récompensées :
|
||
|
||
🥉 Bronze : 5 signalements validés
|
||
→ Signalements prioritaires (+10 points)
|
||
|
||
🥈 Argent : 20 signalements validés
|
||
→ Badge visible + priorité accrue (+20 points)
|
||
|
||
🥇 Or : 50 signalements validés
|
||
→ Réduction Premium -50% pendant 3 mois
|
||
|
||
💡 Votre taux de pertinence compte !
|
||
Formule : Signalements validés ÷ Total × 100
|
||
|
||
Continuez à nous aider, chaque signalement pertinent compte ! 🙏
|
||
"""
|
||
Et la modal contient un bouton "En savoir plus" qui redirige vers la page dédiée badges
|
||
Et la modal contient un bouton "J'ai compris" qui ferme la modal
|
||
Et la modal ne se réaffiche jamais (flag "badge_modal_seen" en base de données)
|
||
Et le délai de 2 secondes permet de laisser l'utilisateur lire le toast de confirmation d'abord
|
||
|
||
# 19.1.4 - Affichage badges et statistiques
|
||
|
||
Scénario: Statistiques personnelles visibles
|
||
Étant donné que j'ai un badge Bronze
|
||
Quand je consulte "Profil > Mes signalements"
|
||
Alors je vois mes statistiques de modération:
|
||
"""
|
||
📊 Vos statistiques de modération
|
||
Signalements envoyés : 27
|
||
Validés : 23 ✅
|
||
Rejetés : 4 ❌
|
||
Taux de pertinence : 85%
|
||
|
||
Badge actuel : 🥉 Contributeur Bronze
|
||
Prochain palier : 🥈 Contributeur Argent (17 signalements validés restants)
|
||
"""
|
||
Et je vois ma progression vers le prochain badge
|
||
|
||
Scénario: Toast après validation de signalement
|
||
Étant donné que j'ai un badge Bronze (3/5 signalements validés)
|
||
Et que j'envoie un nouveau signalement
|
||
Quand le modérateur valide mon signalement
|
||
Alors je reçois un toast:
|
||
"""
|
||
✅ Bravo ! Votre signalement a aidé la communauté.
|
||
Progression : 4/5 pour badge Bronze 🥉
|
||
"""
|
||
Et je vois ma progression vers le badge suivant
|
||
|
||
Scénario: Toast après rejet de signalement
|
||
Étant donné que j'ai un taux de pertinence de 65%
|
||
Et que j'envoie un nouveau signalement
|
||
Quand le modérateur rejette mon signalement
|
||
Alors je reçois un toast:
|
||
"""
|
||
❌ Signalement non retenu.
|
||
Taux de pertinence : 60%.
|
||
Continuez vos efforts !
|
||
"""
|
||
Et je vois l'impact sur mon taux de pertinence
|
||
|
||
# 19.2 - Score de fiabilité
|
||
|
||
Scénario: Calcul du score de fiabilité
|
||
Étant donné que j'ai 15 signalements validés
|
||
Et que j'ai 3 signalements rejetés
|
||
Et que j'ai le badge Or actif
|
||
Quand le système calcule mon score de fiabilité
|
||
Alors la formule appliquée est:
|
||
"""
|
||
Score fiabilité = min(100, (Validés × 10 - Rejetés × 5 + Bonus_Or × 20))
|
||
"""
|
||
Et mon score est: min(100, (15 × 10 - 3 × 5 + 1 × 20)) = 100 (plafonné)
|
||
Et ce score est utilisé dans l'algorithme de priorisation
|
||
|
||
Scénario: Utilisation du score dans la priorisation
|
||
Étant donné que j'ai un score de fiabilité de 85/100
|
||
Et qu'un autre utilisateur a un score de 30/100
|
||
Quand nous signalons des contenus similaires
|
||
Alors mon signalement a un meilleur score de priorité
|
||
Et mon signalement est traité en premier
|
||
Et la formule de priorité inclut:
|
||
"""
|
||
Priorité = (Score_IA × 0.7) + (Signalements_cumulés × 0.2) + (Fiabilité_signaleur × 0.1)
|
||
"""
|
||
Et la fiabilité est normalisée : 85/100 = 0.85
|
||
|
||
# 19.3 - Statut "Utilisateur de confiance"
|
||
|
||
Scénario: Obtention automatique du statut de confiance
|
||
Étant donné que j'obtiens le badge Argent
|
||
Quand mon statut est mis à jour
|
||
Alors je deviens automatiquement "Utilisateur de confiance"
|
||
Et mes signalements sont traités en priorité (même score IA)
|
||
Et je reçois des notifications sous 12h (au lieu de 24-48h)
|
||
Et le badge "Utilisateur de confiance" s'affiche sur mon profil
|
||
|
||
Scénario: Révocation du statut de confiance
|
||
Étant donné que je suis "Utilisateur de confiance"
|
||
Et que je perds mon badge Argent après audit trimestriel
|
||
Quand mon statut est réévalué
|
||
Alors le statut "Utilisateur de confiance" est révoqué
|
||
Et je reviens au statut normal
|
||
Et aucune sanction supplémentaire n'est appliquée
|
||
|
||
# 19.4 - Réduction Premium pour badge Or
|
||
|
||
Scénario: Notification de réduction Premium au badge Or
|
||
Étant donné que j'obtiens le badge Contributeur Or
|
||
Quand la notification est envoyée
|
||
Alors je reçois un email + push + in-app:
|
||
"""
|
||
🎉 Exceptionnel ! Vous avez obtenu le badge Contributeur Or
|
||
|
||
Vous faites partie des meilleurs contributeurs de RoadWave.
|
||
Grâce à votre engagement et votre vigilance, vous aidez
|
||
des milliers d'utilisateurs à profiter d'une expérience audio de qualité.
|
||
|
||
La communauté vous remercie ! 🙏
|
||
|
||
En reconnaissance de votre aide précieuse, vous bénéficiez de :
|
||
|
||
✨ 3 mois d'abonnement Premium à -50%
|
||
→ 2.49€/mois au lieu de 4.99€
|
||
|
||
[Profiter de l'offre]
|
||
|
||
Cette offre est valable pendant 30 jours.
|
||
"""
|
||
Et l'offre est valable pendant 30 jours
|
||
|
||
Scénario: Activation de la réduction Premium Or
|
||
Étant donné que j'ai obtenu le badge Or
|
||
Et que j'ai reçu l'offre Premium -50%
|
||
Quand je clique sur "Profiter de l'offre" dans les 30 jours
|
||
Alors je souscris à Premium à 2.49€/mois
|
||
Et la réduction est valable pour 3 mois
|
||
Et après 3 mois, le renouvellement passe à 4.99€/mois
|
||
Et l'offre n'est pas cumulable avec l'offre annuelle
|
||
|
||
Scénario: Expiration de l'offre Premium après 30 jours
|
||
Étant donné que j'ai obtenu le badge Or il y a 31 jours
|
||
Et que je n'ai pas activé l'offre Premium -50%
|
||
Quand j'essaie d'activer l'offre
|
||
Alors l'offre a expiré
|
||
Et je vois le message "Votre offre Premium -50% a expiré"
|
||
Et mon badge Or est conservé (seule l'offre expire)
|
||
Et je ne peux plus bénéficier de la réduction
|
||
|
||
Scénario: Rappels avant expiration de l'offre
|
||
Étant donné que j'ai obtenu le badge Or
|
||
Et que je n'ai pas encore activé l'offre Premium
|
||
Quand il reste 7 jours avant l'expiration
|
||
Alors je reçois un email + push:
|
||
"""
|
||
Il vous reste 7 jours pour profiter de votre réduction Premium -50%
|
||
"""
|
||
Et quand il reste 1 jour, je reçois un dernier rappel:
|
||
"""
|
||
Dernière chance ! Votre réduction Premium -50% expire demain
|
||
"""
|
||
|
||
Scénario: Perte du badge Or pendant l'abonnement Premium
|
||
Étant donné que j'ai le badge Or et l'abonnement Premium -50% actif
|
||
Et que je perds le badge Or après un audit trimestriel
|
||
Quand mon abonnement arrive à échéance
|
||
Alors l'abonnement en cours reste actif jusqu'à sa fin normale
|
||
Mais le renouvellement se fait à prix normal 4.99€/mois
|
||
Et je ne peux pas réobtenir l'offre -50% même si je récupère le badge Or
|
||
|
||
# 19.5 - Anti-abus
|
||
|
||
Scénario: Limite de 10 signalements par 24h
|
||
Étant donné que j'ai déjà envoyé 10 signalements aujourd'hui
|
||
Quand j'essaie d'envoyer un 11ème signalement
|
||
Alors le signalement est automatiquement rejeté
|
||
Et je vois le message:
|
||
"""
|
||
Limite quotidienne atteinte (10 signalements/24h).
|
||
Réessayez demain.
|
||
"""
|
||
Et une alerte modérateur automatique est déclenchée
|
||
|
||
Scénario: Détection de signalement massif suspect
|
||
Étant donné que j'ai envoyé 35 signalements cette semaine
|
||
Quand l'audit automatique hebdomadaire s'exécute
|
||
Alors mon compte est détecté comme suspect (>30/semaine)
|
||
Et une enquête manuelle modérateur est déclenchée
|
||
Et le modérateur peut révoquer mon badge si abus confirmé
|
||
|
||
Scénario: Patterns suspects détectés
|
||
Étant donné que le système analyse mes patterns de signalement
|
||
Quand des comportements suspects sont identifiés:
|
||
| pattern | seuil |
|
||
| Signalement massif | >30/semaine |
|
||
| Taux de pertinence très faible | <50% |
|
||
| Tous signalements rejetés sur 7 jours | 100% rejet |
|
||
| Signalements ciblant toujours même créateur | Harcèlement |
|
||
Alors une enquête manuelle est déclenchée
|
||
Et le modérateur examine les signalements en détail
|
||
|
||
Scénario: Audit trimestriel automatique des badges
|
||
Étant donné que le système effectue l'audit trimestriel
|
||
Quand mon badge est audité
|
||
Alors le système recalcule mon taux de pertinence sur 6 mois glissants
|
||
Et vérifie les critères:
|
||
| badge | taux minimum |
|
||
| Bronze | 70% |
|
||
| Argent | 80% |
|
||
| Or | 90% |
|
||
Et si mon taux est insuffisant, mon badge est révoqué
|
||
|
||
Scénario: Email de prévention 7 jours avant audit
|
||
Étant donné que l'audit trimestriel arrive dans 7 jours
|
||
Et que mon taux de pertinence est de 78%
|
||
Et que j'ai un badge Argent (minimum 80% requis)
|
||
Quand le système envoie les notifications préventives
|
||
Alors je reçois un email:
|
||
"""
|
||
Votre badge Contributeur Argent sera audité dans 7 jours.
|
||
Taux de pertinence actuel : 78%
|
||
Minimum requis : 80%
|
||
|
||
Continuez à signaler du contenu pertinent pour conserver votre badge !
|
||
"""
|
||
Et je suis informé à l'avance pour améliorer mes signalements
|
||
|
||
Scénario: Résultat d'audit - Badge conservé
|
||
Étant donné que l'audit trimestriel vient d'être effectué
|
||
Et que mon taux de pertinence est de 85%
|
||
Et que j'ai un badge Argent (minimum 80% requis)
|
||
Quand je reçois le résultat
|
||
Alors je reçois un email: "Badge conservé ✓"
|
||
Et mon badge reste actif pour 3 mois supplémentaires
|
||
|
||
Scénario: Résultat d'audit - Badge révoqué
|
||
Étant donné que l'audit trimestriel vient d'être effectué
|
||
Et que mon taux de pertinence est de 75%
|
||
Et que j'ai un badge Argent (minimum 80% requis)
|
||
Quand je reçois le résultat
|
||
Alors je reçois un email: "Badge révoqué ✗"
|
||
Et mon badge Argent est révoqué immédiatement
|
||
Mais je peux réobtenir un badge ultérieurement (pas de ban)
|
||
|
||
Scénario: Sanctions pour abus détecté - Mineur
|
||
Étant donné que j'ai envoyé >10 signalements/jour pendant 1 jour
|
||
Quand l'abus mineur est détecté
|
||
Alors je reçois un avertissement
|
||
Et ma limite est réduite à 5 signalements/jour pendant 7 jours
|
||
Et je reçois une notification explicative
|
||
|
||
Scénario: Sanctions pour abus détecté - Modéré
|
||
Étant donné que j'ai envoyé >30 signalements/semaine
|
||
Et que mon taux de pertinence est <50%
|
||
Quand l'abus modéré est confirmé
|
||
Alors tous mes badges sont révoqués
|
||
Et je suis interdit de signalement pendant 30 jours
|
||
Et je reçois une notification de sanction
|
||
|
||
Scénario: Sanctions pour abus détecté - Grave
|
||
Étant donné que j'ai participé à un farming coordonné de signalements
|
||
Quand l'abus grave est confirmé par modérateur
|
||
Alors je reçois un ban permanent de la fonctionnalité signalement
|
||
Et tous mes badges sont révoqués définitivement
|
||
Et il n'y a pas de recours possible pour farming confirmé
|
||
|
||
# ROI et justification
|
||
|
||
Scénario: ROI positif de la modération communautaire
|
||
Étant donné que 10 utilisateurs Or sont actifs
|
||
Quand on calcule le ROI
|
||
Alors chaque utilisateur Or économise 5-10h de modération/mois
|
||
Et cela représente 75-150€ économisés par utilisateur (taux 15€/h)
|
||
Et le total est de 750-1500€ économisés/mois
|
||
Et le coût des réductions Premium est maximum 200€/mois (50 utilisateurs Or)
|
||
Et le ROI est positif dès 2-3 utilisateurs Or actifs
|
||
|
||
Scénario: Coût total du système
|
||
Étant donné que le système de modération communautaire est en place
|
||
Quand on calcule le coût total
|
||
Alors en phase MVP, le coût est de 0€
|
||
Et en phase Post-MVP avec réductions Premium, le coût est de 0-200€/mois
|
||
Et le système est entièrement automatique (0€ développement continu)
|
||
Et le ROI est largement positif
|