78 lines
2.2 KiB
JavaScript
78 lines
2.2 KiB
JavaScript
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();
|