62 lines
1.8 KiB
JavaScript
62 lines
1.8 KiB
JavaScript
import { pool } from '../db.js';
|
|
|
|
async function verifyTickets() {
|
|
try {
|
|
console.log('\n📊 VÉRIFICATION DES TICKETS GÉNÉRÉS\n');
|
|
|
|
// Compter total et vérifier les longueurs de code
|
|
const statsResult = await pool.query(`
|
|
SELECT
|
|
COUNT(*) as total,
|
|
MIN(LENGTH(code)) as min_len,
|
|
MAX(LENGTH(code)) as max_len
|
|
FROM tickets
|
|
`);
|
|
|
|
console.log('✅ Statistiques générales:');
|
|
console.log(` Total de tickets: ${parseInt(statsResult.rows[0].total).toLocaleString('fr-FR')}`);
|
|
console.log(` Longueur minimale des codes: ${statsResult.rows[0].min_len} caractères`);
|
|
console.log(` Longueur maximale des codes: ${statsResult.rows[0].max_len} caractères`);
|
|
|
|
// Distribution par lot
|
|
const distResult = await pool.query(`
|
|
SELECT
|
|
p.name,
|
|
p.type,
|
|
COUNT(t.id) as count,
|
|
ROUND((COUNT(t.id)::numeric / (SELECT COUNT(*) FROM tickets) * 100), 2) as percentage
|
|
FROM prizes p
|
|
LEFT JOIN tickets t ON p.id = t.prize_id
|
|
GROUP BY p.id, p.name, p.type
|
|
ORDER BY count DESC
|
|
`);
|
|
|
|
console.log('\n📦 Distribution par lot:');
|
|
distResult.rows.forEach(p => {
|
|
const count = parseInt(p.count).toLocaleString('fr-FR');
|
|
const percent = p.percentage || '0';
|
|
console.log(` • ${p.name}: ${count} tickets (${percent}%)`);
|
|
});
|
|
|
|
// Exemples de codes
|
|
const samplesResult = await pool.query(`
|
|
SELECT code FROM tickets ORDER BY code LIMIT 5
|
|
`);
|
|
|
|
console.log('\n🎫 Exemples de codes générés:');
|
|
samplesResult.rows.forEach(t => {
|
|
console.log(` • ${t.code}`);
|
|
});
|
|
|
|
console.log('\n✅ Vérification terminée!\n');
|
|
await pool.end();
|
|
process.exit(0);
|
|
} catch (error) {
|
|
console.error('❌ Erreur:', error.message);
|
|
await pool.end();
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
verifyTickets();
|