diff --git a/CLAUDE.md b/CLAUDE.md index 4b885b7..003acd8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -184,14 +184,43 @@ Feature: Geolocalised recommendation All technical decisions are documented in Architecture Decision Records (ADRs) in `/docs/adr/`: +### Core Architecture - [ADR-001](docs/adr/001-langage-backend.md): Backend language (Go) -- [ADR-002](docs/adr/002-protocole-streaming.md): Streaming protocol (HLS) -- [ADR-005](docs/adr/005-base-de-donnees.md): Database (PostgreSQL + PostGIS) -- [ADR-008](docs/adr/008-authentification.md): Authentication (Zitadel) - [ADR-010](docs/adr/010-architecture-backend.md): Backend architecture (modular monolith) - [ADR-011](docs/adr/011-orm-acces-donnees.md): Data access (sqlc) +- [ADR-012](docs/adr/012-frontend-mobile.md): Frontend mobile (Flutter) - [ADR-014](docs/adr/014-organisation-monorepo.md): Monorepo organization +### Data & Infrastructure +- [ADR-005](docs/adr/005-base-de-donnees.md): Database (PostgreSQL + PostGIS) +- [ADR-021](docs/adr/021-solution-cache.md): Cache solution (Redis) +- [ADR-015](docs/adr/015-hebergement.md): Hosting (OVH) +- [ADR-019](docs/adr/019-geolocalisation-ip.md): IP geolocation fallback + +### Streaming & Content +- [ADR-002](docs/adr/002-protocole-streaming.md): Streaming protocol (HLS) +- [ADR-003](docs/adr/003-codec-audio.md): Audio codec (Opus) +- [ADR-004](docs/adr/004-cdn.md): CDN strategy + +### Security & Auth +- [ADR-006](docs/adr/006-chiffrement.md): Encryption (TLS 1.3) +- [ADR-008](docs/adr/008-authentification.md): Authentication (Zitadel) +- [ADR-025](docs/adr/025-securite-secrets.md): Secrets management + +### Testing & Quality +- [ADR-007](docs/adr/007-tests-bdd.md): BDD tests (Gherkin) +- [ADR-013](docs/adr/013-strategie-tests.md): Test strategy +- [ADR-022](docs/adr/022-strategie-cicd-monorepo.md): CI/CD strategy + +### Features & Operations +- [ADR-009](docs/adr/009-solution-paiement.md): Payment solution (Mangopay) +- [ADR-016](docs/adr/016-service-emailing.md): Email service (Brevo) +- [ADR-017](docs/adr/017-notifications-geolocalisees.md): Geo notifications +- [ADR-018](docs/adr/018-notifications-push.md): Push notifications +- [ADR-020](docs/adr/020-librairies-flutter.md): Flutter libraries +- [ADR-023](docs/adr/023-architecture-moderation.md): Moderation architecture +- [ADR-024](docs/adr/024-monitoring-observabilite.md): Monitoring & observability + **When making architectural decisions**, check if there's an existing ADR or create a new one following the established pattern. ## Recommendation Algorithm diff --git a/INCONSISTENCIES.md b/INCONSISTENCIES.md deleted file mode 100644 index e5f8076..0000000 --- a/INCONSISTENCIES.md +++ /dev/null @@ -1,286 +0,0 @@ -# Incohérences et Manques - RoadWave - -> **Statut** : Document de travail -> **Dernière mise à jour** : 2026-02-01 -> **Score de santé documentaire** : 75% (après corrections récentes) - -Ce document liste les incohérences et manques critiques identifiés dans la documentation technique (ADR + Règles Métier) du projet RoadWave. - ---- - -## ✅ Incohérences récemment corrigées - -- **✅ Références ADR dans CLAUDE.md** : Décalage -2 corrigé (commit `c3abdd7`) -- **✅ Geofencing MVP vs Phase 2** : ADR-020 clarifié avec séparation Phase 1/Phase 2 (commit `69a7bd8`) -- **✅ Formule algorithme recommandation** : Section détaillée ajoutée dans Règle 04 avec exemple concret (commit `cf26d8a`) -- **✅ Référence cassée ADR-002** : Section 5.2 → Section 5.1 corrigée (commit `18c8901`) - ---- - -## ✅ Incohérences acceptées pour MVP - -### Souveraineté données : Firebase vs Self-hosted - -**Conflit initial** : -- [ADR-008](docs/adr/008-authentification.md) : "100% self-hosted, souveraineté France" -- [ADR-015](docs/adr/015-hebergement.md) : "OVH France, aucune dépendance US" -- **MAIS** [ADR-017](docs/adr/017-notifications-geolocalisees.md) : Firebase Cloud Messaging = **Google Cloud** - -**Décision** : ✅ **Accepté pour MVP** (2026-02-01) -- Cible MVP : terminaux Android équipés (environnement contrôlé) -- Firebase FCM gratuit et fiable pour phase initiale -- Incohérence documentée dans [ADR-017](docs/adr/017-notifications-geolocalisees.md) avec mitigation - -**Mitigation technique** : -- Abstraction layer `NotificationProvider` pour faciliter migration future -- Exit path vers solution custom < 1 sprint si besoin -- DPA Google à valider avant production publique - -**Phase 2** : Réévaluation lors du scaling (≥20K users) pour solution self-hosted (Novu). - ---- - -## 🎉 Incohérences critiques P0 : TOUTES RÉSOLUES ! - -## ⚠️ Manques critiques - -### 1. Architecture de modération non documentée - -**État actuel** : -- [Règle 14-15](docs/regles-metier/14-moderation-flows.md) : décrivent les flux métier -- **AUCUN ADR** ne couvre l'architecture technique - -**Manque** : -- Comment l'IA pré-filtre fonctionne (Whisper + NLP) ? -- Quelle architecture de queue (PostgreSQL, Redis, RabbitMQ) ? -- Stack technique des modérateurs (dashboard) ? -- API endpoints pour signalement ? -- Workflow de traitement (automatique vs manuel) ? - -**Impact** : 3-4 semaines de surprise en développement, pas de consensus technique. - -**Action recommandée** : Créer **ADR-023 : Architecture de Modération** -```markdown -Contenu suggéré : -- Architecture queue signalements (PostgreSQL LISTEN/NOTIFY) -- Intégration Whisper API (transcription audio) -- ML pré-filtrage (OpenAI Moderation API ou modèle local) -- Dashboard modérateurs (interface web) -- Workflow et SLA (24h critique, 72h standard) -- Métriques et observabilité -``` - ---- - -### 2. Monitoring et Ops absents - -**État actuel** : -- [ADR-015](docs/adr/015-hebergement.md) : mentionne OVH VPS -- **AUCUN ADR** sur monitoring, alerting, incident response - -**Manque** : -- Stack de monitoring (Grafana + Prometheus ?) -- Alerting (PagerDuty, Slack, email ?) -- Incident runbooks (crash, data loss, breach) -- Backup/Disaster Recovery strategy -- SLO/SLA définition (99.9% availability = combien downtime ?) -- Performance metrics (p99 latency, throughput) - -**Impact** : Équipe ops sera perdue le jour du lancement production. - -**Action recommandée** : Créer **ADR-024 : Monitoring, Observabilité et Incident Response** -```markdown -Contenu suggéré : -- Stack monitoring (Prometheus + Grafana self-hosted) -- Alerting rules (latency p99 > 100ms, error rate > 1%) -- Incident response workflow (on-call rotation, escalation) -- Runbook templates (database down, API crash, high load) -- Backup strategy (PostgreSQL WAL-E, 7 jours retention) -- Disaster Recovery (RTO/RPO : 1h / 15min) -``` - ---- - -### 3. Gestion des secrets non documentée - -**État actuel** : -- Aucun ADR ne couvre la gestion des secrets - -**Manque** : -- Où stocker secrets production (Mangopay credentials, DB password, JWT signing key) ? -- Solution : Vault self-hosted ? Kubernetes secrets ? Variables d'environnement ? -- Rotation des secrets (fréquence, automatisation) ? -- Field-level encryption PII (GPS coordinates, emails, phone numbers) ? -- OWASP Top 10 checklist (injection, CSRF, XSS) ? - -**Impact** : Secrets en plaintext dans env vars = faille de sécurité critique. - -**Action recommandée** : Créer **ADR-025 : Sécurité - Secrets et Encryption** -```markdown -Contenu suggéré : -- Secrets management (HashiCorp Vault self-hosted vs managed) -- Field-level encryption (AES-256-GCM pour PII sensibles) -- HTTPS/TLS configuration (Let's Encrypt automatique) -- CORS/CSRF protection (middleware Fiber) -- API rate limiting (token bucket, 100 req/min/user) -- OWASP Top 10 mitigation checklist -``` - ---- - -### 4. Analytics et events tracking flous - -**État actuel** : -- [Règle 02](docs/regles-metier/02-conformite-rgpd.md):13.7 : "Matomo self-hosted" -- Aucun détail sur les events à tracer - -**Manque** : -- Quels events tracer (play, pause, like, skip, duration, GPS updates) ? -- Schéma JSON des events (format standardisé) ? -- Dashboard principales métriques (DAU, WAU, engagement, churn) ? -- Funnel analytics (signup → première écoute → monétisation) ? -- Retention cohort analysis ? - -**Impact** : Analytics sera chaos, équipe produit ne saura pas quoi mesurer. - -**Action recommandée** : Créer **ADR-026 : Analytics et Métriques Produit** -```markdown -Contenu suggéré : -- Events à tracer (JSON Schema pour validation) -- Matomo setup (Docker self-hosted, data retention 90j) -- Dashboard KPI (DAU, WAU, engagement rate, churn by cohort) -- Funnel metrics (signup → content discovery → monetization) -- Privacy-preserving analytics (IP anonymization, no cookies tiers) -``` - ---- - -### 5. Stratégie de scaling Post-MVP absente - -**État actuel** : -- [ADR-015](docs/adr/015-hebergement.md) : "Phase 2 à 20K users = Scaleway managé" -- Aucun détail sur comment scaler - -**Manque** : -- Database sharding strategy (par user_id ? par région géographique ?) ? -- Cache invalidation at scale (comment éviter cache stampede) ? -- Load balancing multi-région (GeoDNS pour latence optimale) ? -- API rate limiting global (par IP, par user, quotas) ? -- CDN multi-région (Cloudflare ? BunnyCDN ?) ? - -**Impact** : Architecture ne tiendra pas à 100K+ users sans refonte complète. - -**Action recommandée** : Créer **ADR-027 : Stratégie de Scaling 20K-500K Users** -```markdown -Contenu suggéré : -- Database partitioning (sharding horizontal par région EU) -- Cache strategy (locality-aware, TTL adaptatif, invalidation patterns) -- Load balancing (Nginx + health checks, failover automatique) -- API rate limiting (Redis + token bucket, quotas différenciés free/premium) -- Multi-région CDN (Bunny CDN pour souveraineté EU) -``` - ---- - -## 📊 Évaluation par domaine - -| Domaine | Score | Verdict | Manques principaux | -|---------|-------|---------|-------------------| -| **Géolocalisation** | 90% | ✅ Excellent | - | -| **Authentification** | 85% | ✅ Bon | Glossaire OAuth2 PKCE | -| **Streaming Audio** | 80% | ✅ Bon | Détails pre-buffering | -| **Mobile & Permissions** | 80% | ✅ Bon | - (corrigé ✅) | -| **Paiements** | 80% | ✅ Bon | Multi-devise taux change | -| **Modération** | 95% | ✅ Excellent | **ADR-023 créé** ✅ | -| **Ops & Monitoring** | 95% | ✅ Excellent | **ADR-024 créé** ✅ | -| **Sécurité** | 95% | ✅ Excellent | **ADR-025 créé** ✅ | -| **Analytics** | 35% | ⚠️ Minimal | **ADR-026 recommandé** | -| **Scaling** | 40% | ⚠️ Minimal | **ADR-027 recommandé** | -| **Testing** | 85% | ✅ Bon | - | - -**Score global** : **95%** (après corrections P0 + P1 complètes, était 82%) - ---- - -## 🎯 Plan d'action prioritaire - -### P0 - Bloquant implémentation (à faire AVANT coding) - -1. **✅ FAIT** : Corriger références ADR dans CLAUDE.md -2. **✅ FAIT** : Clarifier geofencing Phase 1/Phase 2 dans ADR-020 -3. **✅ FAIT** : Accepter incohérence Firebase pour MVP (terminaux Android contrôlés) -4. **✅ FAIT** : Préciser formule algorithme recommandation (Règle 04) - - Section "Calcul détaillé score_interets" ajoutée avec exemple concret - - Domaine jauges : 0-100, score final : 0-1 - - Cas limites documentés -5. **✅ FAIT** : Corriger référence cassée ADR-002 (Section 5.2 → 5.1) - -🎉 **TOUTES LES INCOHÉRENCES P0 SONT RÉSOLUES !** 🎉 - -### P1 - Important design (avant Sprint 3-4) - -6. **✅ FAIT** : Créer **ADR-023 : Architecture de Modération** - - PostgreSQL LISTEN/NOTIFY + Redis cache - - Whisper large-v3 (transcription) + NLP (distilbert, roberta) - - Dashboard React + Wavesurfer.js - - SLA 2h/24h/72h selon priorité -7. **✅ FAIT** : Créer **ADR-024 : Monitoring et Observabilité** - - Prometheus + Grafana + Loki (self-hosted) - - Alerting : Email (Brevo) + Telegram Bot - - Backup PostgreSQL : WAL-E continuous (RTO 1h, RPO 15min) - - Runbooks incidents + dashboards métriques -8. **✅ FAIT** : Créer **ADR-025 : Secrets et Sécurité** - - HashiCorp Vault (self-hosted) pour secrets management - - AES-256-GCM encryption PII (emails, GPS) - - Let's Encrypt TLS 1.3 (wildcard certificate) - - OWASP Top 10 mitigation complète + rate limiting - -### P2 - Nice-to-have (avant Sprint 6-8) - -9. **🟡 TODO** : Créer **ADR-026 : Analytics et Events** - - JSON Schema events, dashboard KPI, funnel metrics -10. **🟡 TODO** : Créer **ADR-027 : Stratégie Scaling** - - Sharding DB, cache invalidation, load balancing multi-région -11. **🟡 TODO** : Ajouter glossaire dans CLAUDE.md - - OAuth2 PKCE vs Providers - - MVP vs Phase 2 vs Post-MVP - - Cache strategies (hot/cold, TTL) - ---- - -## 📈 Objectif cible - -**Score santé documentaire cible** : **95%** avant démarrage Sprint 3 - -**Actions minimales requises** : -- ✅ Corriger 2 incohérences critiques restantes (P0 : items 4-5) -- ✅ Créer 3 ADR manquants (P1 : Modération, Ops, Sécurité) -- 🎯 Atteindre score 95% dans tous les domaines critiques - -**Deadline recommandée** : 2 semaines avant démarrage développement backend/mobile - -**Statut actuel** : -- Incohérences P0 résolues : **5/5 (100%)** ✅ **COMPLET !** -- ADR manquants P1 : **3/3 (100%)** ✅ **COMPLET !** -- Score global : **95%** ✅ **OBJECTIF ATTEINT !** - -**🎉 PHASES P0 + P1 TERMINÉES !** 🎉 - -Documentation **prête pour démarrage Sprint 3** avec : -- ✅ Architecture de modération complète (ADR-023) -- ✅ Monitoring et observabilité (ADR-024) -- ✅ Sécurité et secrets management (ADR-025) - -**Prochaine phase (optionnelle)** : ADR P2 (Analytics, Scaling) - Nice-to-have avant Sprint 6-8. - ---- - -## 🔄 Maintenance de ce document - -Ce document doit être mis à jour à chaque : -- Correction d'incohérence identifiée -- Création d'un nouvel ADR comblant un manque -- Identification d'une nouvelle incohérence - -**Responsable** : Tech Lead / Architecte -**Fréquence de revue** : Hebdomadaire pendant phase documentation, mensuelle ensuite diff --git a/TECHNICAL.md b/TECHNICAL.md index fce7669..c8649e6 100644 --- a/TECHNICAL.md +++ b/TECHNICAL.md @@ -7,25 +7,31 @@ | Composant | Technologie | ADR | |-----------|-------------|-----| | **Backend** | Go + Fiber | [ADR-001](docs/adr/001-langage-backend.md) | -| **Architecture Backend** | Monolithe Modulaire | [ADR-012](docs/adr/012-architecture-backend.md) | +| **Architecture Backend** | Monolithe Modulaire | [ADR-010](docs/adr/010-architecture-backend.md) | | **Authentification** | Zitadel (self-hosted OVH) | [ADR-008](docs/adr/008-authentification.md) | | **Streaming** | HLS | [ADR-002](docs/adr/002-protocole-streaming.md) | | **Codec** | Opus | [ADR-003](docs/adr/003-codec-audio.md) | | **CDN** | NGINX Cache (OVH VPS) | [ADR-004](docs/adr/004-cdn.md) | | **Storage** | OVH Object Storage | [ADR-004](docs/adr/004-cdn.md) | -| **Hébergement MVP** | OVH VPS Essential | [ADR-017](docs/adr/017-hebergement.md) | -| **Organisation** | Monorepo | [ADR-016](docs/adr/016-organisation-monorepo.md) | +| **Hébergement MVP** | OVH VPS Essential | [ADR-015](docs/adr/015-hebergement.md) | +| **Organisation** | Monorepo | [ADR-014](docs/adr/014-organisation-monorepo.md) | | **Base de données** | PostgreSQL + PostGIS | [ADR-005](docs/adr/005-base-de-donnees.md) | -| **ORM/Accès données** | sqlc | [ADR-013](docs/adr/013-orm-acces-donnees.md) | -| **Cache** | Redis Cluster | [ADR-005](docs/adr/005-base-de-donnees.md) | +| **ORM/Accès données** | sqlc | [ADR-011](docs/adr/011-orm-acces-donnees.md) | +| **Cache** | Redis Cluster | [ADR-021](docs/adr/021-solution-cache.md) | | **Chiffrement** | TLS 1.3 | [ADR-006](docs/adr/006-chiffrement.md) | | **Live** | WebRTC | [ADR-002](docs/adr/002-protocole-streaming.md) | -| **Frontend Mobile** | Flutter | [ADR-014](docs/adr/014-frontend-mobile.md) | -| **Tests** | Testify + Godog (Gherkin) | [ADR-015](docs/adr/015-strategie-tests.md), [ADR-007](docs/adr/007-tests-bdd.md) | +| **Frontend Mobile** | Flutter | [ADR-012](docs/adr/012-frontend-mobile.md) | +| **Tests** | Testify + Godog (Gherkin) | [ADR-013](docs/adr/013-strategie-tests.md), [ADR-007](docs/adr/007-tests-bdd.md) | | **Paiements** | Mangopay | [ADR-009](docs/adr/009-solution-paiement.md) | -| **Emailing** | Brevo | [ADR-018](docs/adr/018-service-emailing.md) | -| **Commandes volant** | Like automatique | [ADR-010](docs/adr/010-commandes-volant.md) | -| **Conformité stores** | CarPlay, Android Auto, App/Play Store | [ADR-011](docs/adr/011-conformite-stores-carplay-android-auto.md) | +| **Emailing** | Brevo | [ADR-016](docs/adr/016-service-emailing.md) | +| **Géolocalisation IP** | IP2Location (fallback) | [ADR-019](docs/adr/019-geolocalisation-ip.md) | +| **Librairies Mobile** | Flutter packages | [ADR-020](docs/adr/020-librairies-flutter.md) | +| **CI/CD** | GitHub Actions (monorepo) | [ADR-022](docs/adr/022-strategie-cicd-monorepo.md) | +| **Modération** | Architecture modération | [ADR-023](docs/adr/023-architecture-moderation.md) | +| **Monitoring** | Prometheus + Grafana | [ADR-024](docs/adr/024-monitoring-observabilite.md) | +| **Secrets** | Vault + sealed secrets | [ADR-025](docs/adr/025-securite-secrets.md) | +| **Notifications géo** | Push + geofencing | [ADR-017](docs/adr/017-notifications-geolocalisees.md) | +| **Notifications push** | FCM + APNS | [ADR-018](docs/adr/018-notifications-push.md) | --- diff --git a/features/api/content-creation/metadonnees-publication.feature b/features/api/content-creation/metadonnees-publication.feature index 69c4a30..0afd012 100644 --- a/features/api/content-creation/metadonnees-publication.feature +++ b/features/api/content-creation/metadonnees-publication.feature @@ -230,3 +230,21 @@ Fonctionnalité: Métadonnées et publication de contenu Quand j'accède à mes contenus Alors je vois le brouillon avec statut "📝 Brouillon" Et je peux reprendre la publication + + Scénario: Impossible de publier pendant encodage en cours + Étant donné que mon fichier est en cours d'encodage + Quand j'essaie de remplir les métadonnées + Alors je vois le message "Encodage en cours, veuillez patienter" + Et l'interface de publication est désactivée + + Scénario: Limite de 10 brouillons maximum + Étant donné que j'ai déjà 10 brouillons sauvegardés + Quand j'essaie de créer un 11ème brouillon + Alors le brouillon est refusé + Et je vois le message "Maximum 10 brouillons. Publiez ou supprimez un brouillon existant." + + Scénario: Suppression automatique brouillons après 30 jours + Étant donné que j'ai un brouillon de plus de 30 jours + Quand le système effectue le nettoyage automatique + Alors le brouillon est supprimé automatiquement + Et je reçois une notification "Brouillon '[Titre]' supprimé (>30 jours)" diff --git a/features/api/content-creation/modification-suppression.feature b/features/api/content-creation/modification-suppression.feature index 0b111eb..197ad2b 100644 --- a/features/api/content-creation/modification-suppression.feature +++ b/features/api/content-creation/modification-suppression.feature @@ -142,10 +142,10 @@ Fonctionnalité: Modification et suppression de contenu Alors la récupération est impossible Et le contenu est définitivement perdu - Scénario: Suppression BDD + CDN sous 5 minutes + Scénario: Suppression BDD + Cache sous 5 minutes Quand je supprime un contenu Alors l'entrée en base de données est marquée "deleted" - Et les fichiers CDN sont marqués pour suppression + Et les fichiers sont marqués pour suppression Et la suppression effective a lieu sous 5 minutes Scénario: Historique auditeurs conservé anonymisé @@ -166,10 +166,11 @@ Fonctionnalité: Modification et suppression de contenu | Auteur | ❌ (anonymisé) | Et c'est conforme RGPD - Scénario: Fichiers CDN supprimés sous 24h + Scénario: Fichiers Cache + Storage supprimés sous 24h Étant donné que mon contenu est supprimé Quand 24 heures s'écoulent Alors tous les fichiers audio sont purgés du NGINX Cache + Et tous les fichiers sont supprimés de OVH Object Storage Et l'espace de stockage est libéré Scénario: Pas de notification aux auditeurs @@ -219,3 +220,16 @@ Fonctionnalité: Modification et suppression de contenu | 20/01/2026 | Tags modifiés | | 19/01/2026 | Description ajoutée | Et je peux tracer toutes les modifications + + Scénario: Suppression d'un contenu en cours d'encodage + Étant donné que mon contenu est en cours d'encodage (50%) + Quand je supprime le contenu + Alors l'encodage est annulé immédiatement + Et le fichier temporaire est supprimé + Et je vois le message "Contenu et encodage supprimés" + + Scénario: Impossible de modifier un contenu en cours de validation + Étant donné que mon contenu est en file de validation + Quand j'essaie de modifier le titre + Alors la modification est refusée + Et je vois le message "Impossible de modifier pendant la validation" diff --git a/features/api/content-creation/upload-encodage.feature b/features/api/content-creation/upload-encodage.feature index d5e33ac..8c57177 100644 --- a/features/api/content-creation/upload-encodage.feature +++ b/features/api/content-creation/upload-encodage.feature @@ -191,3 +191,41 @@ Fonctionnalité: Upload et encodage de contenu audio 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" diff --git a/features/api/content-creation/validation-premiers-contenus.feature b/features/api/content-creation/validation-premiers-contenus.feature index 6f4fdc8..a913e29 100644 --- a/features/api/content-creation/validation-premiers-contenus.feature +++ b/features/api/content-creation/validation-premiers-contenus.feature @@ -209,3 +209,9 @@ Fonctionnalité: Validation des 3 premiers contenus | Vérification metadata| 15s | | Décision | 5s | | Total | 110s | + + Scénario: Verrouillage contenu pendant traitement modérateur + Étant donné que le modérateur A ouvre un contenu pour validation + Quand le modérateur B essaie d'ouvrir le même contenu + Alors le modérateur B voit le message "Contenu en cours de traitement par [Modérateur A]" + Et le contenu est verrouillé pour éviter doublon