53 lines
1.6 KiB
JavaScript
53 lines
1.6 KiB
JavaScript
import { pool } from '../db.js';
|
|
|
|
const fixTicketStatus = async () => {
|
|
try {
|
|
console.log('🔄 Correction du statut des tickets non réclamés...\n');
|
|
|
|
// Mettre à NULL le statut des tickets qui n'ont pas de user_id
|
|
// (tickets pré-générés, non encore joués)
|
|
const result = await pool.query(`
|
|
UPDATE tickets
|
|
SET status = NULL, played_at = NULL
|
|
WHERE user_id IS NULL AND status = 'PENDING'
|
|
RETURNING id
|
|
`);
|
|
|
|
const count = result.rowCount;
|
|
console.log(`✅ ${count.toLocaleString('fr-FR')} tickets mis à jour`);
|
|
console.log(' Status: NULL (disponible, non encore joué)');
|
|
console.log(' played_at: NULL\n');
|
|
|
|
// Afficher les statistiques
|
|
const stats = await pool.query(`
|
|
SELECT
|
|
status,
|
|
COUNT(*) as count,
|
|
CASE
|
|
WHEN user_id IS NULL THEN 'Sans utilisateur'
|
|
ELSE 'Avec utilisateur'
|
|
END as user_status
|
|
FROM tickets
|
|
GROUP BY status, CASE WHEN user_id IS NULL THEN 'Sans utilisateur' ELSE 'Avec utilisateur' END
|
|
ORDER BY status NULLS FIRST, user_status
|
|
`);
|
|
|
|
console.log('📊 STATISTIQUES DES TICKETS:');
|
|
stats.rows.forEach(row => {
|
|
const statusLabel = row.status || 'NULL (disponible)';
|
|
const countStr = parseInt(row.count).toLocaleString('fr-FR');
|
|
console.log(` • ${statusLabel} | ${row.user_status}: ${countStr}`);
|
|
});
|
|
console.log('');
|
|
|
|
await pool.end();
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('❌ Erreur:', error.message);
|
|
await pool.end();
|
|
process.exit(1);
|
|
}
|
|
};
|
|
|
|
fixTicketStatus();
|