import { randomInt } from 'crypto'; import { PrismaClient } from '../generated/prisma'; import { withAccelerate } from '@prisma/extension-accelerate'; const prisma = new PrismaClient().$extends(withAccelerate()); const statuses = ['pending', 'approved', 'rejected'] as const; function getRandomStatus() { return statuses[Math.floor(Math.random() * statuses.length)]; } async function main() { console.log('🌱 Seeding database...'); const length = 9; // Create Roles await Promise.all([ prisma.role.create({ data: { name: 'user' } }), prisma.role.create({ data: { name: 'admin' } }), prisma.role.create({ data: { name: 'supporterTier1' } }), prisma.role.create({ data: { name: 'supporterTier2' } }), prisma.role.create({ data: { name: 'supporterTier3' } }), prisma.role.create({ data: { name: 'supporterTier4' } }), prisma.role.create({ data: { name: 'supporterTier5' } }), prisma.role.create({ data: { name: 'supporterTier6' } }), ]); // Create Users const users = await Promise.all( Array.from({ length }).map((_, i) => prisma.user.create({ data: { patreonFullName: `User ${i + 1}`, patreonId: `${randomInt(9558925894)}`, imageUrl: 'https://placehold.co/48', }, }) ) ); // Create Vtubers const vtubers = await Promise.all( ['Alpha', 'Bravo', 'Charlie'].map((name) => prisma.vtuber.create({ data: { displayName: name, slug: name.toLowerCase(), }, }) ) ); // Create Streams and VODs (with embedded upload data) await Promise.all( users.map((user, i) => prisma.vod.create({ data: { uploader: { connect: { id: user.id } }, segmentKeys: [`vod${i + 1}_part1.mp4`, `vod${i + 1}_part2.mp4`], streamDate: new Date(), notes: `Seeded VOD ${i + 1}`, status: getRandomStatus(), hlsPlaylist: `https://cdn.example.com/hls/vod${i + 1}/index.m3u8`, thumbnail: `https://placehold.co/320x180?text=VOD${i + 1}`, vtubers: { connect: [{ id: vtubers[i % vtubers.length].id }], }, stream: { create: { date: new Date(), announcementUrl: `https://example.com/announcement/${i + 1}`, }, }, }, }) ) ); console.log(`✅ Seed complete with ${length} users and VODs (with vtubers)!`); } main() .catch((e) => { console.error('❌ Seed error:', e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });