const redis = require("redis"); require('dotenv').config(); // Configuration for seeding const config = { numEvents: parseInt(process.argv[2]) || 5, // Number of events to create ticketsPerEvent: parseInt(process.argv[3]) || 10000, // Tickets per event redisUrl: process.env.REDIS_URL || "redis://localhost:6379" }; const client = redis.createClient({ url: config.redisUrl }); async function seedTickets() { try { await client.connect(); console.log(`Seeding ${config.numEvents} events with ${config.ticketsPerEvent} tickets each...`); // Clear existing event data const existingKeys = await client.keys('event:*'); if (existingKeys.length > 0) { await client.del(existingKeys); console.log(`Cleared ${existingKeys.length} existing event keys.`); } // Seed multiple events for (let eventId = 1; eventId <= config.numEvents; eventId++) { const eventKey = `event:${eventId}:tickets`; const metaKey = `event:${eventId}:meta`; // Generate tickets for this event const tickets = []; for (let i = 1; i <= config.ticketsPerEvent; i++) { tickets.push(`ticket-${eventId}-${i}`); } // Store tickets in Redis list await client.rPush(eventKey, tickets); // Store event metadata await client.hSet(metaKey, { eventId: eventId, totalTickets: config.ticketsPerEvent, soldTickets: 0, createdAt: new Date().toISOString(), name: `Event ${eventId}`, description: `Sample event ${eventId} for load testing` }); console.log(`āœ“ Event ${eventId}: ${config.ticketsPerEvent} tickets seeded`); } // Store global stats await client.hSet('global:stats', { totalEvents: config.numEvents, totalTickets: config.numEvents * config.ticketsPerEvent, totalSold: 0, lastSeeded: new Date().toISOString() }); console.log(`\nšŸŽ‰ Successfully seeded ${config.numEvents} events with ${config.numEvents * config.ticketsPerEvent} total tickets!`); process.exit(0); } catch (err) { console.error("Error during seed:", err); process.exit(1); } } seedTickets();