# language: fr Fonctionnalité: Upload et encodage de contenu audio En tant que créateur Je veux uploader mon contenu audio Afin qu'il soit encodé et disponible pour les auditeurs Contexte: Étant donné que l'API RoadWave est disponible Et que je suis un créateur connecté Scénario: Upload fichier MP3 valide Quand j'uploade un fichier MP3 de 50 MB et 30 minutes Alors l'upload réussit Et le fichier est envoyé vers OVH Object Storage temporaire Et un job d'encodage asynchrone est lancé Scénario: Upload fichier AAC valide (.aac) Quand j'uploade un fichier AAC de 80 MB et 1 heure Alors l'upload réussit Et le fichier est accepté Et l'encodage démarre Scénario: Upload fichier M4A valide Quand j'uploade un fichier M4A de 100 MB et 2 heures Alors l'upload réussit Et le fichier est traité comme AAC Et l'encodage démarre Scénario: Rejet fichier WAV (non supporté) Quand j'essaie d'uploader un fichier WAV Alors l'upload échoue Et je vois le message "Format non supporté. Utilisez MP3 ou AAC (.mp3, .aac, .m4a)" Scénario: Rejet fichier FLAC (non supporté) Quand j'essaie d'uploader un fichier FLAC Alors l'upload échoue Et je vois le message "Format non supporté. Utilisez MP3 ou AAC (.mp3, .aac, .m4a)" Scénario: Validation taille maximale 200 MB Quand j'essaie d'uploader un fichier MP3 de 201 MB Alors l'upload échoue Et je vois le message "Fichier trop volumineux (max 200 MB)" Scénario: Upload à la limite de 200 MB accepté Quand j'uploade un fichier MP3 de exactement 200 MB Alors l'upload réussit Et le fichier est accepté Scénario: Validation durée maximale 4 heures Quand j'essaie d'uploader un fichier de 4h 10min Alors l'upload échoue Et je vois le message "Durée trop longue (max 4 heures)" Scénario: Upload à la limite de 4h accepté Quand j'uploade un fichier de exactement 4 heures Alors l'upload réussit Et le fichier est accepté Scénario: Validation format côté client Quand je sélectionne un fichier dans l'interface Alors la validation du format est faite immédiatement côté client Et je suis informé avant même de lancer l'upload si le format est invalide Scénario: Double validation côté backend Étant donné qu'un fichier a passé la validation client Quand le backend reçoit le fichier Alors une validation supplémentaire est effectuée Et le format et l'intégrité sont vérifiés Scénario: Pipeline d'encodage - étape 1 upload Quand j'uploade un fichier MP3 valide Alors le fichier est stocké temporairement dans OVH Object Storage Et un job d'encodage est mis en file d'attente Scénario: Pipeline d'encodage - validation format Étant donné qu'un job d'encodage est lancé Quand le worker Go traite le fichier Alors le format est validé avec FFmpeg Et l'intégrité du fichier est vérifiée Scénario: Pipeline d'encodage - génération 3 profils Opus Étant donné qu'un fichier audio est validé Quand l'encodage démarre Alors 3 profils Opus sont générés: | qualité | bitrate | usage | | Basse | 24 kbps | 2G/Edge | | Standard | 48 kbps | 3G | | Haute | 64 kbps | 4G/5G | Scénario: Pipeline d'encodage - génération segments HLS Étant donné que les profils Opus sont générés Quand l'encodage continue Alors un fichier manifest .m3u8 est créé Et des segments .ts sont générés Et le contenu est prêt pour streaming HLS Scénario: Pipeline d'encodage - génération image par défaut Étant donné que l'encodage est en cours Quand les métadonnées sont traitées Alors une image de couverture par défaut est générée Et l'image fait 800×800px au format PNG Scénario: Pipeline d'encodage - suppression fichier original Étant donné que l'encodage est terminé avec succès Quand tous les fichiers de sortie sont générés Alors le fichier original MP3/AAC est supprimé Et seuls les profils Opus et HLS sont conservés Et l'espace de stockage est économisé Scénario: Temps d'encodage contenu 5 minutes Étant donné qu'un fichier de 5 minutes est uploadé Quand l'encodage démarre Alors l'encodage prend environ 30 secondes Et je reçois une notification "Contenu prêt à publier" Scénario: Temps d'encodage podcast 1 heure Étant donné qu'un fichier de 1 heure est uploadé Quand l'encodage démarre Alors l'encodage prend environ 5 minutes Et une barre de progression est affichée Scénario: Temps d'encodage podcast 4 heures Étant donné qu'un fichier de 4 heures est uploadé Quand l'encodage démarre Alors l'encodage prend environ 20 minutes Et je peux fermer l'app (traitement asynchrone) Scénario: Notification "Contenu prêt à publier" Étant donné que mon contenu est en cours d'encodage Quand l'encodage se termine avec succès Alors je reçois une notification push "✅ Votre contenu est prêt à publier" Et je peux accéder à l'interface de publication Scénario: Échec d'encodage - fichier corrompu Étant donné qu'un fichier MP3 corrompu est uploadé Quand l'encodage démarre Alors l'encodage échoue Et je reçois une notification "❌ Erreur d'encodage: fichier corrompu" Et le fichier temporaire est supprimé Scénario: Écoute accélérée - vitesses disponibles Étant donné qu'un contenu est publié Quand un auditeur écoute le contenu Alors il peut choisir parmi les vitesses: | vitesse | usage | | 0.75x | Compréhension difficile | | 1.0x | Normal (défaut) | | 1.25x | Gain léger | | 1.5x | Podcasts longs | | 2.0x | Survol rapide | Scénario: Écoute accélérée pour modérateurs Étant donné que je suis un modérateur Et qu'un contenu de 30 secondes est à valider Quand je l'écoute à 2.0x Alors je termine l'écoute en 15 secondes Et ma productivité est doublée Scénario: Écoute accélérée pour auditeurs Étant donné que je suis un auditeur Et qu'un podcast de 1 heure est disponible Quand je configure la vitesse à 1.5x Alors j'écoute le podcast en 40 minutes Et je gagne 20 minutes Scénario: Sauvegarde préférence vitesse d'écoute Étant donné que je configure la vitesse à 1.5x Quand j'écoute plusieurs contenus Alors tous les contenus sont lus à 1.5x par défaut Et ma préférence est sauvegardée Scénario: Scalabilité horizontale des workers Étant donné que 100 contenus sont uploadés simultanément Quand les jobs d'encodage sont distribués Alors plusieurs workers Go traitent les jobs en parallèle Et Kubernetes scale automatiquement les pods Et tous les contenus sont encodés sans délai excessif Scénario: Statut d'encodage visible Étant donné que mon contenu est en cours d'encodage Quand je consulte mes contenus Alors je vois le statut: | état | affichage | | En attente | ⏳ File d'attente | | En cours | ⚙️ Encodage en cours (45%) | | Terminé | ✅ Prêt à publier | | Échec | ❌ Erreur - Réessayer | Scénario: Réessayer après échec d'encodage Étant donné que l'encodage de mon contenu a échoué Quand je clique sur "Réessayer" Alors un nouveau job d'encodage est lancé Et je peux tenter à nouveau Scénario: Timeout upload après 30 minutes Étant donné que mon upload dure plus de 30 minutes Quand le timeout est atteint Alors l'upload est annulé Et je vois le message "Upload interrompu, veuillez réessayer" Et je peux reprendre l'upload Scénario: Reprise upload après interruption réseau Étant donné que mon upload a échoué à 75% Quand je clique sur "Reprendre" Alors l'upload reprend à partir de 75% Et le fichier partiel est conservé temporairement Scénario: Limite de 3 uploads simultanés Étant donné que j'ai déjà 3 uploads en cours Quand j'essaie d'uploader un 4ème fichier Alors l'upload est refusé Et je vois le message "Maximum 3 uploads simultanés. Attendez qu'un upload se termine." Scénario: Détection fichier corrompu pendant upload Étant donné que j'uploade un fichier MP3 corrompu Quand le backend détecte la corruption Alors l'upload est rejeté immédiatement Et je vois le message "Fichier corrompu, veuillez vérifier votre fichier" Et je n'attends pas la fin de l'encodage Scénario: Fichier original conservé pendant 48h après échec Étant donné que mon encodage a échoué Quand je clique sur "Réessayer" dans les 48h Alors le fichier original est encore disponible Et un nouvel encodage démarre sans réupload Scénario: Fichier original supprimé après 48h Étant donné que mon encodage a échoué il y a 48h Quand j'essaie de réessayer Alors je dois réuploader le fichier Et je vois le message "Fichier original expiré, veuillez réuploader"