/** * Script de migration : Active les emails pour tous les utilisateurs existants * À exécuter une seule fois après le déploiement */ const admin = require('firebase-admin'); const logger = require('firebase-functions/logger'); // AJOUTER CECI : Charger le fichier de clé const serviceAccount = require('./serviceAccountKey.json'); // Initialiser Firebase Admin avec les credentials explicites if (!admin.apps.length) { admin.initializeApp({ credential: admin.credential.cert(serviceAccount), // <-- Utiliser la clé ici projectId: 'em2rp-951dc', }); } const db = admin.firestore(); /** * Active les notifications par email pour tous les utilisateurs existants */ async function migrateEmailPreferences() { console.log('=== DÉBUT MIGRATION EMAIL PREFERENCES ===\n'); try { // 1. Récupérer tous les utilisateurs const usersSnapshot = await db.collection('users').get(); console.log(`✓ ${usersSnapshot.size} utilisateurs trouvés\n`); // 2. Préparer les updates const updates = []; let alreadyEnabled = 0; let toUpdate = 0; usersSnapshot.forEach((doc) => { const user = doc.data(); const prefs = user.notificationPreferences || {}; // Vérifier si déjà activé if (prefs.emailEnabled === true) { alreadyEnabled++; console.log(` ○ ${user.email || doc.id}: emails déjà activés`); } else { toUpdate++; console.log(` ✓ ${user.email || doc.id}: activation des emails`); updates.push({ ref: doc.ref, data: { 'notificationPreferences.emailEnabled': true, }, }); } }); console.log(`\n--- RÉSUMÉ ---`); console.log(` Total utilisateurs: ${usersSnapshot.size}`); console.log(` Déjà activés: ${alreadyEnabled}`); console.log(` À mettre à jour: ${toUpdate}`); // 3. Appliquer les mises à jour par batches de 500 (limite Firestore) if (updates.length > 0) { console.log(`\nApplication des mises à jour...`); const batchSize = 500; for (let i = 0; i < updates.length; i += batchSize) { const batch = db.batch(); const currentBatch = updates.slice(i, i + batchSize); currentBatch.forEach((update) => { batch.update(update.ref, update.data); }); await batch.commit(); console.log(` ✓ Batch ${Math.floor(i / batchSize) + 1}/${Math.ceil(updates.length / batchSize)} appliqué`); } console.log(`\n✓ Migration terminée avec succès !`); console.log(` ${toUpdate} utilisateurs mis à jour\n`); } else { console.log(`\n✓ Aucune mise à jour nécessaire\n`); } console.log('=== FIN MIGRATION ==='); return { success: true, total: usersSnapshot.size, alreadyEnabled, updated: toUpdate, }; } catch (error) { console.error('❌ ERREUR MIGRATION:', error); throw error; } } // Exécuter la migration si appelé directement if (require.main === module) { migrateEmailPreferences() .then((result) => { console.log('\n✓ Migration réussie:', result); process.exit(0); }) .catch((error) => { console.error('\n❌ Migration échouée:', error); process.exit(1); }); } module.exports = { migrateEmailPreferences };