the-tip-top-backend/scripts/apply-prize-delivery-migration.js
2025-11-17 23:47:54 +01:00

74 lines
2.3 KiB
JavaScript

import 'dotenv/config';
import { pool } from '../db.js';
import fs from 'fs';
import path from 'path';
import { fileURLToPath } from 'url';
const __filename = fileURLToPath(import.meta.url);
const __dirname = path.dirname(__filename);
async function applyMigration() {
console.log('🔧 Application de la migration: add-prize-delivery-tracking\n');
try {
// Lire le fichier SQL
const migrationPath = path.join(__dirname, '../database/migrations/add-prize-delivery-tracking.sql');
const migrationSQL = fs.readFileSync(migrationPath, 'utf8');
// Vérifier l'état actuel
console.log('📋 Vérification de l\'état actuel de la base de données...\n');
const columnsCheck = await pool.query(`
SELECT column_name
FROM information_schema.columns
WHERE table_name = 'tickets'
AND column_name IN ('delivered_at', 'delivered_by', 'delivery_notes')
`);
console.log('📊 État actuel:');
console.log(` • Colonnes existantes: ${columnsCheck.rows.map(r => r.column_name).join(', ') || 'Aucune'}`);
// Appliquer la migration
console.log('\n🚀 Application de la migration...\n');
await pool.query(migrationSQL);
// Vérifier le nouvel état
const newColumnsCheck = await pool.query(`
SELECT column_name, data_type
FROM information_schema.columns
WHERE table_name = 'tickets'
AND column_name IN ('delivered_at', 'delivered_by', 'delivery_notes')
ORDER BY ordinal_position
`);
console.log('✅ Migration appliquée avec succès!\n');
console.log('📊 Nouvel état:');
newColumnsCheck.rows.forEach(col => {
console.log(`${col.column_name}: ${col.data_type}`);
});
// Statistiques
const stats = await pool.query(`
SELECT
COUNT(*) as total_tickets,
COUNT(CASE WHEN delivered_at IS NOT NULL THEN 1 END) as delivered_tickets
FROM tickets
`);
console.log('\n📈 Statistiques:');
console.log(` • Total tickets: ${stats.rows[0].total_tickets}`);
console.log(` • Tickets livrés: ${stats.rows[0].delivered_tickets}`);
console.log('\n✨ Migration terminée!');
} catch (error) {
console.error('❌ Erreur lors de l\'application de la migration:', error);
throw error;
} finally {
await pool.end();
}
}
applyMigration();