muller-reporting-sys/prisma/seed.ts
2025-11-12 22:21:35 +03:00

387 lines
11 KiB
TypeScript

import { PrismaClient } from '@prisma/client'
import bcrypt from 'bcryptjs'
const prisma = new PrismaClient()
async function main() {
// Create admin
const hashedPassword = await bcrypt.hash('admin123', 10)
const admin = await prisma.admin.upsert({
where: { email: 'admin@muller.com' },
update: {},
create: {
email: 'admin@muller.com',
password: hashedPassword,
firstName: 'Admin',
surname: 'User',
phone: '1234567890',
authLevel: 'admin'
}
})
console.log('✓ Admin created')
// Default password for all shift managers and workers
const defaultPassword = await bcrypt.hash('muller123', 10)
// Create 4 shift managers (one for each team)
const managerRed = await prisma.shiftManager.upsert({
where: { empNo: 'SM001' },
update: {},
create: {
empNo: 'SM001',
firstName: 'James',
surname: 'Anderson',
email: 'james.anderson@muller.com',
password: defaultPassword,
phone: '555-0101',
status: 'active'
}
})
const managerGreen = await prisma.shiftManager.upsert({
where: { empNo: 'SM002' },
update: {},
create: {
empNo: 'SM002',
firstName: 'Sarah',
surname: 'Mitchell',
email: 'sarah.mitchell@muller.com',
password: defaultPassword,
phone: '555-0102',
status: 'active'
}
})
const managerBlue = await prisma.shiftManager.upsert({
where: { empNo: 'SM003' },
update: {},
create: {
empNo: 'SM003',
firstName: 'Michael',
surname: 'Thompson',
email: 'michael.thompson@muller.com',
password: defaultPassword,
phone: '555-0103',
status: 'active'
}
})
const managerYellow = await prisma.shiftManager.upsert({
where: { empNo: 'SM004' },
update: {},
create: {
empNo: 'SM004',
firstName: 'Emma',
surname: 'Roberts',
email: 'emma.roberts@muller.com',
password: defaultPassword,
phone: '555-0104',
status: 'active'
}
})
console.log('✓ 4 Shift Managers created')
// Create teams
const redTeam = await prisma.team.upsert({
where: { name: 'Red Team' },
update: {},
create: {
name: 'Red Team',
shiftManagerId: managerRed.id
}
})
const greenTeam = await prisma.team.upsert({
where: { name: 'Green Team' },
update: {},
create: {
name: 'Green Team',
shiftManagerId: managerGreen.id
}
})
const blueTeam = await prisma.team.upsert({
where: { name: 'Blue Team' },
update: {},
create: {
name: 'Blue Team',
shiftManagerId: managerBlue.id
}
})
const yellowTeam = await prisma.team.upsert({
where: { name: 'Yellow Team' },
update: {},
create: {
name: 'Yellow Team',
shiftManagerId: managerYellow.id
}
})
console.log('✓ 4 Teams created')
// Create machines
for (let i = 1; i <= 7; i++) {
await prisma.machine.upsert({
where: { name: `T${i}` },
update: {},
create: {
name: `T${i}`,
status: 'active',
machineType: 'Blow Moulding Machine',
bottlesPerMin: 60
}
})
}
console.log('✓ 7 Machines created')
// Worker names for variety
const operatorNames = [
['David', 'Wilson'], ['Robert', 'Brown'], ['William', 'Davis'],
['Richard', 'Miller'], ['Joseph', 'Moore'], ['Thomas', 'Taylor'],
['Charles', 'Jackson'], ['Daniel', 'White'], ['Matthew', 'Harris'],
['Anthony', 'Martin'], ['Mark', 'Garcia'], ['Donald', 'Martinez'],
['Steven', 'Robinson'], ['Paul', 'Clark'], ['Andrew', 'Rodriguez'],
['Joshua', 'Lewis'], ['Kenneth', 'Lee'], ['Kevin', 'Walker'],
['Brian', 'Hall'], ['George', 'Allen'], ['Edward', 'Young'],
['Ronald', 'King'], ['Timothy', 'Wright'], ['Jason', 'Lopez'],
['Jeffrey', 'Hill'], ['Ryan', 'Scott'], ['Jacob', 'Green'],
['Gary', 'Adams']
]
const level2Names = [
['Lisa', 'Bennett'], ['Jennifer', 'Cooper'], ['Maria', 'Reed'], ['Susan', 'Bailey']
]
const engineerNames = [
['John', 'Peterson'], ['Chris', 'Hughes'], ['Alex', 'Foster'], ['Sam', 'Coleman']
]
// RED TEAM - 7 Operators + 1 Level 2 + 1 Engineer
console.log('Creating Red Team workers...')
for (let i = 0; i < 7; i++) {
await prisma.worker.upsert({
where: { empNo: `RED-OP${i + 1}` },
update: {},
create: {
empNo: `RED-OP${i + 1}`,
firstName: operatorNames[i][0],
surname: operatorNames[i][1],
email: `${operatorNames[i][0].toLowerCase()}.${operatorNames[i][1].toLowerCase()}.red@muller.com`,
password: defaultPassword,
phone: `555-1${String(i + 1).padStart(2, '0')}`,
jobPosition: 'Blow Moulder Level 1',
status: 'active'
}
})
}
await prisma.worker.upsert({
where: { empNo: 'RED-L2' },
update: {},
create: {
empNo: 'RED-L2',
firstName: level2Names[0][0],
surname: level2Names[0][1],
email: `${level2Names[0][0].toLowerCase()}.${level2Names[0][1].toLowerCase()}.red@muller.com`,
password: defaultPassword,
phone: '555-1100',
jobPosition: 'Blow Moulder Level 2',
status: 'active'
}
})
await prisma.worker.upsert({
where: { empNo: 'RED-ENG' },
update: {},
create: {
empNo: 'RED-ENG',
firstName: engineerNames[0][0],
surname: engineerNames[0][1],
email: `${engineerNames[0][0].toLowerCase()}.${engineerNames[0][1].toLowerCase()}.red@muller.com`,
password: defaultPassword,
phone: '555-1200',
jobPosition: 'Engineer',
status: 'active'
}
})
console.log('✓ Red Team: 7 operators + 1 Level 2 + 1 Engineer')
// GREEN TEAM - 7 Operators + 1 Level 2 + 1 Engineer
console.log('Creating Green Team workers...')
for (let i = 0; i < 7; i++) {
await prisma.worker.upsert({
where: { empNo: `GRN-OP${i + 1}` },
update: {},
create: {
empNo: `GRN-OP${i + 1}`,
firstName: operatorNames[i + 7][0],
surname: operatorNames[i + 7][1],
email: `${operatorNames[i + 7][0].toLowerCase()}.${operatorNames[i + 7][1].toLowerCase()}.green@muller.com`,
password: defaultPassword,
phone: `555-2${String(i + 1).padStart(2, '0')}`,
jobPosition: 'Blow Moulder Level 1',
status: 'active'
}
})
}
await prisma.worker.upsert({
where: { empNo: 'GRN-L2' },
update: {},
create: {
empNo: 'GRN-L2',
firstName: level2Names[1][0],
surname: level2Names[1][1],
email: `${level2Names[1][0].toLowerCase()}.${level2Names[1][1].toLowerCase()}.green@muller.com`,
password: defaultPassword,
phone: '555-2100',
jobPosition: 'Blow Moulder Level 2',
status: 'active'
}
})
await prisma.worker.upsert({
where: { empNo: 'GRN-ENG' },
update: {},
create: {
empNo: 'GRN-ENG',
firstName: engineerNames[1][0],
surname: engineerNames[1][1],
email: `${engineerNames[1][0].toLowerCase()}.${engineerNames[1][1].toLowerCase()}.green@muller.com`,
password: defaultPassword,
phone: '555-2200',
jobPosition: 'Engineer',
status: 'active'
}
})
console.log('✓ Green Team: 7 operators + 1 Level 2 + 1 Engineer')
// BLUE TEAM - 7 Operators + 1 Level 2 + 1 Engineer
console.log('Creating Blue Team workers...')
for (let i = 0; i < 7; i++) {
await prisma.worker.upsert({
where: { empNo: `BLU-OP${i + 1}` },
update: {},
create: {
empNo: `BLU-OP${i + 1}`,
firstName: operatorNames[i + 14][0],
surname: operatorNames[i + 14][1],
email: `${operatorNames[i + 14][0].toLowerCase()}.${operatorNames[i + 14][1].toLowerCase()}.blue@muller.com`,
password: defaultPassword,
phone: `555-3${String(i + 1).padStart(2, '0')}`,
jobPosition: 'Blow Moulder Level 1',
status: 'active'
}
})
}
await prisma.worker.upsert({
where: { empNo: 'BLU-L2' },
update: {},
create: {
empNo: 'BLU-L2',
firstName: level2Names[2][0],
surname: level2Names[2][1],
email: `${level2Names[2][0].toLowerCase()}.${level2Names[2][1].toLowerCase()}.blue@muller.com`,
password: defaultPassword,
phone: '555-3100',
jobPosition: 'Blow Moulder Level 2',
status: 'active'
}
})
await prisma.worker.upsert({
where: { empNo: 'BLU-ENG' },
update: {},
create: {
empNo: 'BLU-ENG',
firstName: engineerNames[2][0],
surname: engineerNames[2][1],
email: `${engineerNames[2][0].toLowerCase()}.${engineerNames[2][1].toLowerCase()}.blue@muller.com`,
password: defaultPassword,
phone: '555-3200',
jobPosition: 'Engineer',
status: 'active'
}
})
console.log('✓ Blue Team: 7 operators + 1 Level 2 + 1 Engineer')
// YELLOW TEAM - 7 Operators + 1 Level 2 + 1 Engineer
console.log('Creating Yellow Team workers...')
for (let i = 0; i < 7; i++) {
await prisma.worker.upsert({
where: { empNo: `YEL-OP${i + 1}` },
update: {},
create: {
empNo: `YEL-OP${i + 1}`,
firstName: operatorNames[i + 21][0],
surname: operatorNames[i + 21][1],
email: `${operatorNames[i + 21][0].toLowerCase()}.${operatorNames[i + 21][1].toLowerCase()}.yellow@muller.com`,
password: defaultPassword,
phone: `555-4${String(i + 1).padStart(2, '0')}`,
jobPosition: 'Blow Moulder Level 1',
status: 'active'
}
})
}
await prisma.worker.upsert({
where: { empNo: 'YEL-L2' },
update: {},
create: {
empNo: 'YEL-L2',
firstName: level2Names[3][0],
surname: level2Names[3][1],
email: `${level2Names[3][0].toLowerCase()}.${level2Names[3][1].toLowerCase()}.yellow@muller.com`,
password: defaultPassword,
phone: '555-4100',
jobPosition: 'Blow Moulder Level 2',
status: 'active'
}
})
await prisma.worker.upsert({
where: { empNo: 'YEL-ENG' },
update: {},
create: {
empNo: 'YEL-ENG',
firstName: engineerNames[3][0],
surname: engineerNames[3][1],
email: `${engineerNames[3][0].toLowerCase()}.${engineerNames[3][1].toLowerCase()}.yellow@muller.com`,
password: defaultPassword,
phone: '555-4200',
jobPosition: 'Engineer',
status: 'active'
}
})
console.log('✓ Yellow Team: 7 operators + 1 Level 2 + 1 Engineer')
console.log('\n========================================')
console.log('✓ Seed data created successfully!')
console.log('========================================')
console.log('Summary:')
console.log('- 1 Admin')
console.log('- 4 Shift Managers')
console.log('- 4 Teams')
console.log('- 7 Machines')
console.log('- 36 Workers (28 operators + 4 Level 2 + 4 Engineers)')
console.log('========================================')
}
main()
.catch((e) => {
console.error(e)
process.exit(1)
})
.finally(async () => {
await prisma.$disconnect()
})