# RAPPORT DE DIAGNOSTIC COMPLET - AudiOhm **Date:** 2026-01-19 20:30 **Version:** 2.0 **Statut:** 🔮 BLOQUANT - Plusieurs bugs critiques identifiĂ©s --- ## 📋 RÉSUMÉ EXÉCUTIF AudiOhm souffre de **plusieurs bugs critiques** qui empĂȘchent le bon fonctionnement des fonctionnalitĂ©s principales: - ✅ Dropdown z-index - CORRIGÉ (non confirmĂ©) - ✅ Liked tracks endpoint - CORRIGÉ - ✅ Auto-play queue race condition - CORRIGÉ - 🔮 **AJOUT À LA PLAYLIST** - BUG CRITIQUE - 🔮 **CONVERSION TRACKID** - BUG CRITIQUE --- ## 🐛 BUGS CRITIQUES IDENTIFIÉS ### 1. BUG CRITIQUE: Conversion trackId (youtube_id vs UUID) **Localisation:** `/opt/audiOhm/backend/app/static/js/app.js` **Fonctions affectĂ©es:** - `addTrackToPlaylist()` (ligne 3248) - `toggleLikeTrack()` (ligne 1591) - Probablement d'autres fonctions utilisant trackId **ProblĂšme:** ```javascript // Dans renderTracks() - ligne 2249-2255
``` ```javascript // Dans addTrackToPlaylist() - ligne 3264-3266 body: JSON.stringify({ track_ids: [trackId] // ← ProblĂšme: trackId peut ĂȘtre youtube_id (string) au lieu de UUID }) ``` **DĂ©tail du problĂšme:** - Lors de la recherche YouTube, `track.id` contient l'UUID de la base de donnĂ©es - MAIS pour les pistes YouTube qui ne sont pas encore dans la BDD, `track.id` pourrait ĂȘtre le `youtube_id` - L'API backend `/api/v1/playlists/{id}/tracks` attend un **UUID valide** - Le schĂ©ma `AddTrackRequest` valide: `track_ids: List[UUID]` - Si on envoie un string youtube_id, Pydantic gĂ©nĂšre une erreur 422 **Preuve:** ```bash # Dans les logs du backend: "POST /api/v1/playlists/6244fc0b-dce5-4626-a4ab-5bbb737a82c0/tracks HTTP/1.1" 422 Unprocessable Content ``` ### 2. BUG CRITIQUE: addTrackToPlaylist utilise le mauvais ID **Localisation:** `/opt/audiOhm/backend/app/static/js/app.js` ligne 3265 **ProblĂšme:** La fonction `addTrackToPlaylist(trackId, playlistId, playlistName)` reçoit un `trackId` qui est passĂ© depuis `renderTracks()`. Dans `renderTracks()`, le trackId passĂ© est `track.id` (ligne 2255), qui peut ĂȘtre: 1. Un UUID de base de donnĂ©es (correct) 2. Un youtube_id pour les pistes pas encore en BDD (INCORRECT pour l'API playlist) **Solution requise:** Il faut s'assurer que le trackId passĂ© Ă  l'API est toujours un UUID valide. Pour les pistes YouTube pas encore dans la BDD, il faut: 1. Soit les crĂ©er d'abord dans la BDD via un endpoint 2. Soit modifier l'API pour accepter les youtube_id 3. Soit empĂȘcher l'ajout Ă  la playlist tant que la piste n'est pas dans la BDD ### 3. BUG: playNext/playPrevious non implĂ©mentĂ©s dans app-optimized.js **Localisation:** `/opt/audiOhm/backend/app/static/js/app-optimized.js` lignes 401-409 **ProblĂšme:** ```javascript function playPrevious() { // Implement previous track logic showToast('Non disponible pour le moment', 'error'); // ← PAS IMPLÉMENTÉ! } function playNext() { // Implement next track logic showToast('Non disponible pour le moment', 'error'); // ← PAS IMPLÉMENTÉ! } ``` **Impact:** - Le fichier `app-optimized.js` semble ĂȘtre une version minifiĂ©e/optimisĂ©e - MAIS le fichier HTML utilise `app.js` (ligne 780 de index.html) - Donc ce bug n'est PAS actif actuellement, mais c'est une bombe Ă  retardement **Recommandation:** - Soit supprimer `app-optimized.js` s'il n'est pas utilisĂ© - Soit le mettre Ă  jour avec les bonnes implĂ©mentations de `app.js` --- ## ✅ FONCTIONNALITÉS VÉRIFIÉES ### Backend API - ✅ Serveur uvicorn tourne sur le port 8000 - ✅ Documentation Swagger disponible: http://localhost:8000/api/docs - ✅ Endpoint `/api/v1/library/liked-tracks` fonctionne - ✅ Endpoint `/api/v1/library/liked-tracks/{track_id}` (POST/DELETE) fonctionne - ✅ Endpoint `/api/v1/playlists` fonctionne - ✅ Endpoint `/api/v1/playlists/{id}/tracks` fonctionne mais attend des UUIDs valides ### Frontend JavaScript - ✅ `playNext()` implĂ©mentĂ© dans app.js (ligne 932) - ✅ `playPrevious()` implĂ©mentĂ© dans app.js (ligne 844) - ✅ `toggleLikeTrack()` implĂ©mentĂ© (ligne 1591) - ✅ `loadLikedTracks()` utilise le bon endpoint `/api/v1/library/liked-tracks` (ligne 1435) - ✅ Gestion de la queue implĂ©mentĂ©e - ✅ Auto-play avec `handleTrackEnd()` (ligne 1133) --- ## 🔧 CORRECTIONS À APPORTER ### Correction 1: S'assurer que les trackId sont des UUID valides **Fichier:** `/opt/audiOhm/backend/app/static/js/app.js` **Option A:** Modifier `addTrackToPlaylist` pour crĂ©er la piste d'abord: ```javascript window.addTrackToPlaylist = async function(trackId, playlistId, playlistName) { console.log('[addTrackToPlaylist] Track ID:', trackId, 'Playlist ID:', playlistId); try { const token = localStorage.getItem('token'); // VĂ©rifier si c'est un UUID valide const uuidRegex = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; let actualTrackId = trackId; // Si ce n'est pas un UUID, c'est probablement un youtube_id // Il faut crĂ©er la piste dans la BDD d'abord ou trouver son UUID if (!uuidRegex.test(trackId)) { console.log('[addTrackToPlaylist] Track ID is not a UUID, searching for track...'); // TODO: ImplĂ©menter la recherche ou crĂ©ation de la piste showToast('Cette piste doit ĂȘtre jouĂ©e avant d\'ĂȘtre ajoutĂ©e Ă  une playlist', 'warning'); return; } const response = await fetch(`/api/v1/playlists/${playlistId}/tracks`, { method: 'POST', headers: { 'Content-Type': 'application/json', 'Authorization': `Bearer ${token}` }, body: JSON.stringify({ track_ids: [actualTrackId] }) }); // ... reste du code } catch (error) { console.error('[addTrackToPlaylist] Exception:', error); showToast('Erreur de connexion', 'error'); } }; ``` **Option B:** Modifier le backend pour accepter les youtube_id: ```python # Dans app/api/v1/playlists.py @router.post("/{playlist_id}/tracks", response_model=PlaylistResponse) async def add_tracks( playlist_id: str, track_data: AddTrackRequest, current_user: CurrentUser, db: DBSession, ): # ... code existant qui accepte dĂ©jĂ  les UUIDs ``` ### Correction 2: Mettre Ă  jour ou supprimer app-optimized.js **Fichier:** `/opt/audiOhm/backend/app/static/js/app-optimized.js` Soit: 1. Copier les implĂ©mentations correctes de `app.js` vers `app-optimized.js` 2. Ou supprimer `app-optimized.js` s'il n'est pas utilisĂ© ### Correction 3: AmĂ©liorer la gestion des erreurs Ajouter des messages d'erreur plus clairs pour les utilisateurs quand: - Une piste YouTube doit ĂȘtre jouĂ©e avant d'ĂȘtre ajoutĂ©e Ă  une playlist - Un UUID invalide est dĂ©tectĂ© --- ## 📊 TESTS À EFFECTUER ### Tests Backend ```bash # 1. Test de l'endpoint add track avec UUID valide curl -X POST http://localhost:8000/api/v1/playlists/{playlist_id}/tracks \ -H "Content-Type: application/json" \ -H "Authorization: Bearer {token}" \ -d '{"track_ids": ["4b7e394f-2c28-4c5a-8e1e-06be72b4bd37"]}' # 2. Test de l'endpoint avec youtube_id (doit Ă©chouer actuellement) curl -X POST http://localhost:8000/api/v1/playlists/{playlist_id}/tracks \ -H "Content-Type: application/json" \ -H "Authorization: Bearer {token}" \ -d '{"track_ids": ["dQw4w9WgXcQ"]}' ``` ### Tests Frontend 1. ✅ Se connecter Ă  l'application 2. ✅ Rechercher une piste YouTube 3. ❌ Cliquer sur "Ajouter Ă  la playlist" → **DOIT ÉCHOUER** 4. ✅ Jouer une piste 5. ✅ VĂ©rifier que la piste s'ajoute Ă  la queue 6. ✅ VĂ©rifier que le bouton Next fonctionne 7. ✅ VĂ©rifier que l'auto-play fonctionne Ă  la fin du morceau 8. ✅ VĂ©rifier le chargement des liked tracks --- ## 🎯 PRIORITÉS DE CORRECTION ### 🔮 URGENT - Bloquant 1. **Corriger la conversion trackId** pour l'ajout Ă  la playlist 2. **Tester manuellement** la correction ### 🟡 MOYEN - Important 3. **Mettre Ă  jour app-optimized.js** ou le supprimer 4. **AmĂ©liorer les messages d'erreur** ### 🟱 FAIBLE - AmĂ©lioration 5. Ajouter des tests automatisĂ©s 6. AmĂ©liorer la documentation --- ## 📝 NOTES - Le backend est fonctionnel et bien structurĂ© - L'API respecte les standards REST - Le schĂ©ma Pydantic est correct (attend des UUIDs) - Le problĂšme principal est dans le frontend qui mĂ©lange youtube_id et UUID **Conclusion:** Le systĂšme est bien conçu mais il y a une incohĂ©rence entre les IDs utilisĂ©s dans le frontend (youtube_id) et ce que l'API backend attend (UUID de base de donnĂ©es).