import 'dotenv/config'; import bcrypt from 'bcrypt'; import { PrismaClient } from '@prisma/client'; const prisma = new PrismaClient(); async function main() { console.log('๐ŸŒฑ Seeding database...'); // โ”€โ”€โ”€ ์‚ฌ์šฉ์ž โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ const adminPw = await bcrypt.hash('admin1234!', 12); const memberPw = await bcrypt.hash('member1234!', 12); const admin = await prisma.user.upsert({ where: { email: 'admin@eene.com' }, update: {}, create: { email: 'admin@eene.com', password: adminPw, name: '๊ด€๋ฆฌ์ž', role: 'ADMIN', department: 'EENE' }, }); const member = await prisma.user.upsert({ where: { email: 'member@eene.com' }, update: {}, create: { email: 'member@eene.com', password: memberPw, name: 'ํ™๊ธธ๋™', role: 'MEMBER', department: 'EENE' }, }); console.log(`โœ… Users ready`); // โ”€โ”€โ”€ ๊ธฐ์กด ์—…๋ฌด ์‚ญ์ œ ํ›„ ์žฌ์ƒ์„ฑ โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ await prisma.kpiMetric.deleteMany({}); await prisma.taskDetail.deleteMany({}); await prisma.task.deleteMany({}); // โ”€โ”€โ”€ HR ๋ถ€๋ฌธ ์—…๋ฌด โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ const hrTasks = [ { title: '์‚ฌ๋‚ด ํ•ต์‹ฌ์—ญ๋Ÿ‰ ๊ต์œก์ฒด๊ณ„ ์ˆ˜๋ฆฝ (HRD)', description: '์ง๊ธ‰๋ณ„/์ง๋ฌด๋ณ„ ํ•„์ˆ˜ ์—ญ๋Ÿ‰ ๊ฐ€์ด๋“œ๋ผ์ธ ๋„์ถœ\n์‚ฌ๋‚ด ๊ฐ•์‚ฌ ์ œ๋„ ์–‘์„ฑ ๋ฐ ์ฝ˜ํ…์ธ  ๊ธฐํš ๋‹จ๊ณ„', status: 'IN_PROGRESS' as const, priority: 'HIGH' as const, section: 'HR', tag: 'Growth', taskType: 'ํ”„๋กœ์ ํŠธ', progress: 20, issueNote: '[5.28] ์‚ฌ๋‚ด ๊ฐ•์‚ฌ ํ’€ ํ™•๋ณด ๋ฐ ๋ณด์ƒ์•ˆ ๊ฒ€ํ† ', }, { title: '๊ทธ๋ฃน ํ‘œ์ค€ ์ทจ์—…๊ทœ์น™ ๊ฐœ์ •์•ˆ (HRM)', description: '์œ ์—ฐ๊ทผ๋ฌด์ œ ๋ฐ ๊ทผํƒœ ๊ด€๋ฆฌ ํ”„๋กœ์„ธ์Šค ๊ณ ๋„ํ™”\n๋…ธ์‚ฌํ˜‘์˜ํšŒ ์•ˆ๊ฑด ์กฐ์œจ ๋ฐ ๊ทผ๋กœ์กฐ๊ฑด ๊ฐœ์„ ์•ˆ ๋ฐ˜์˜', status: 'IN_PROGRESS' as const, priority: 'HIGH' as const, section: 'HR', tag: 'Policy', taskType: 'ํ”„๋กœ์ ํŠธ', progress: 40, issueNote: '[5.28] ๊ฐ€์กฑ์‚ฌ ๊ฐ„ ํ”ผ๋“œ๋ฐฑ ์ด๊ฒฌ ์กฐ์œจ ์ง„ํ–‰', }, { title: '์ƒ๋ฐ˜๊ธฐ ํ‰๊ฐ€ ์ง€ํ‘œ(KPI) ๋ณด์™„', description: '1๋ถ„๊ธฐ ํ”ผ๋“œ๋ฐฑ ๊ธฐ๋ฐ˜ ๋ถ€์„œ๋ณ„ KPI ์ •๋ ฌ\n์ƒ๋ฐ˜๊ธฐ ์—…์  ํ‰๊ฐ€ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ ๊ธฐํš', status: 'IN_PROGRESS' as const, priority: 'MEDIUM' as const, section: 'HR', tag: 'Performance', taskType: '์ƒ์‹œ์—…๋ฌด', progress: 70, issueNote: null, }, { title: '๊ฐ€์กฑ์‚ฌ ์‹œ๋„ˆ์ง€ ์กฐ์ง๋ฌธํ™” ์บ ํŽ˜์ธ', description: '์ž„์ง์› ๋งŒ์กฑ๋„ ์กฐ์‚ฌ(Engagement Survey) ์„ค๊ณ„', status: 'TODO' as const, priority: 'LOW' as const, section: 'HR', tag: 'Culture', taskType: 'ํ”„๋กœ์ ํŠธ', progress: 0, issueNote: null, }, ]; // โ”€โ”€โ”€ ์šด์˜๊ด€๋ฆฌ ๋ถ€๋ฌธ ์—…๋ฌด โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€ const opsTasks = [ { title: 'ๅ…จ์‚ฌ IT์ž์‚ฐ ์ˆ˜๋ช…์ฃผ๊ธฐ ํ‘œ์ค€ํ™” ๊ตฌ์ถ•', description: '์ž์‚ฐ ์ „์ˆ˜์กฐ์‚ฌ ๋ฐ์ดํ„ฐ ๊ธฐ๋ฐ˜ ๋ถˆ์šฉ ๊ธฐ์ค€ ์ •๋ฆฝ\n๋ผ์ด์„ ์Šค ์ตœ์ ํ™”๋ฅผ ํ†ตํ•œ ๋น„์šฉ ์ ˆ๊ฐ์•ˆ ๋„์ถœ', status: 'IN_PROGRESS' as const, priority: 'HIGH' as const, section: '์šด์˜๊ด€๋ฆฌ', tag: 'Asset', taskType: 'ํ”„๋กœ์ ํŠธ', progress: 60, issueNote: null, }, { title: '๊ธฐ์ˆ ์„ผํ„ฐ 2F ์„ธ๋ฏธ๋‚˜๋ฃธ ๋ธŒ๋žœ๋”ฉ ๊ธฐํš', description: '๋‹ค๋ชฉ์  ๊ต์œก ๊ณต๊ฐ„ ํ™œ์šฉ์„ ์œ„ํ•œ ์šด์˜ ๋งค๋‰ด์–ผ ์ˆ˜๋ฆฝ\n๊ณต๊ฐ„ ์•„์ด๋ดํ‹ฐํ‹ฐ ๋ฐ˜์˜ ์‚ฌ์ธ๋ฌผ(Signage) ๊ธฐํš', status: 'REVIEW' as const, priority: 'MEDIUM' as const, section: '์šด์˜๊ด€๋ฆฌ', tag: 'Space', taskType: 'ํ”„๋กœ์ ํŠธ', progress: 80, issueNote: null, }, { title: '์ค‘๋Œ€์žฌํ•ด๋ฒ• ๋Œ€์‘ ์•ˆ์ „๋ณด๊ฑด ๋งค๋‰ด์–ผ ์ •๋น„', description: 'ํ˜„์žฅ ์ ๊ฒ€ ๊ธฐ๋ฐ˜ ์†Œ๋ฐฉ ๋ฐ MSDS ๊ด€๋ฆฌ ์ฒด๊ณ„ ๋ณด์™„\n์‚ฌ๋‚ด ์•ˆ์ „์‚ฌ๊ณ  ์˜ˆ๋ฐฉ ๊ฐ€์ด๋“œ๋ผ์ธ ํ‘œ์ค€ํ™” ๊ธฐํš', status: 'IN_PROGRESS' as const, priority: 'HIGH' as const, section: '์šด์˜๊ด€๋ฆฌ', tag: 'Safety', taskType: '์ƒ์‹œ์—…๋ฌด', progress: 30, issueNote: null, }, { title: '๊ณต์šฉ ๊ณต๊ฐ„ ์ธํ”„๋ผ ๊ฐœ์„ ', description: '๊ธฐ์ˆ ์„ผํ„ฐ ๋กœ๋น„ ๋ฐ ๋ผ์šด์ง€ ํ™˜๊ฒฝ ์ •๋น„ ๊ธฐํš', status: 'TODO' as const, priority: 'LOW' as const, section: '์šด์˜๊ด€๋ฆฌ', tag: 'Environment', taskType: 'ํ”„๋กœ์ ํŠธ', progress: 0, issueNote: null, }, ]; for (const t of [...hrTasks, ...opsTasks]) { await prisma.task.create({ data: { ...t, quarter: '2026-Q2', category: t.section, creatorId: admin.id, assigneeId: member.id, }, }); } console.log(`โœ… Tasks created: ${hrTasks.length + opsTasks.length}๊ฐœ`); console.log('๐ŸŽ‰ Seeding complete!'); } main().catch(console.error).finally(() => prisma.$disconnect());