the-tip-top-backend/scripts/create-grand-prize-ticket.js
2025-11-17 23:47:54 +01:00

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();