# language: fr
Fonctionnalité: Limites d'abonnements et désabonnement
  En tant qu'auditeur
  Je veux gérer mes abonnements de manière équilibrée
  Afin de suivre mes créateurs préférés sans être submergé

  Contexte:
    Étant donné que l'API RoadWave est disponible
    Et que je suis connecté en tant qu'auditeur

  Scénario: Limite maximale de 200 abonnements
    Étant donné que je suis abonné à 199 créateurs
    Quand j'essaie de m'abonner à un 200ème créateur
    Alors l'abonnement réussit
    Et je suis maintenant abonné à 200 créateurs

  Scénario: Impossible de dépasser 200 abonnements
    Étant donné que je suis déjà abonné à 200 créateurs
    Quand j'essaie de m'abonner à un nouveau créateur
    Alors l'action échoue
    Et je vois le message:
      """
      Vous suivez déjà 200 créateurs. Désabonnez-vous d'un créateur pour en suivre un nouveau.
      """

  Scénario: Suggestion de désabonnement de créateurs inactifs
    Étant donné que je suis abonné à 200 créateurs
    Et que j'essaie de m'abonner à un nouveau créateur
    Quand je vois le message de limite atteinte
    Alors je vois aussi une suggestion:
      """
      Vous n'avez pas écouté [Créateur X] depuis 6 mois, le désabonner ?
      """
    Et un bouton "Désabonner" est proposé pour ce créateur

  Scénario: Liste triable des abonnements
    Étant donné que je suis abonné à 150 créateurs
    Quand j'accède à ma liste d'abonnements
    Alors je peux trier par:
      | critère                   | ordre                                      |
      | Date d'abonnement         | Plus récent / Plus ancien                 |
      | Nombre de contenus écoutés| Plus écoutés / Moins écoutés               |
      | Dernière activité créateur| Plus récent / Plus ancien                 |
      | Ordre alphabétique        | A-Z / Z-A                                  |

  Scénario: Abonnement initial augmente les jauges de +5%
    Étant donné que mes jauges d'intérêt sont:
      | catégorie    | valeur initiale |
      | Automobile   | 60%             |
      | Voyage       | 55%             |
    Et qu'un créateur tague ses contenus "Automobile" et "Voyage"
    Quand je m'abonne à ce créateur
    Alors mes jauges évoluent:
      | catégorie    | nouvelle valeur |
      | Automobile   | 65% (+5%)       |
      | Voyage       | 60% (+5%)       |

  Scénario: Abonnement avec créateur ayant 3 tags
    Étant donné qu'un créateur tague ses contenus:
      | tags                                 |
      | Automobile, Voyage, Technologie      |
    Et que mes jauges sont toutes à 50%
    Quand je m'abonne à ce créateur
    Alors les 3 jauges augmentent de +5%:
      | catégorie     | nouvelle valeur |
      | Automobile    | 55%             |
      | Voyage        | 55%             |
      | Technologie   | 55%             |

  Scénario: Désabonnement diminue les jauges de -5%
    Étant donné que je suis abonné à un créateur avec tags "Politique" et "Économie"
    Et que mes jauges sont:
      | catégorie    | valeur actuelle |
      | Politique    | 70%             |
      | Économie     | 65%             |
    Quand je me désabonne de ce créateur
    Alors mes jauges évoluent:
      | catégorie    | nouvelle valeur |
      | Politique    | 65% (-5%)       |
      | Économie     | 60% (-5%)       |

  Scénario: Désabonnement sans confirmation
    Étant donné que je consulte le profil d'un créateur suivi
    Quand je clique sur "Se désabonner"
    Alors le désabonnement est immédiat
    Et aucune popup de confirmation n'apparaît
    Car l'action est réversible (je peux me réabonner)

  Scénario: Réabonnement possible immédiatement
    Étant donné que je viens de me désabonner d'un créateur
    Quand je consulte à nouveau son profil
    Alors le bouton "S'abonner" est affiché
    Et je peux me réabonner immédiatement
    Et mes jauges augmentent à nouveau de +5%

  Scénario: Effet symétrique abonnement/désabonnement
    Étant donné qu'un créateur a les tags "Musique" et "Culture"
    Et que ma jauge Musique est à 50%
    Quand je m'abonne puis me désabonne immédiatement
    Alors ma jauge revient exactement à 50%
    Et il n'y a pas de perte ou gain net

  Scénario: Abonnement ne dépasse pas 100% de jauge
    Étant donné que ma jauge Automobile est à 97%
    Et qu'un créateur tague ses contenus "Automobile"
    Quand je m'abonne à ce créateur
    Alors ma jauge Automobile passe à 100% (limite max)
    Et l'augmentation effective est de +3% seulement

  Scénario: Désabonnement ne descend pas sous 0%
    Étant donné que ma jauge Politique est à 3%
    Et que je suis abonné à un créateur avec tag "Politique"
    Quand je me désabonne de ce créateur
    Alors ma jauge Politique passe à 0% (limite min)
    Et la diminution effective est de -3% seulement

  Scénario: Créateur ne voit pas qui est abonné (privacy)
    Étant donné que je suis abonné au créateur "JeanDupont"
    Quand "JeanDupont" consulte ses statistiques
    Alors il voit le nombre total d'abonnés (ex: "1,247 abonnés")
    Mais il ne voit pas la liste des utilisateurs abonnés
    Et mon identité reste privée

  Scénario: Créateur voit uniquement le nombre total d'abonnés
    Étant donné que je suis créateur
    Et que j'ai 523 abonnés
    Quand je consulte mes statistiques
    Alors je vois "523 abonnés"
    Mais je ne peux pas:
      | action interdite                      |
      | Voir la liste des abonnés             |
      | Contacter mes abonnés individuellement|
      | Voir leurs profils                    |

  Scénario: Pas d'abonnement mutuel visible
    Étant donné que je suis abonné au créateur "Alice"
    Et qu'"Alice" est abonnée à mon compte créateur
    Quand je consulte le profil d'"Alice"
    Alors je ne vois pas d'indication qu'elle est abonnée à moi
    Et il n'y a pas de badge "Abonné mutuellement"

  Scénario: Performance avec 200 abonnements
    Étant donné que je suis abonné à 200 créateurs
    Quand l'algorithme calcule ma recommandation
    Alors la requête SQL utilise un JOIN sur la table abonnements
    Et la table est indexée sur user_id et creator_id
    Et le temps de calcul reste inférieur à 50ms

  Scénario: Impact sur la recommandation avec beaucoup d'abonnements
    Étant donné que je suis abonné à 150 créateurs très actifs
    Et qu'ils publient collectivement 100 contenus par jour
    Quand l'algorithme génère ma file de 5 contenus
    Alors environ 60-70% des contenus proviennent de créateurs suivis (grâce au boost +30%)
    Mais 30-40% proviennent de nouveaux créateurs (découverte)

  Scénario: Notification de désabonnement au créateur (non implémenté)
    Étant donné que je me désabonne d'un créateur
    Alors le créateur ne reçoit aucune notification
    Et il ne peut pas savoir qui s'est désabonné
    Car cela préserve la privacy et évite le harcèlement

  Scénario: Statistiques d'abonnements pour l'utilisateur
    Étant donné que je suis abonné à 87 créateurs
    Quand j'accède à mes statistiques d'abonnements
    Alors je vois:
      | métrique                              | exemple valeur       |
      | Nombre total d'abonnements            | 87 / 200             |
      | Créateurs les plus écoutés            | Top 10 avec % écoute |
      | Créateurs non écoutés depuis 6 mois   | 12 créateurs         |
      | Nouveaux contenus non écoutés         | 23 contenus          |

  Scénario: Recherche dans la liste d'abonnements
    Étant donné que je suis abonné à 120 créateurs
    Quand j'accède à ma liste d'abonnements
    Alors je peux chercher par nom de créateur
    Et les résultats sont filtrés en temps réel
    Et je trouve rapidement un créateur spécifique

  Scénario: Export de la liste d'abonnements (RGPD)
    Étant donné que je demande l'export de mes données
    Quand l'export est généré
    Alors la liste de mes abonnements est incluse:
      ```json
      {
        "subscriptions": [
          {
            "creator_name": "JeanDupont",
            "creator_id": "abc123",
            "subscribed_at": "2025-06-15T10:30:00Z"
          },
          ...
        ]
      }
      ```

  Scénario: Suppression compte utilisateur et impact sur abonnements
    Étant donné que je suis abonné à 50 créateurs
    Quand je supprime définitivement mon compte
    Alors tous mes abonnements sont supprimés
    Et le compteur d'abonnés de chaque créateur est décrémenté de -1
    Et les jauges n'existent plus (données supprimées)

  Scénario: Suppression compte créateur et impact sur abonnés
    Étant donné que je suis abonné au créateur "Bob"
    Quand "Bob" supprime son compte créateur
    Alors je suis automatiquement désabonné
    Et mes jauges diminuent de -5% pour les tags de "Bob"
    Et je ne vois plus "Bob" dans ma liste d'abonnements

  Scénario: Limite 200 justifiée par usage réaliste
    Étant donné que la moyenne d'abonnements sur YouTube est de ~50-100 chaînes
    Et que Twitter limite à 5000 follows (mais moyenne ~150)
    Quand RoadWave fixe la limite à 200
    Alors cela couvre largement 99% des utilisateurs
    Et évite les abus (comptes spam suivant tout le monde)

  Scénario: Table PostgreSQL optimisée pour abonnements
    Étant donné la structure de table subscriptions:
      ```sql
      CREATE TABLE subscriptions (
        user_id UUID,
        creator_id UUID,
        subscribed_at TIMESTAMP,
        PRIMARY KEY (user_id, creator_id)
      );
      CREATE INDEX idx_user_subscriptions ON subscriptions(user_id);
      CREATE INDEX idx_creator_subscribers ON subscriptions(creator_id);
      ```
    Alors les requêtes d'abonnements sont O(1) avec index
    Et le count d'abonnés par créateur est rapide
    Et la vérification "est abonné ?" est instantanée

  Scénario: Détection d'abonnements abusifs
    Étant donné qu'un utilisateur s'abonne à 200 créateurs en moins de 5 minutes
    Quand le système détecte cette activité suspecte
    Alors un rate limiting est appliqué (max 10 abonnements/minute)
    Et l'utilisateur voit "Trop d'actions rapides. Veuillez réessayer dans 1 minute"
    Et cela prévient les bots de spam

  Scénario: Badge créateur vérifié visible dans abonnements
    Étant donné que je suis abonné à 3 créateurs dont 1 vérifié
    Quand je consulte ma liste d'abonnements
    Alors le créateur vérifié a un badge ✓ bleu
    Et les créateurs non vérifiés n'ont pas de badge
