- Lot G: Recherche avancée (musical_key, tri pertinence, autocomplete, facettes, historique) - Lot H: Analytics créateur (stats, charts, completion rate, export CSV/JSON) - Lot F: Seller dashboard (GET /sell/stats, liste produits) - Lot C: Player (crossfade, gapless preload, PiP) - Lot D2: Autoplay (GET /tracks/recommendations, section À écouter ensuite) Backend: GetRecommendations handler, route /tracks/recommendations Frontend: PlayerQueue recommendations, fix TS errors (GlobalPlayer, AnalyticsViewKpiGrid, etc.) Docs: FEATURE_STATUS, PROJECT_STATE, CHANGELOG, SCOPE_CONTROL
201 lines
8.9 KiB
Markdown
201 lines
8.9 KiB
Markdown
# Scope v0.202 — Phase 2 Contenu (suite)
|
||
|
||
**Version cible** : v0.202 (X=2, Y=2)
|
||
**Prérequis** : v0.201 taguée et mergée dans main
|
||
**Objectif** : Phase 2 Contenu — Recherche avancée, Analytics créateur, Seller dashboard, Player, Queue
|
||
**Dernière mise à jour** : 20 février 2026
|
||
**Effort estimé** : 5-7 semaines de développement
|
||
|
||
---
|
||
|
||
## 1. Principe directeur
|
||
|
||
> **v0.202 = suite Phase 2 (Contenu) après v0.201.**
|
||
>
|
||
> Cinq axes principaux :
|
||
> 1. **Recherche avancée (Lot G)** : Filtres, tri, autocomplete, facettes, historique
|
||
> 2. **Analytics créateur (Lot H)** : Stats, graphiques, export
|
||
> 3. **Seller dashboard (Lot F)** : Stats ventes, liste produits
|
||
> 4. **Player avancé (Lot C)** : Crossfade, gapless, PiP
|
||
> 5. **Queue avancée (Lot D)** : Autoplay, queue collaborative
|
||
|
||
---
|
||
|
||
## 2. Contexte — État post v0.201
|
||
|
||
### 2.1 Livré en v0.201
|
||
|
||
| Lot | Feature | Statut |
|
||
|-----|---------|--------|
|
||
| E1 | BPM | ✅ |
|
||
| E2 | Musical key | ✅ |
|
||
| E3 | Lyrics | ✅ |
|
||
| E4 | Tags suggérés | ✅ |
|
||
|
||
### 2.2 Fondation existante (à enrichir)
|
||
|
||
| Domaine | Existant | À ajouter v0.202 |
|
||
|---------|----------|-------------------|
|
||
| **Recherche tracks** | `TrackSearchService`, GET /tracks/search, filtres BPM/durée/genre/format/date, tri (popularity, title, created_at) | musical_key, autocomplete, unification search unifiée, historique |
|
||
| **Search unifiée** | GET /search (q, type=track|user|playlist), SearchService | Filtres, tri, pagination |
|
||
| **Analytics** | Routes /api/v1/analytics/*, playback_analytics | Route créateur, graphiques, export |
|
||
| **Player** | MediaSession, usePlayer | Crossfade, gapless, PiP |
|
||
| **Queue** | Queue sync, PlayerQueue | Autoplay, queue collaborative |
|
||
|
||
---
|
||
|
||
## 3. Features IN SCOPE v0.202
|
||
|
||
### 3.1 Lot G — Recherche avancée (priorité haute)
|
||
|
||
**Objectif** : Enrichir la recherche existante.
|
||
**Effort** : L (5-7 jours)
|
||
**Référence** : Module 11 (veza_full_features_list)
|
||
|
||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||
|---|---------|-----------------|---------|----------|-------------------|
|
||
| G1 | **Filtres recherche** | musical_key manquant ; tags déjà dans TrackSearchParams | Ajouter `musical_key` à TrackSearchParams + handler | Vérifier UI SearchPage/TrackSearch utilise tous les filtres | Filtres appliqués, résultats mis à jour |
|
||
| G2 | **Tri avancé** | Tri pertinence, date, popularité, alphabétique | Déjà : sort_by, sort_order. Ajouter "relevance" si full-text | Dropdown tri dans SearchPage | Tri fonctionnel |
|
||
| G3 | **Autocomplete** | Suggestions pendant la frappe | Route GET /search/suggestions?q=… (tracks, users, playlists) ou extension GET /search avec limit=5 | Input avec dropdown debounced | Suggestions affichées, clic → recherche |
|
||
| G4 | **Recherche par type** | Tracks, artistes, playlists, utilisateurs | SearchService : param `type` existant. Vérifier cohérence | Onglets/facettes dans SearchPage | Résultats par catégorie |
|
||
| G5 | **Historique recherche** | Mémoriser les dernières recherches | Optionnel : table search_history. Sinon localStorage | Section "Récent" | Dernières recherches cliquables |
|
||
|
||
**Fichiers clés** :
|
||
- Backend : `track_search_service.go`, `search_service.go`, `search_handlers.go`, `routes_search.go`, `routes_tracks.go`
|
||
- Frontend : `TrackSearch.tsx`, `TrackSearchFilters`, `trackSearchService.ts`, `SearchPage`
|
||
|
||
---
|
||
|
||
### 3.2 Lot H — Analytics créateur (priorité haute)
|
||
|
||
**Objectif** : Dashboard analytics pour créateurs.
|
||
**Effort** : L (5-7 jours)
|
||
**Référence** : Module 12.1
|
||
|
||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||
|---|---------|-----------------|---------|----------|-------------------|
|
||
| H1 | **Stats d'écoute** | Plays par track, période, durée moyenne | Agrégation playback_analytics, route GET /analytics/creator/stats | Page /analytics ou section créateur | Chiffres affichés |
|
||
| H2 | **Graphiques** | Évolution plays, top tracks | Route GET /analytics/creator/charts | Charts (recharts ou équivalent) | Graphiques lisibles |
|
||
| H3 | **Taux de complétion** | % d'écoute complète par track | Calcul backend (plays complètes / total) | Affichage dans dashboard | Métrique visible |
|
||
| H4 | **Export données** | Export CSV/JSON des stats | Route GET /analytics/creator/export?format=csv|json | Bouton export | Fichier téléchargé |
|
||
|
||
**Fichiers clés** :
|
||
- Backend : `playback_analytics_handler.go`, `routes`, modèles analytics
|
||
- Frontend : Page Analytics, composants charts, export
|
||
|
||
---
|
||
|
||
### 3.3 Lot F — Seller dashboard (priorité moyenne)
|
||
|
||
**Objectif** : Dashboard vendeur fonctionnel.
|
||
**Effort** : M (3-4 jours)
|
||
**Référence** : Module 7.4
|
||
|
||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||
|---|---------|-----------------|---------|----------|-------------------|
|
||
| F1 | **Stats ventes** | Nombre ventes, revenus, période | Route GET /sell/stats ou agrégation Hyperswitch/marketplace | Page /sell | Chiffres affichés |
|
||
| F2 | **Liste produits** | Tracks/albums en vente par l'utilisateur | Extension catalogue existant | Liste dans seller dashboard | Produits listés |
|
||
|
||
---
|
||
|
||
### 3.4 Lot C — Player avancé (priorité moyenne)
|
||
|
||
**Objectif** : Améliorer l'expérience d'écoute.
|
||
**Effort** : M (2-4 jours)
|
||
**Référence** : Module 4.1
|
||
|
||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||
|---|---------|-----------------|---------|----------|-------------------|
|
||
| C1 | **Crossfade** | Transition en fondu entre tracks | N/A | Logique player (gain, overlap) | Transition fluide 1-10s configurable |
|
||
| C2 | **Gapless playback** | Lecture sans silence entre tracks | N/A | Préchargement audio, Web Audio API ou HTMLMediaElement | Pas de coupure |
|
||
| C3 | **PiP** | Picture-in-Picture (si supporté) | N/A | Media Session + PiP API (document.pictureInPictureEnabled) | Fenêtre flottante |
|
||
|
||
**Fichiers clés** : `GlobalPlayer.tsx`, `AudioPlayer.tsx`, `usePlayer.ts`, `playerStore.ts`
|
||
|
||
---
|
||
|
||
### 3.5 Lot D — Queue avancée (priorité basse)
|
||
|
||
**Objectif** : Queue collaborative et autoplay.
|
||
**Effort** : M (3-4 jours)
|
||
**Référence** : Module 4.2
|
||
|
||
| # | Feature | Tâche détaillée | Backend | Frontend | Critère de sortie |
|
||
|---|---------|-----------------|---------|----------|-------------------|
|
||
| D1 | **Queue collaborative** | Partager queue en session | Modèle session queue partagée, routes queue | UI partage | Plusieurs users, même queue |
|
||
| D2 | **Autoplay** | Recommandations quand queue vide | Route GET /recommendations ou extension playlists | Section "À écouter ensuite" | Suggestions, ajout 1 clic |
|
||
|
||
---
|
||
|
||
## 4. Récapitulatif par lot
|
||
|
||
| Lot | Nom | Priorité | Effort | Features |
|
||
|-----|-----|----------|--------|----------|
|
||
| **G** | Recherche avancée | Haute | L | 5 |
|
||
| **H** | Analytics créateur | Haute | L | 4 |
|
||
| **F** | Seller dashboard | Moyenne | M | 2 |
|
||
| **C** | Player avancé | Moyenne | M | 3 |
|
||
| **D** | Queue avancée | Basse | M | 2 |
|
||
| | **TOTAL** | | **16-27j** | **16** |
|
||
|
||
---
|
||
|
||
## 5. Features HORS SCOPE v0.202
|
||
|
||
| Feature | Raison | Version cible |
|
||
|---------|--------|---------------|
|
||
| Recherche phonétique, booléenne | Complexité | v0.203+ |
|
||
| Collaborative filtering | Nécessite historique riche | v0.203+ |
|
||
| Social Trending API | Dépend recommandations | v0.203+ |
|
||
| 2FA SMS, Passkeys | v0.104 dédié | v0.104 |
|
||
| Go Live vidéo | v0.703 | v0.703 |
|
||
|
||
---
|
||
|
||
## 6. Ordre de livraison recommandé
|
||
|
||
| Semaine | Lots | Activités |
|
||
|---------|------|-----------|
|
||
| **S1** | G (Recherche) | G1–G5 : filtres musical_key, tri, autocomplete, facettes, historique |
|
||
| **S2** | H (Analytics) | H1–H4 : stats, graphiques, taux complétion, export |
|
||
| **S3** | F (Seller) | F1–F2 : stats ventes, liste produits |
|
||
| **S4** | C (Player) | C1–C3 : crossfade, gapless, PiP |
|
||
| **S5** | D (Queue) | D1–D2 : autoplay, queue collaborative |
|
||
| **S6** | Stabilisation | Tests, docs, polish |
|
||
|
||
---
|
||
|
||
## 7. Branche et workflow
|
||
|
||
- **Branche** : `release/v0.202`
|
||
- **Format commit** : `feat(scope): description` (ex: `feat(search): add musical_key filter`)
|
||
- **Référence scope** : [SCOPE_CONTROL.md](SCOPE_CONTROL.md) → v0.202
|
||
- **PR** : `gh pr create --base main --head release/v0.202 --title "Release v0.202"`
|
||
|
||
---
|
||
|
||
## 8. Critères de stabilité v0.202
|
||
|
||
### 8.1 Build & compilation
|
||
- [ ] `go build ./...` — 0 erreur
|
||
- [ ] `npm run build` — 0 erreur
|
||
- [ ] `npx tsc --noEmit` — 0 erreur
|
||
|
||
### 8.2 Tests
|
||
- [ ] `go test ./...` — pas de régression
|
||
- [ ] `npm test -- --run` — pas de régression
|
||
- [ ] E2E : recherche, analytics, seller (si applicable)
|
||
|
||
### 8.3 Documentation
|
||
- [ ] FEATURE_STATUS.md mis à jour
|
||
- [ ] CHANGELOG v0.202
|
||
- [ ] MSW handlers pour nouveaux endpoints
|
||
|
||
---
|
||
|
||
## Références
|
||
|
||
- [V0_201_RELEASE_SCOPE.md](V0_201_RELEASE_SCOPE.md) — Version précédente (Lot E livré)
|
||
- [SCOPE_CONTROL.md](SCOPE_CONTROL.md) — Processus anti-scope-creep
|
||
- [FEATURE_STATUS.md](FEATURE_STATUS.md) — Statut des features
|
||
- [PROJECT_STATE.md](PROJECT_STATE.md) — État actuel du projet
|