import 'dotenv/config'; import { pool } from '../db.js'; async function createGrandPrizeTicket() { console.log('đŸŽ« CrĂ©ation d\'un ticket pour le gros lot "An de thĂ©"...\n'); try { // RĂ©cupĂ©rer l'ID du GRAND_PRIZE const prizeResult = await pool.query( "SELECT id, name, stock FROM prizes WHERE type = 'GRAND_PRIZE' LIMIT 1" ); if (prizeResult.rows.length === 0) { console.error('❌ Le lot GRAND_PRIZE n\'existe pas!'); return; } const prize = prizeResult.rows[0]; console.log('✅ Lot trouvĂ©:', prize.name); console.log(' Stock actuel:', prize.stock); if (prize.stock <= 0) { console.error('❌ Le stock est Ă©puisĂ©! Impossible de crĂ©er un ticket.'); return; } // GĂ©nĂ©rer un code unique pour le ticket const ticketCode = `GRAND-${Date.now()}-${Math.random().toString(36).substring(2, 8).toUpperCase()}`; // CrĂ©er le ticket const ticketResult = await pool.query( `INSERT INTO tickets (code, prize_id, status, played_at) VALUES ($1, $2, NULL, NULL) RETURNING id, code`, [ticketCode, prize.id] ); const ticket = ticketResult.rows[0]; console.log('\n🎉 Ticket créé avec succĂšs!'); console.log(' Code:', ticket.code); console.log(' ID:', ticket.id); console.log(' Prize:', prize.name); console.log(' Status: Non jouĂ© (prĂȘt Ă  ĂȘtre utilisĂ©)'); // DĂ©crĂ©menter le stock await pool.query( "UPDATE prizes SET stock = stock - 1 WHERE id = $1", [prize.id] ); console.log('\n✅ Stock dĂ©crĂ©mentĂ©: ', prize.stock, '→', prize.stock - 1); // Afficher le rĂ©sumĂ© const summary = await pool.query( `SELECT p.name, p.stock, COUNT(t.id) as tickets_crees, COUNT(CASE WHEN t.played_at IS NOT NULL THEN 1 END) as tickets_joues FROM prizes p LEFT JOIN tickets t ON p.id = t.prize_id WHERE p.type = 'GRAND_PRIZE' GROUP BY p.id, p.name, p.stock` ); console.log('\n📊 RĂ©sumĂ© "An de thĂ©":'); console.table(summary.rows); } catch (error) { console.error('❌ Erreur:', error.message); } finally { await pool.end(); } } createGrandPrizeTicket();