124 lines
3.8 KiB
Markdown
124 lines
3.8 KiB
Markdown
# Plan d'implémentation - Fonction Callback Suno
|
|
|
|
## Objectif
|
|
Créer une cloud function qui servira de callback pour l'API Suno afin de recevoir les notifications lorsque la génération de musique est terminée.
|
|
|
|
## Problèmes identifiés
|
|
- [ ] Besoin d'une URL de callback pour l'API Suno
|
|
- [ ] Gestion des notifications de fin de génération
|
|
- [ ] Mise à jour automatique du statut dans Firestore
|
|
- [ ] Traitement des erreurs de callback
|
|
|
|
## Solutions appliquées
|
|
|
|
### ✅ 1. Création de la fonction callback
|
|
- [x] Créé `/functions/src/callback.js`
|
|
- [x] Fonction `sunoCallback` avec méthode POST uniquement
|
|
- [x] Validation des données reçues
|
|
- [x] Gestion des erreurs avec logs émojis
|
|
|
|
### ✅ 2. Traitement des données callback
|
|
- [x] Extraction des paramètres de l'API Suno :
|
|
- `id` : Identifiant de la génération
|
|
- `status` : Statut de la génération
|
|
- `audio_url` : URL du fichier audio
|
|
- `video_url` : URL du fichier vidéo
|
|
- `image_url` : URL de l'image de couverture
|
|
- `lyric` : Paroles générées
|
|
- `title` : Titre de la chanson
|
|
- `tags` : Style musical
|
|
- `duration` : Durée de la chanson
|
|
- `error_message` : Message d'erreur si échec
|
|
|
|
### ✅ 3. Mise à jour Firestore
|
|
- [x] Recherche du document correspondant par ID
|
|
- [x] Mise à jour des champs :
|
|
- `status` : Nouveau statut
|
|
- `audioUrl` : URL audio si disponible
|
|
- `videoUrl` : URL vidéo si disponible
|
|
- `imageUrl` : URL image si disponible
|
|
- `lyrics` : Paroles si disponibles
|
|
- `title` : Titre si disponible
|
|
- `style` : Style si disponible
|
|
- `duration` : Durée si disponible
|
|
- `errorMessage` : Message d'erreur si échec
|
|
- `updatedAt` : Timestamp de mise à jour
|
|
|
|
### ✅ 4. Configuration de l'URL callback
|
|
- [x] Mis à jour `SUNO_CALLBACK_URL` dans `music.js`
|
|
- [x] URL : `https://us-central1-musicland-app.cloudfunctions.net/sunoCallback`
|
|
- [x] Intégration dans le payload de génération
|
|
|
|
### ✅ 5. Export de la fonction
|
|
- [x] Ajouté l'export dans `functions/index.js`
|
|
- [x] Fonction accessible via Firebase Functions
|
|
|
|
## Structure de la fonction callback
|
|
|
|
```javascript
|
|
exports.sunoCallback = onRequest({
|
|
cors: true,
|
|
methods: ["POST"],
|
|
}, async (req, res) => {
|
|
// Validation de la méthode
|
|
// Extraction des données
|
|
// Recherche du document Firestore
|
|
// Mise à jour des données
|
|
// Réponse de succès/erreur
|
|
});
|
|
```
|
|
|
|
## Gestion des erreurs
|
|
|
|
- ✅ Validation de la méthode HTTP (POST uniquement)
|
|
- ✅ Vérification de la présence de l'ID
|
|
- ✅ Vérification de l'existence du document Firestore
|
|
- ✅ Gestion des erreurs de mise à jour
|
|
- ✅ Logs avec émojis pour faciliter le debugging
|
|
|
|
## Réponses de la fonction
|
|
|
|
### Succès (200)
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Callback traité avec succès",
|
|
"id": "generation_id",
|
|
"status": "completed"
|
|
}
|
|
```
|
|
|
|
### Erreurs
|
|
- **405** : Méthode non autorisée
|
|
- **400** : ID manquant
|
|
- **404** : Document non trouvé
|
|
- **500** : Erreur interne du serveur
|
|
|
|
## Tests à effectuer
|
|
|
|
- [ ] Tester la fonction avec un payload de test
|
|
- [ ] Vérifier la mise à jour Firestore
|
|
- [ ] Tester les cas d'erreur
|
|
- [ ] Vérifier les logs
|
|
- [ ] Tester l'intégration avec l'API Suno
|
|
|
|
## Déploiement
|
|
|
|
- [ ] Déployer les functions : `firebase deploy --only functions`
|
|
- [ ] Vérifier l'URL de la fonction déployée
|
|
- [ ] Tester la fonction en production
|
|
|
|
## Notes importantes
|
|
|
|
- La fonction utilise `onRequest` pour accepter les callbacks HTTP
|
|
- CORS activé pour permettre les appels externes
|
|
- Seules les requêtes POST sont acceptées
|
|
- Les logs utilisent des émojis pour faciliter le debugging
|
|
- La fonction met à jour automatiquement le timestamp `updatedAt`
|
|
|
|
## Fichiers modifiés
|
|
|
|
- ✅ `/functions/src/callback.js` (créé)
|
|
- ✅ `/functions/src/music.js` (SUNO_CALLBACK_URL mis à jour)
|
|
- ✅ `/functions/index.js` (export ajouté)
|
|
- ✅ `/plans/suno-callback-implementation.md` (ce fichier) |