espace-paie-odentas/scripts/check-columns.mjs

141 lines
No EOL
4.7 KiB
JavaScript

#!/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);