141 lines
No EOL
4.7 KiB
JavaScript
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); |