mirror of
https://github.com/R0m1k3/LogiFlow.git
synced 2026-10-22 14:38:19 +02:00
Add missing email column to suppliers to fix order and delivery errors
Adds the 'email' column to the 'suppliers' table via SQL script to resolve 500 errors on `/api/orders` and `/api/deliveries` caused by missing schema information required by Drizzle ORM. Replit-Commit-Author: Agent Replit-Commit-Session-Id: b163d4c0-de5e-4f4e-a9c0-aed4c7049718 Replit-Commit-Checkpoint-Type: full_checkpoint Replit-Commit-Screenshot-Url: https://storage.googleapis.com/screenshot-production-us-central1/1957c339-2757-4d1f-8e92-e9f71a1ce58e/b163d4c0-de5e-4f4e-a9c0-aed4c7049718/FyjZ5oh
This commit is contained in:
1 parent
c79ac79a91
commit
c8a8b138e7
6 files changed
+605
No files matched your search
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Script de debug pour vérifier le schéma de la table suppliers en production
|
||||
* et corriger les colonnes manquantes si nécessaire
|
||||
*/
|
||||
|
||||
import pg from 'pg';
|
||||
import fs from 'fs';
|
||||
|
||||
const { Pool } = pg;
|
||||
|
||||
// Configuration de la base de données de production
|
||||
const pool = new Pool({
|
||||
connectionString: process.env.DATABASE_URL,
|
||||
ssl: process.env.NODE_ENV === 'production' ? { rejectUnauthorized: false } : false
|
||||
});
|
||||
|
||||
async function checkSuppliersSchema() {
|
||||
console.log('🔍 Vérification du schéma de la table suppliers en production...');
|
||||
|
||||
try {
|
||||
// Vérifier les colonnes existantes
|
||||
const result = await pool.query(`
|
||||
SELECT
|
||||
column_name,
|
||||
data_type,
|
||||
is_nullable,
|
||||
column_default
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'suppliers'
|
||||
AND table_schema = 'public'
|
||||
ORDER BY ordinal_position
|
||||
`);
|
||||
|
||||
console.log('\n📊 Colonnes actuelles dans la table suppliers:');
|
||||
console.log('='.repeat(60));
|
||||
|
||||
const columns = result.rows;
|
||||
columns.forEach((col, index) => {
|
||||
const nullable = col.is_nullable === 'YES' ? 'NULL' : 'NOT NULL';
|
||||
const defaultVal = col.column_default ? ` DEFAULT ${col.column_default}` : '';
|
||||
console.log(`${index + 1:2}. ${col.column_name.padEnd(25)} : ${col.data_type} ${nullable}${defaultVal}`);
|
||||
});
|
||||
|
||||
// Vérifier les colonnes requises
|
||||
const requiredColumns = ['email', 'automatic_reconciliation'];
|
||||
const existingColumns = columns.map(col => col.column_name);
|
||||
const missingColumns = requiredColumns.filter(col => !existingColumns.includes(col));
|
||||
|
||||
if (missingColumns.length > 0) {
|
||||
console.log(`\n❌ Colonnes manquantes: ${missingColumns.join(', ')}`);
|
||||
console.log('\n📝 Script SQL généré pour corriger le problème:');
|
||||
console.log('='.repeat(60));
|
||||
|
||||
let sqlScript = 'BEGIN;\n\n';
|
||||
|
||||
if (missingColumns.includes('email')) {
|
||||
sqlScript += 'ALTER TABLE suppliers ADD COLUMN email VARCHAR;\n';
|
||||
sqlScript += 'COMMENT ON COLUMN suppliers.email IS \'Email du fournisseur\';\n\n';
|
||||
}
|
||||
|
||||
if (missingColumns.includes('automatic_reconciliation')) {
|
||||
sqlScript += 'ALTER TABLE suppliers ADD COLUMN automatic_reconciliation BOOLEAN DEFAULT false;\n';
|
||||
sqlScript += 'COMMENT ON COLUMN suppliers.automatic_reconciliation IS \'Mode rapprochement automatique BL/Factures\';\n\n';
|
||||
}
|
||||
|
||||
sqlScript += 'COMMIT;';
|
||||
|
||||
console.log(sqlScript);
|
||||
|
||||
// Sauvegarder le script
|
||||
fs.writeFileSync('fix-suppliers-missing-columns.sql', sqlScript);
|
||||
console.log('\n💾 Script sauvegardé dans: fix-suppliers-missing-columns.sql');
|
||||
|
||||
} else {
|
||||
console.log('\n✅ Toutes les colonnes requises sont présentes');
|
||||
}
|
||||
|
||||
// Compter les enregistrements
|
||||
const countResult = await pool.query('SELECT COUNT(*) as total FROM suppliers');
|
||||
console.log(`\n📈 Nombre de fournisseurs: ${countResult.rows[0].total}`);
|
||||
|
||||
} catch (error) {
|
||||
console.error('❌ Erreur lors de la vérification:', error.message);
|
||||
process.exit(1);
|
||||
} finally {
|
||||
await pool.end();
|
||||
}
|
||||
}
|
||||
|
||||
// Exécuter le script
|
||||
checkSuppliersSchema()
|
||||
.then(() => {
|
||||
console.log('\n✅ Vérification terminée');
|
||||
process.exit(0);
|
||||
})
|
||||
.catch((error) => {
|
||||
console.error('❌ Erreur:', error);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in new issue
Block a user