# 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)