docs(live): document Go Live limitation (A6)
This commit is contained in:
parent
9e1458e738
commit
7b86ae7457
5 changed files with 494 additions and 11 deletions
|
|
@ -1,5 +1,6 @@
|
|||
import type { Meta, StoryObj } from '@storybook/react';
|
||||
import { QueueView } from './QueueView';
|
||||
import { Skeleton } from '@/components/ui/skeleton';
|
||||
import { usePlayerStore } from '@/features/player/store/playerStore';
|
||||
|
||||
const mockTracks = [
|
||||
|
|
@ -55,6 +56,37 @@ export const Default: Story = {
|
|||
],
|
||||
};
|
||||
|
||||
/**
|
||||
* État de chargement simulé (skeleton).
|
||||
* v0.102: QueueView lit le store synchrone ; le chargement réel se fait via useQueueSync au layout.
|
||||
*/
|
||||
export const Loading: Story = {
|
||||
name: 'Loading',
|
||||
decorators: [
|
||||
(Story) => {
|
||||
usePlayerStore.setState({ queue: [], currentIndex: -1, currentTrack: null });
|
||||
return (
|
||||
<div className="bg-background min-h-screen p-4 max-w-4xl mx-auto space-y-6">
|
||||
<div className="flex flex-col md:flex-row justify-between items-end border-b border-border/50 pb-6 gap-4">
|
||||
<div>
|
||||
<Skeleton className="h-8 w-48 mb-2" />
|
||||
<Skeleton className="h-4 w-32" />
|
||||
</div>
|
||||
</div>
|
||||
<div>
|
||||
<Skeleton className="h-4 w-24 mb-3" />
|
||||
<div className="space-y-2">
|
||||
<Skeleton className="h-20 w-full rounded-lg" />
|
||||
<Skeleton className="h-20 w-full rounded-lg" />
|
||||
<Skeleton className="h-20 w-full rounded-lg" />
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
);
|
||||
},
|
||||
],
|
||||
};
|
||||
|
||||
/**
|
||||
* État vide.
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -1,7 +1,8 @@
|
|||
/**
|
||||
* LiveView — Browse and watch live streams
|
||||
* v0.102: Uses real API (liveService.listStreams/getStream). No mock fallback.
|
||||
* Limitation: "Go Live" (start streaming) is not implemented — remains coming soon.
|
||||
* Limitation A6: "Go Live" (start streaming) is not implemented — remains coming soon.
|
||||
* See apps/web/docs/FEATURE_STATUS.md: Go Live (streaming vidéo) prévu v0.703.
|
||||
*/
|
||||
import toast from '@/utils/toast';
|
||||
import { useLiveView } from './useLiveView';
|
||||
|
|
|
|||
|
|
@ -1,6 +1,10 @@
|
|||
import { Card } from '@/components/ui/card';
|
||||
import { Hash } from 'lucide-react';
|
||||
|
||||
/**
|
||||
* v0.102 E3: Tags statiques — pas d'API GET /social/trending.
|
||||
* Report v0.103 pour trending basé sur données réelles.
|
||||
*/
|
||||
const TRENDING_TAGS = ['#Techno', '#Synthwave', '#NewGear', '#Tutorial'];
|
||||
|
||||
export function SocialViewTrending() {
|
||||
|
|
|
|||
|
|
@ -42,8 +42,15 @@ Ce document décrit le statut réel des fonctionnalités par rapport au code.
|
|||
|---------|------|---------|
|
||||
| HLS Streaming | `HLS_STREAMING: true` (v0.101) | Opérationnel — Backend /tracks/:id/hls/info, /status ; Stream Server /hls/:track_id/master.m3u8 |
|
||||
| Role Management | `ROLE_MANAGEMENT` | Opérationnel si activé |
|
||||
| Playlist Share | `PLAYLIST_SHARE: false` | Partiel |
|
||||
| Playlist Recommendations | `PLAYLIST_RECOMMENDATIONS: false` | Partiel |
|
||||
| Playlist Share | `PLAYLIST_SHARE: true` (v0.102) | Opérationnel |
|
||||
| Playlist Recommendations | `PLAYLIST_RECOMMENDATIONS: true` (v0.102) | Opérationnel |
|
||||
|
||||
## Limitations connues (report versions futures)
|
||||
|
||||
| Feature | Limitation | Version cible |
|
||||
|---------|------------|--------------|
|
||||
| **Go Live** (streaming vidéo) | Non implémenté — toast « coming soon » conservé | v0.703 |
|
||||
| **Social Trending** (tags tendance) | SocialViewTrending utilise tags statiques ; pas d'API `/social/trending` | v0.103 |
|
||||
|
||||
## Projets abandonnés
|
||||
|
||||
|
|
|
|||
|
|
@ -1,18 +1,457 @@
|
|||
# Scope v0.102 — Version cible
|
||||
# Scope v0.102 — Cahier des charges complet
|
||||
|
||||
**Version cible** : v0.102
|
||||
**Prérequis** : v0.101 taguée et stable.
|
||||
**Dernière mise à jour** : février 2026
|
||||
**Version cible** : v0.102 (X=1, Y=2)
|
||||
**Prérequis** : v0.101 taguée et stable
|
||||
**Objectif** : Activer les routes « Coming Soon », renforcer le noyau produit, combler les lacunes critiques des modules existants
|
||||
**Dernière mise à jour** : 19 février 2026
|
||||
**Effort estimé** : 4-6 semaines de développement
|
||||
|
||||
---
|
||||
|
||||
## Features autorisées (à définir)
|
||||
## 1. Principe directeur
|
||||
|
||||
(À compléter via issues validées.)
|
||||
> **v0.102 = déblocage des placeholders + renforcement du cœur produit.**
|
||||
>
|
||||
> Trois axes :
|
||||
> 1. **Débloquer** les 4 routes « Coming Soon » (Gear, Live, Queue, Developer)
|
||||
> 2. **Renforcer** les features existantes les plus utilisées (Player, Playlists, Profils, Auth)
|
||||
> 3. **Combler** les lacunes qui nuisent à la cohérence produit (feature flags inactifs, UX incomplète)
|
||||
>
|
||||
> **Règles** :
|
||||
> - Aucune nouvelle route/page majeure (pas de `/education`, `/studio`, `/nft`)
|
||||
> - Aucune nouvelle dépendance lourde (sauf correctif sécurité)
|
||||
> - Chaque feature doit correspondre à un item de `docs/archive/root-md/veza_full_features_list.md`
|
||||
> - Chaque feature livrée doit avoir : tests, story Storybook, documentation
|
||||
|
||||
---
|
||||
|
||||
## 2. Contexte — État v0.101
|
||||
|
||||
### 2.1 Features opérationnelles (19 groupes)
|
||||
|
||||
| # | Feature | Frontend | Backend | Couverture features list |
|
||||
|---|---------|----------|---------|--------------------------|
|
||||
| 1 | Auth (register, login, JWT, refresh) | OK | OK | 53% du Module 1 |
|
||||
| 2 | 2FA (TOTP) | OK | OK | Feature 19, 21 |
|
||||
| 3 | OAuth (Google, GitHub, Discord) | OK | OK | Features 4-6 |
|
||||
| 4 | Profils utilisateur | OK | OK | 51% du Module 2 |
|
||||
| 5 | Upload de tracks | OK | OK | 63% du Module 3 |
|
||||
| 6 | CRUD Tracks | OK | OK | Complet |
|
||||
| 7 | Playlists (CRUD, collaboration) | OK | OK | 71% du Module 4.3 |
|
||||
| 8 | Chat WebSocket | OK | OK | 51% du Module 5 |
|
||||
| 9 | Dashboard | OK | OK | Partiel |
|
||||
| 10 | Recherche | OK | OK | 33% du Module 11 |
|
||||
| 11 | Social (feed, posts, groups) | OK | OK | 35% du Module 6 |
|
||||
| 12 | Administration | OK | OK | 24% du Module 13 |
|
||||
| 13 | Marketplace | OK | OK | 28% du Module 7 |
|
||||
| 14 | Webhooks | OK | OK | Feature 595 |
|
||||
| 15 | Inventory / Gear | OK | OK | 32% du Module 9 |
|
||||
| 16 | Live Streaming (métadonnées) | OK | OK | Mock uniquement |
|
||||
| 17 | Analytics | OK | OK | 40% du Module 12 |
|
||||
| 18 | Roles | OK | OK | Features 46-53 partiels |
|
||||
| 19 | Notifications | OK | OK | 45% du Module 19 |
|
||||
|
||||
### 2.2 Routes ex-Coming Soon — v0.102 débloquées
|
||||
|
||||
| Route | Backend | Frontend | Statut v0.102 |
|
||||
|-------|---------|----------|---------------|
|
||||
| `/queue` | CRUD /api/v1/queue + useQueueSync | QueueView + @dnd-kit | **Opérationnel** |
|
||||
| `/developer` | CRUD /api/v1/developer/api-keys | DeveloperDashboardView + CreateAPIKeyModal | **Opérationnel** |
|
||||
| `/gear` | CRUD `/api/v1/inventory/gear` | GearView + gearService | **Opérationnel** |
|
||||
| `/live` | GET `/api/v1/live/streams` | LiveView + liveService (Go Live: v0.703) | **Opérationnel** |
|
||||
|
||||
### 2.3 Feature flags actuels
|
||||
|
||||
| Flag | Valeur v0.101 | Action v0.102 |
|
||||
|------|---------------|---------------|
|
||||
| `TWO_FACTOR_AUTH` | `true` | Inchangé |
|
||||
| `PLAYLIST_COLLABORATION` | `true` | Inchangé |
|
||||
| `PLAYLIST_SEARCH` | `true` | Inchangé |
|
||||
| `PLAYLIST_SHARE` | `true` (v0.102) | Activé (Lot D) |
|
||||
| `PLAYLIST_RECOMMENDATIONS` | `true` (v0.102) | Activé (Lot D) |
|
||||
| `HLS_STREAMING` | `true` | Inchangé |
|
||||
| `ROLE_MANAGEMENT` | actif | Inchangé |
|
||||
| `NOTIFICATIONS` | actif | Inchangé |
|
||||
|
||||
### 2.4 Couverture globale
|
||||
|
||||
- **Features implémentées** : ~204 / 600 (34%)
|
||||
- **Cible v0.102** : ~230 / 600 (38%)
|
||||
- **Delta** : +26 features individuelles
|
||||
|
||||
---
|
||||
|
||||
## 3. Roadmap macro — Chemin vers la v1.0
|
||||
|
||||
### 3.1 Schéma de versioning
|
||||
|
||||
Format `0.X0Y` : X = phase majeure (1-9), Y = itération (1-3).
|
||||
27 versions de 0.101 à 0.903, puis **v1.0**.
|
||||
|
||||
```
|
||||
Phase 1 (Fondation) : 0.101 -> 0.102 -> 0.103
|
||||
Phase 2 (Contenu) : 0.201 -> 0.202 -> 0.203
|
||||
Phase 3 (Social) : 0.301 -> 0.302 -> 0.303
|
||||
Phase 4 (Commerce) : 0.401 -> 0.402 -> 0.403
|
||||
Phase 5 (Education/Gear) : 0.501 -> 0.502 -> 0.503
|
||||
Phase 6 (Admin/Securite) : 0.601 -> 0.602 -> 0.603
|
||||
Phase 7 (Avance) : 0.701 -> 0.702 -> 0.703
|
||||
Phase 8 (Platform) : 0.801 -> 0.802 -> 0.803
|
||||
Phase 9 (Polish/Launch) : 0.901 -> 0.902 -> 0.903
|
||||
-> v1.0
|
||||
```
|
||||
|
||||
### 3.2 Vision par phase
|
||||
|
||||
| Phase | Versions | Focus | Modules principaux | Features cumulées |
|
||||
|-------|----------|-------|-------------------|-------------------|
|
||||
| **1 — Fondation** | 0.101-0.103 | Stabiliser, débloquer, compléter le noyau | M1, M2, M3, M4, M14 | ~270 / 600 |
|
||||
| **2 — Contenu** | 0.201-0.203 | Recherche avancée, métadonnées, formats | M3, M11, M12 | ~330 / 600 |
|
||||
| **3 — Social** | 0.301-0.303 | Social complet, chat avancé, présence | M5, M6, M19 | ~390 / 600 |
|
||||
| **4 — Commerce** | 0.401-0.403 | Marketplace complet, paiements, vendeur | M7 | ~440 / 600 |
|
||||
| **5 — Education/Gear** | 0.501-0.503 | Formation, gear avancé, cloud | M8, M9, M10 | ~490 / 600 |
|
||||
| **6 — Admin/Sécu** | 0.601-0.603 | Admin complet, sécurité avancée, UX | M13, M14, M20 | ~530 / 600 |
|
||||
| **7 — Avancé** | 0.701-0.703 | IA, livestreaming, collaboration | M15 | ~565 / 600 |
|
||||
| **8 — Platform** | 0.801-0.803 | API publique, intégrations, apps natives | M16, M17, M21 | ~590 / 600 |
|
||||
| **9 — Polish** | 0.901-0.903 | Gamification, Web3, polish final | M18, M15.4 | 600 / 600 |
|
||||
|
||||
### 3.3 Positionnement v0.102
|
||||
|
||||
**v0.102** est la 2e des 27 versions. Elle cible :
|
||||
- Déblocage des 4 routes « Coming Soon »
|
||||
- +26 features individuelles (de ~204 à ~230)
|
||||
- Passage de 34% à 38% de couverture globale
|
||||
- Renforcement critique du coeur produit avant d'attaquer les modules secondaires en Phase 2
|
||||
|
||||
---
|
||||
|
||||
## 4. Features IN SCOPE v0.102
|
||||
|
||||
### 4.1 Lot A — Activation complète Gear & Live (priorité haute)
|
||||
|
||||
**Objectif** : Supprimer les toasts « coming soon » sur les actions principales et valider les flows end-to-end.
|
||||
**Effort** : S (1-2 jours)
|
||||
**Référence** : Module 9 (features 306-320), Module 15.2 (features 471-480)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|----------------|---------|----------|-------------------|
|
||||
| A1 | **Gear — Add** | Connecter le bouton « Add Gear » à un formulaire/modal utilisant `gearService.create()` | Existant | Modal à connecter | Création enregistrée en base |
|
||||
| A2 | **Gear — Edit** | S'assurer que GearDetailModal permet édition via `gearService.update()` | Existant | A valider | Edition fonctionnelle |
|
||||
| A3 | **Gear — Delete** | Confirmation + suppression via `gearService.delete()` | Existant | A valider | Suppression fonctionnelle |
|
||||
| A4 | **Gear — Catégories** | Ajouter filtre par catégorie (synthé, interface, micro, etc.) dans GearView | Existant (champ `category`) | Filtre à ajouter | Filtrage par catégorie visible |
|
||||
| A5 | **Live — Browse** | Remplacer le fallback mock par la liste réelle `liveService.listStreams()` | Existant | A brancher | Affichage des streams depuis l'API |
|
||||
| A6 | **Live — Go Live** | Conserver le toast « coming soon » ; documenter la limitation dans le composant | N/A | Toast existant | Documentation + pas de régression |
|
||||
|
||||
**Features list v1.0 couvertes** : 306 (ajouter), 307 (éditer), 308 (supprimer), 309 (catégories), 320 (recherche inventaire)
|
||||
|
||||
---
|
||||
|
||||
### 4.2 Lot B — Queue persistante (priorité haute)
|
||||
|
||||
**Objectif** : Exposer l'API queue côté backend, synchroniser QueueView avec la base, et ajouter les contrôles manquants.
|
||||
**Effort** : M (3-5 jours)
|
||||
**Référence** : Module 4.2 (features 126-135)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|----------------|---------|----------|-------------------|
|
||||
| B1 | **Queue API — CRUD** | Routes REST : `GET /api/v1/queue`, `PUT /api/v1/queue`, `POST /api/v1/queue/items`, `DELETE /api/v1/queue/items/:id`, `DELETE /api/v1/queue` | A créer (handler + service) | N/A | CRUD conforme au schema DB |
|
||||
| B2 | **Queue — Sync frontend** | Brancher QueueView sur l'API ; mode dégradé client-only si non authentifié | N/A | A brancher | Persistance entre sessions |
|
||||
| B3 | **Queue — Drag & drop reorder** | Réorganiser par drag & drop (utiliser `@dnd-kit` déjà en dépendance) | `PUT /api/v1/queue` (reorder) | Composant existant à enrichir | Réorganisation sauvegardée |
|
||||
| B4 | **Queue — Clear** | Bouton « Vider la queue » avec confirmation | `DELETE /api/v1/queue` | Bouton + dialog | Queue vidée |
|
||||
| B5 | **Queue — Save as playlist** | Conserver le comportement actuel (déjà fonctionnel) | Existant | Existant | Pas de régression |
|
||||
| B6 | **Queue — Resume** | Reprendre la queue là où l'utilisateur s'est arrêté (track + position) | Persister `current_index` + `position_ms` | Restaurer au login | Reprise automatique |
|
||||
|
||||
**Features list v1.0 couvertes** : 126 (queue list), 127 (add), 128 (remove), 129 (reorder), 130 (save as playlist), 131 (clear), 133 (resume)
|
||||
|
||||
---
|
||||
|
||||
### 4.3 Lot C — Developer Portal — API Keys (priorité moyenne)
|
||||
|
||||
**Objectif** : Permettre la création et la gestion de clés API utilisateur, distinctes des clés webhook.
|
||||
**Effort** : M (3-5 jours)
|
||||
**Référence** : Module 21 (features 586-600)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|----------------|---------|----------|-------------------|
|
||||
| C1 | **Modèle `api_keys`** | Table : `id`, `user_id`, `name`, `prefix` (8 chars), `hashed_key`, `scopes` (JSON), `last_used_at`, `expires_at`, `created_at` | Migration SQL à créer | N/A | Table créée, migration réversible |
|
||||
| C2 | **API Keys — CRUD** | Routes : `GET /api/v1/developer/api-keys`, `POST /api/v1/developer/api-keys`, `DELETE /api/v1/developer/api-keys/:id` | Service + Handler à créer | N/A | Génération, liste, révocation |
|
||||
| C3 | **API Keys — Frontend** | Remplacer « Coming soon » par formulaire création + liste des clés + copie sécurisée | N/A | DeveloperDashboardView à modifier | Clé affichée une seule fois lors de la création |
|
||||
| C4 | **Auth par API key** | Middleware `X-API-Key` header ; validation scopes ; rate limiting séparé | Middleware à créer | N/A | Authentification API key fonctionnelle |
|
||||
| C5 | **API Keys — Logs** | Afficher `last_used_at` et compteur d'appels dans la liste frontend | `last_used_at` mis à jour par middleware | Colonne dans la liste | Tracking d'usage visible |
|
||||
| C6 | **API Keys — Scopes** | Interface de sélection des scopes (read, write, admin) lors de la création | Validation scopes | Checkboxes dans le formulaire | Scopes appliqués et vérifiés |
|
||||
|
||||
**Features list v1.0 couvertes** : 588 (auth API keys), 598 (logs API calls), 599 (analytics API usage), 600 (developer dashboard)
|
||||
|
||||
---
|
||||
|
||||
### 4.4 Lot D — Activation feature flags & UX Playlists (priorité moyenne)
|
||||
|
||||
**Objectif** : Activer les feature flags inactifs et compléter les flows playlist.
|
||||
**Effort** : S (2-3 jours)
|
||||
**Référence** : Module 4.3 (features 136-150)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|----------------|---------|----------|-------------------|
|
||||
| D1 | **Playlist Share** | Activer `PLAYLIST_SHARE` ; connecter SharePlaylistModal à `playlistService.createShareLink()` | Route existante `/playlists/:id/share` | Modal existant à connecter | Partage par lien fonctionnel |
|
||||
| D2 | **Playlist Recommendations** | Activer `PLAYLIST_RECOMMENDATIONS` ; connecter la section à `playlistService.getRecommendations()` | Route existante `/playlists/recommendations` | Section UI existante | Recommandations affichées |
|
||||
| D3 | **Playlist Export** | Activer export JSON/CSV ; les routes backend existent déjà | Routes existantes (`/export/json`, `/export/csv`) | Boutons à connecter | Export téléchargeable |
|
||||
| D4 | **Playlist Duplicate** | Activer le bouton « Dupliquer » ; route backend existante | Route existante (`/duplicate`) | Bouton à connecter | Playlist dupliquée |
|
||||
|
||||
**Features list v1.0 couvertes** : 146 (partager), 147 (dupliquer), 149 (exporter)
|
||||
|
||||
---
|
||||
|
||||
### 4.5 Lot E — Renforcement Social (priorité moyenne)
|
||||
|
||||
**Objectif** : Remplacer les toasts « coming soon » par des appels API réels sur les interactions sociales.
|
||||
**Effort** : S (2-3 jours)
|
||||
**Référence** : Module 6 (features 186-225)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|----------------|---------|----------|-------------------|
|
||||
| E1 | **Social — Like post** | Connecter le bouton like à `POST /api/v1/social/like` | Route existante | Bouton à connecter | Like fonctionnel, compteur mis à jour |
|
||||
| E2 | **Social — Comment post** | Connecter le formulaire commentaire à `POST /api/v1/social/comments` | Route existante | Formulaire à connecter | Commentaire ajouté et visible |
|
||||
| E3 | **Social — Trending** | Connecter la section trending de SocialViewTrending à l'API | A évaluer | Section UI existante | **v0.102** : limitation documentée, tags statiques conservés ; report v0.103 (GET /social/trending) |
|
||||
| E4 | **Profile — Follow count** | Afficher les compteurs followers/following sur le profil public | Routes existantes | Compteurs à afficher | Compteurs visibles et à jour |
|
||||
| E5 | **Profile — Badges** | Afficher les badges/rôles sur le profil public (données RBAC existantes) | Données existantes | Composant Badge à ajouter | Badges visibles sur profil |
|
||||
|
||||
**Features list v1.0 couvertes** : 205 (liker post), 206 (commenter post), 214 (trending), 188-189 (followers/following count), 45 (badges)
|
||||
|
||||
---
|
||||
|
||||
### 4.6 Lot F — Renforcement Player & Streaming (priorité basse)
|
||||
|
||||
**Objectif** : Ajouter les contrôles player manquants à faible effort.
|
||||
**Effort** : S (1-2 jours)
|
||||
**Référence** : Module 4.1 (features 106-125)
|
||||
|
||||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||||
|---|---------|----------------|---------|----------|-------------------|
|
||||
| F1 | **Playback speed** | Sélecteur de vitesse (0.5x, 0.75x, 1x, 1.25x, 1.5x, 2x) dans le player | N/A | Composant à ajouter | Vitesse ajustable |
|
||||
| F2 | **Media Session API** | Contrôles OS (titre, artwork, play/pause/next/prev dans la barre système) | N/A | Hook à créer | Contrôles OS fonctionnels |
|
||||
| F3 | **Waveform preview** | Waveform basique dans la barre de progression (données mock ou générées client-side) | N/A | Canvas/SVG dans ProgressBar | Waveform visible |
|
||||
|
||||
**Features list v1.0 couvertes** : 114 (playback speed), 123 (media session API), 117 (waveform)
|
||||
|
||||
---
|
||||
|
||||
## 5. Récapitulatif des features v0.102
|
||||
|
||||
### 5.1 Par lot
|
||||
|
||||
| Lot | Nom | Priorité | Effort | Features | Items v1.0 couverts |
|
||||
|-----|-----|----------|--------|----------|---------------------|
|
||||
| **A** | Gear & Live | Haute | S (1-2j) | 6 | 306-309, 320 |
|
||||
| **B** | Queue persistante | Haute | M (3-5j) | 6 | 126-131, 133 |
|
||||
| **C** | Developer API Keys | Moyenne | M (3-5j) | 6 | 588, 598-600 |
|
||||
| **D** | Feature flags & Playlists | Moyenne | S (2-3j) | 4 | 146-147, 149 |
|
||||
| **E** | Renforcement Social | Moyenne | S (2-3j) | 5 | 45, 188-189, 205-206, 214 |
|
||||
| **F** | Player & Streaming | Basse | S (1-2j) | 3 | 114, 117, 123 |
|
||||
| | **TOTAL** | | **12-20j** | **30** | **26 items v1.0** |
|
||||
|
||||
### 5.2 Par service impacté
|
||||
|
||||
| Service | Lots impactés | Nature des changements |
|
||||
|---------|---------------|----------------------|
|
||||
| **Backend Go** | B, C | Nouveaux handlers, services, migration SQL (queue, api_keys) |
|
||||
| **Frontend React** | A, B, C, D, E, F | Connexion composants existants, nouveaux composants (scopes, waveform) |
|
||||
| **Chat Server** | - | Aucun changement |
|
||||
| **Stream Server** | - | Aucun changement |
|
||||
| **Base de données** | B, C | 2 nouvelles migrations (queue routes, api_keys table) |
|
||||
|
||||
### 5.3 Nouveaux endpoints API
|
||||
|
||||
| Méthode | Route | Lot | Description |
|
||||
|---------|-------|-----|-------------|
|
||||
| `GET` | `/api/v1/queue` | B | Récupérer la queue de l'utilisateur |
|
||||
| `PUT` | `/api/v1/queue` | B | Mettre à jour l'ordre de la queue |
|
||||
| `POST` | `/api/v1/queue/items` | B | Ajouter un item à la queue |
|
||||
| `DELETE` | `/api/v1/queue/items/:id` | B | Retirer un item de la queue |
|
||||
| `DELETE` | `/api/v1/queue` | B | Vider la queue |
|
||||
| `GET` | `/api/v1/developer/api-keys` | C | Lister les clés API |
|
||||
| `POST` | `/api/v1/developer/api-keys` | C | Créer une clé API |
|
||||
| `DELETE` | `/api/v1/developer/api-keys/:id` | C | Révoquer une clé API |
|
||||
|
||||
---
|
||||
|
||||
## 6. Features HORS SCOPE v0.102
|
||||
|
||||
| Feature | Raison | Version cible |
|
||||
|---------|--------|---------------|
|
||||
| Live streaming vidéo (flux réel) | Périmètre trop large ; reste mock/métadonnées | v0.703 |
|
||||
| Seller dashboard complet | Shell vide ; besoin marketplace mature | v0.403 |
|
||||
| Paiement Hyperswitch réel | Intégration complexe ; besoin du seller dashboard | v0.402 |
|
||||
| PWA (service worker, install) | Report ; focus web d'abord | v0.803 |
|
||||
| WebRTC | Non prioritaire ; HLS suffit | v0.703 |
|
||||
| Nouvelles routes majeures | Pas de `/education`, `/studio`, `/nft` | v0.5xx+ |
|
||||
| Nouvelles dépendances | Sauf correctif sécurité | - |
|
||||
| OAuth Spotify | Pas de besoin immédiat | v0.103 |
|
||||
| 2FA SMS | Infrastructure SMS requise | v0.103 |
|
||||
| Passkeys/WebAuthn | Complexité élevée | v0.103 |
|
||||
| Upload depuis cloud (Dropbox, Drive) | Intégration tierce | v0.502 |
|
||||
| Crossfade, gapless playback | Player avancé | v0.103 |
|
||||
| Chat reactions, threads, mentions | Chat avancé | v0.302 |
|
||||
| Gamification (XP, badges, leaderboard) | Module entier | v0.901 |
|
||||
| AI features (mastering, stem separation) | Module entier | v0.701 |
|
||||
|
||||
---
|
||||
|
||||
## 7. Critères de stabilité v0.102
|
||||
|
||||
### 7.1 Build & compilation
|
||||
|
||||
- [ ] `go build ./...` (backend) — 0 erreur
|
||||
- [ ] `cargo build --release` (chat-server, stream-server) — 0 erreur
|
||||
- [ ] `npm run build` (frontend) — 0 erreur
|
||||
- [ ] `npx tsc --noEmit` — 0 erreur
|
||||
|
||||
### 7.2 Tests
|
||||
|
||||
- [ ] `go test ./...` (backend) — 0 échec
|
||||
- [ ] `npm test -- --run` (frontend) — 0 échec
|
||||
- [ ] `npm run test:storybook` — 0 erreur console/réseau
|
||||
- [ ] E2E : auth, smoke, playlists, search, queue — 0 échec
|
||||
- [ ] Nouveaux tests : queue CRUD, API keys CRUD, playlist share flow
|
||||
|
||||
### 7.3 Qualité
|
||||
|
||||
- [ ] `npm run lint` — 0 erreur
|
||||
- [ ] Pas de régression sur les flows v0.101
|
||||
- [ ] Stories mises à jour pour les composants modifiés (Loading, Error, Empty)
|
||||
- [ ] Pas de valeurs Tailwind arbitraires ajoutées (vérifier avec `node scripts/report-arbitrary-values.mjs`)
|
||||
- [ ] Composants > 300 lignes découpés en sous-composants
|
||||
|
||||
### 7.4 Sécurité
|
||||
|
||||
- [ ] API keys hashées en base (jamais stockées en clair)
|
||||
- [ ] Clé API affichée une seule fois à la création
|
||||
- [ ] Rate limiting sur les endpoints API keys
|
||||
- [ ] Scopes vérifiés côté middleware
|
||||
- [ ] Aucun secret commité
|
||||
|
||||
### 7.5 Documentation
|
||||
|
||||
- [x] `FEATURE_STATUS.md` mis à jour avec les nouvelles features
|
||||
- [x] `V0_102_RELEASE_SCOPE.md` reflète l'état final (checklist cochée)
|
||||
- [x] Changelog ou release notes pour v0.102
|
||||
- [x] MSW handlers ajoutés pour les nouveaux endpoints (queue, api-keys)
|
||||
- [x] Stories Storybook pour les composants modifiés (QueueView Loading, etc.)
|
||||
|
||||
---
|
||||
|
||||
## 8. Services requis (inchangés)
|
||||
|
||||
| Service | Obligatoire | Note |
|
||||
|---------|-------------|------|
|
||||
| **Backend API** (Go) | Oui | Coeur — nouveaux handlers queue + api-keys |
|
||||
| **PostgreSQL** | Oui | Coeur — 2 nouvelles migrations |
|
||||
| **Redis** | Oui | Sessions, rate limit, CSRF |
|
||||
| **Frontend** (Vite) | Oui | Coeur — connexions UI |
|
||||
| **Chat Server** (Rust) | Oui | Inchangé |
|
||||
| **Stream Server** (Rust) | Oui | Inchangé |
|
||||
| **RabbitMQ** | Oui | Evenements async |
|
||||
| **ClamAV** | Oui | Scan virus uploads |
|
||||
|
||||
---
|
||||
|
||||
## 9. Dépendances et ordre de livraison
|
||||
|
||||
### 9.1 Graphe de dépendances
|
||||
|
||||
```
|
||||
Lot A (Gear/Live) -----------------------------------------------+
|
||||
|
|
||||
Lot B (Queue) ---- [backend d'abord] ----------------------------+
|
||||
+-- Lot D (Feature flags)
|
||||
Lot C (API Keys) -- [backend d'abord] ---------------------------+ |
|
||||
| +-- Validation finale
|
||||
Lot E (Social) --------------------------------------------------+
|
||||
|
|
||||
Lot F (Player) --------------------------------------------------+
|
||||
```
|
||||
|
||||
### 9.2 Ordre recommandé
|
||||
|
||||
| Semaine | Lots | Activités |
|
||||
|---------|------|-----------|
|
||||
| **S1** | A + B (backend) | Gear UI, Live browse, Queue API (Go handler + service + migration) |
|
||||
| **S2** | B (frontend) + C (backend) | Queue sync frontend, API Keys model + handler + migration |
|
||||
| **S3** | C (frontend) + D | Developer Dashboard UI, activation feature flags playlists |
|
||||
| **S4** | E + F | Social like/comment, profil badges, player speed/waveform/media session |
|
||||
| **S5** | Stabilisation | Tests, stories, documentation, bug fixes, validation E2E |
|
||||
|
||||
### 9.3 Livrables par semaine
|
||||
|
||||
- **S1** : Gear CRUD fonctionnel, Live browse réel, Queue API disponible
|
||||
- **S2** : Queue persistante côté frontend, API Keys backend prêt
|
||||
- **S3** : Developer Dashboard opérationnel, Playlist share/export/duplicate activés
|
||||
- **S4** : Social interactions réelles, Player enrichi
|
||||
- **S5** : v0.102-rc1, tests complets, tag v0.102
|
||||
|
||||
---
|
||||
|
||||
## 10. Définition de « done » pour une feature v0.102
|
||||
|
||||
1. **Happy path** fonctionne sans erreur
|
||||
2. **Etats** Loading, Error, Empty gérés dans le composant
|
||||
3. **Tests** : au moins 1 test (unit ou E2E) pour le flow principal
|
||||
4. **Story** Storybook à jour si composant modifié (états : Default, Loading, Error, Empty)
|
||||
5. **MSW handler** ajouté si nouvel endpoint
|
||||
6. **Documentation** : FEATURE_STATUS.md et scope mis à jour
|
||||
7. **Code review** : PR conforme aux conventions (commit format, scope check)
|
||||
|
||||
---
|
||||
|
||||
## 11. Processus de validation
|
||||
|
||||
### 11.1 Avant chaque PR
|
||||
|
||||
- [ ] Le changement est aligné avec un item du scope v0.102 (ce document)
|
||||
- [ ] Pas de nouvelle route/page non listée ici
|
||||
- [ ] Les tests passent (`go test`, `npm test`, `npm run lint`)
|
||||
- [ ] La story Storybook est à jour
|
||||
- [ ] Le MSW handler existe pour les nouveaux endpoints
|
||||
|
||||
### 11.2 Format de commit
|
||||
|
||||
```
|
||||
feat(queue): add persistent queue API with CRUD operations
|
||||
feat(developer): implement API key generation and management
|
||||
feat(playlists): activate share feature flag and connect modal
|
||||
fix(social): connect like button to actual API endpoint
|
||||
refactor(player): add playback speed selector
|
||||
test(queue): add unit tests for queue service
|
||||
docs(scope): update FEATURE_STATUS.md for v0.102
|
||||
```
|
||||
|
||||
### 11.3 Branche
|
||||
|
||||
- Branche de développement : `release/v0.102`
|
||||
- Feature branches : `feat/v0.102-queue-api`, `feat/v0.102-api-keys`, etc.
|
||||
- Merge vers `release/v0.102` puis vers `main` au tag
|
||||
|
||||
---
|
||||
|
||||
## 12. Préparation v0.103 (aperçu)
|
||||
|
||||
Après le tag v0.102, la version v0.103 (X=1, Y=3) clôturera la Phase 1 (Fondation) avec :
|
||||
|
||||
| Thème | Features candidates | Modules |
|
||||
|-------|-------------------|---------|
|
||||
| Auth avancée | OAuth Spotify (#7), 2FA SMS (#20), Passkeys (#22), historique connexions (#26) | M1 |
|
||||
| Profils complets | Bannière profil (#32), liens sociaux (#44), profil privé (#42) | M2 |
|
||||
| Player avancé | Crossfade (#115), gapless (#116), PiP (#121) | M4.1 |
|
||||
| Queue avancée | Queue collaborative (#134), autoplay/recommandations (#135) | M4.2 |
|
||||
| Métadonnées enrichies | BPM (#95), key (#96), lyrics (#102), tags auto (#105) | M3.3 |
|
||||
| Seller dashboard | Shell fonctionnel avec stats de ventes basiques | M7.4 |
|
||||
|
||||
---
|
||||
|
||||
## Références
|
||||
|
||||
- [V0_101_RELEASE_SCOPE.md](V0_101_RELEASE_SCOPE.md) — Version précédente
|
||||
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus
|
||||
- [V0_101_RELEASE_SCOPE.md](V0_101_RELEASE_SCOPE.md) — Version précédente (stabilisation)
|
||||
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus anti-scope-creep
|
||||
- [FEATURE_STATUS.md](FEATURE_STATUS.md) — Statut des features
|
||||
- [veza_full_features_list.md](archive/root-md/veza_full_features_list.md) — Cible 1.0 (600 features)
|
||||
- [DESIGN_TOKENS.md](../apps/web/docs/DESIGN_TOKENS.md) — Design tokens référence
|
||||
- [STORYBOOK_CONTRACT.md](../apps/web/docs/STORYBOOK_CONTRACT.md) — Contrat Storybook
|
||||
|
|
|
|||
Loading…
Reference in a new issue