import { PrismaClient, Role, RoomType } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { console.log('Seeding database...'); // Seed Roles const rolesData = [ { name: 'Facility Owner', permissions: { admin: true }, isSystem: true }, { name: 'Manager', permissions: { users: { manage: true }, tasks: { manage: true }, inventory: { manage: true } }, isSystem: true }, { name: 'Grower', permissions: { tasks: { view: true, complete: true }, inventory: { view: true } }, isSystem: true } ]; for (const r of rolesData) { const existing = await prisma.role.findUnique({ where: { name: r.name } }); if (!existing) { await prisma.role.create({ data: r }); console.log(`Created Role: ${r.name}`); } } const ownerRole = await prisma.role.findUnique({ where: { name: 'Facility Owner' } }); // Create Owner const ownerEmail = 'admin@runfoo.com'; const existingOwner = await prisma.user.findUnique({ where: { email: ownerEmail } }); if (!existingOwner) { await prisma.user.create({ data: { email: ownerEmail, passwordHash: 'password123', name: 'Travis', role: 'OWNER', // Enum fallback roleId: ownerRole?.id, rate: 100.00 } }); console.log('Created Owner: Travis (admin@runfoo.com)'); } else { // Update existing owner to have roleId if missing if (!existingOwner.roleId && ownerRole) { await prisma.user.update({ where: { email: ownerEmail }, data: { roleId: ownerRole.id, name: 'Travis' } }); console.log('Updated Owner permissions'); } } // Create Default Rooms const rooms = [ { name: 'Veg Room 1', type: RoomType.VEG, sqft: 1200 }, { name: 'Flower Room A', type: RoomType.FLOWER, sqft: 2500 }, { name: 'Flower Room B', type: RoomType.FLOWER, sqft: 2500 }, { name: 'Dry Room', type: RoomType.DRY, sqft: 800 }, ]; for (const r of rooms) { const existing = await prisma.room.findFirst({ where: { name: r.name } }); if (!existing) { await prisma.room.create({ data: r }); console.log(`Created Room: ${r.name}`); } } console.log('Seeding complete.'); } main() .catch((e) => { console.error(e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });