#!/usr/bin/env node /** * Script simple pour vérifier les colonnes des tables Supabase * Usage: node scripts/check-columns.mjs */ import { createClient } from '@supabase/supabase-js'; import { config } from 'dotenv'; // Charger les variables d'environnement config({ path: '.env.local' }); const supabaseUrl = process.env.NEXT_PUBLIC_SUPABASE_URL; const supabaseServiceKey = process.env.SUPABASE_SERVICE_ROLE_KEY; if (!supabaseUrl || !supabaseServiceKey) { console.error('❌ Variables d\'environnement manquantes:'); console.error(' NEXT_PUBLIC_SUPABASE_URL:', !!supabaseUrl ? '✅' : '❌'); console.error(' SUPABASE_SERVICE_ROLE_KEY:', !!supabaseServiceKey ? '✅' : '❌'); process.exit(1); } const supabase = createClient(supabaseUrl, supabaseServiceKey); async function checkColumns() { console.log('🔍 Vérification des colonnes dans les tables Supabase...\n'); const tables = ['organizations', 'salaries', 'cddu_contracts', 'productions']; for (const table of tables) { try { console.log(`📋 Table: ${table}`); console.log('-'.repeat(50)); const { data, error, count } = await supabase .from(table) .select('*', { count: 'exact' }) .limit(1); if (error) { console.log(` ❌ Erreur: ${error.message}`); if (error.message.includes('permission denied') || error.message.includes('does not exist')) { console.log(` 💡 Suggestion: Vérifier que la table existe et que les permissions sont correctes`); } } else { console.log(` 📊 Nombre de lignes: ${count}`); if (data && data.length > 0) { const columns = Object.keys(data[0]); console.log(` 📝 Colonnes trouvées: ${columns.length}`); console.log(` 📋 Liste: ${columns.join(', ')}`); // Échantillon de données console.log(` 📄 Échantillon:`); const sample = data[0]; Object.entries(sample).slice(0, 5).forEach(([key, value]) => { const displayValue = value === null ? 'NULL' : typeof value === 'string' && value.length > 50 ? value.substring(0, 47) + '...' : String(value); console.log(` ${key}: ${displayValue}`); }); if (Object.keys(sample).length > 5) { console.log(` ... et ${Object.keys(sample).length - 5} autres colonnes`); } } else { console.log(` ⚠️ Table vide - impossible de déterminer les colonnes`); } } console.log(''); // Ligne vide } catch (err) { console.log(` ❌ Erreur inattendue: ${err.message}`); console.log(''); } } // Vérification spécifique pour les champs PDFMonkey les plus critiques console.log('🎯 Vérification des champs critiques pour PDFMonkey...'); console.log('='.repeat(60)); const criticalChecks = [ { table: 'organizations', fields: ['structure_api', 'name', 'siret', 'address'], description: 'Informations structure' }, { table: 'salaries', fields: ['nom', 'prenom', 'civilite', 'code_salarie'], description: 'Informations salarié' }, { table: 'cddu_contracts', fields: ['employee_name', 'start_date', 'end_date', 'brut', 'profession'], description: 'Informations contrat' }, { table: 'productions', fields: ['name', 'reference'], description: 'Informations spectacle' } ]; for (const check of criticalChecks) { console.log(`\n🔍 ${check.description} (${check.table}):`); try { const { data, error } = await supabase .from(check.table) .select(check.fields.join(', ')) .limit(1); if (error) { console.log(` ❌ Erreur: ${error.message}`); } else if (data && data.length > 0) { const available = Object.keys(data[0]); const missing = check.fields.filter(f => !available.includes(f)); console.log(` ✅ Disponibles: ${available.join(', ')}`); if (missing.length > 0) { console.log(` ❌ Manquants: ${missing.join(', ')}`); } } else { console.log(` ⚠️ Table vide`); } } catch (err) { console.log(` ❌ Erreur: ${err.message}`); } } console.log('\n✅ Vérification terminée !'); console.log('\n💡 Prochaines étapes:'); console.log(' 1. Analyser les colonnes manquantes'); console.log(' 2. Créer les migrations nécessaires'); console.log(' 3. Tester avec un contrat réel'); } checkColumns().catch(console.error);