387 lines
11 KiB
TypeScript
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()
|
|
})
|