# Plan - Suivi du statut de génération Suno ## Objectif Permettre de suivre la progression d'une génération de musique Suno en utilisant le taskId retourné par l'API. ## Problème identifié - ✅ L'API Suno retourne un taskId après la génération - ✅ Pas de moyen de suivre la progression de la génération - ✅ Besoin d'une fonction pour interroger le statut ## Solution implémentée ### ✅ 1. Ajout de la constante API - [x] Ajouté `SUNO_STATUS_PATH = "/api/v1/query"` dans `music.js` - [x] Endpoint pour interroger le statut d'une tâche ### ✅ 2. Création de la fonction getSunoStatus - [x] Nouvelle fonction Cloud Function `getSunoStatus` - [x] Prend en paramètre le `taskId` - [x] Interroge l'API Suno pour récupérer le statut - [x] Retourne les données de progression ### ✅ 3. Export de la fonction - [x] Ajouté l'export dans `index.js` - [x] Fonction accessible via `firebase.functions().httpsCallable('getSunoStatus')` ## Structure de la fonction ```javascript exports.getSunoStatus = onCall({}, async ({ data = {} }) => { const { taskId } = data; // Validation du taskId // Appel à l'API Suno // Parsing de la réponse // Retour des données }); ``` ## Utilisation côté client ```javascript // Après avoir généré la musique et récupéré le taskId const checkStatus = async (taskId) => { try { const result = await firebase .functions() .httpsCallable('getSunoStatus')({ taskId }); console.log('Statut:', result.data); return result.data; } catch (error) { console.error('Erreur:', error); } }; // Polling pour suivre la progression const pollStatus = async (taskId) => { const interval = setInterval(async () => { const status = await checkStatus(taskId); if (status?.data?.status === 'completed') { clearInterval(interval); console.log('🎵 Génération terminée!'); } }, 5000); // Vérifier toutes les 5 secondes }; ``` ## Réponse de la fonction ### Succès ```json { "success": true, "taskId": "aa6920a5a84317c40688b6c4e457c630", "data": { "status": "processing", // ou "completed", "failed" "progress": 75, "audio_url": "https://...", "video_url": "https://...", "image_url": "https://..." } } ``` ### Erreur ```json { "error": "Erreur lors de la vérification du statut: TaskId manquant" } ``` ## Statuts possibles - `pending` : En attente de traitement - `processing` : En cours de génération - `completed` : Génération terminée avec succès - `failed` : Échec de la génération - `cancelled` : Génération annulée ## Gestion des erreurs - ✅ Validation du taskId obligatoire - ✅ Gestion des erreurs de réseau - ✅ Parsing sécurisé de la réponse JSON - ✅ Logs avec émojis pour le debugging - ✅ Messages d'erreur explicites ## Prochaines étapes - [ ] Déployer les fonctions : `firebase deploy --only functions` - [ ] Tester la fonction avec un taskId réel - [ ] Implémenter le polling côté client - [ ] Ajouter une interface utilisateur pour afficher la progression - [ ] Gérer les cas d'erreur côté client ## Exemple d'intégration complète ```javascript // 1. Générer la musique const generateResult = await firebase .functions() .httpsCallable('music-generateMusic')(musicData); const taskId = generateResult.data.response.data.taskId; // 2. Suivre la progression if (taskId) { pollStatus(taskId); } else { console.error('❌ TaskId manquant'); } ``` ## Notes importantes - ⚠️ Ne pas interroger l'API trop fréquemment (max toutes les 5 secondes) - ⚠️ Implémenter un timeout pour éviter les boucles infinies - ⚠️ Gérer les cas où le taskId n'existe plus - ⚠️ La génération peut prendre 2-3 minutes selon la complexité ## Fichiers modifiés - ✅ `/functions/src/music.js` - Ajout de getSunoStatus - ✅ `/functions/index.js` - Export de la fonction - ✅ `/plans/suno-status-tracking.md` - Ce fichier de documentation