import { PrismaClient } from '../lib/generated/prisma/client'; import bcrypt from 'bcryptjs'; const prisma = new PrismaClient(); async function main() { console.log('๐ŸŒฑ ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹œ์ž‘...'); // ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์‚ญ์ œ (์ˆœ์„œ ์ค‘์š”: ์™ธ๋ž˜ํ‚ค ๊ด€๊ณ„ ๊ณ ๋ ค) console.log('๐Ÿ—‘๏ธ ๊ธฐ์กด ๋ฐ์ดํ„ฐ ์‚ญ์ œ ์ค‘...'); await prisma.userLecture.deleteMany(); await prisma.lecture.deleteMany(); await prisma.curriculum.deleteMany(); await prisma.user.deleteMany(); // ๋น„๋ฐ€๋ฒˆํ˜ธ ํ•ด์‹œ (๊ธฐ๋ณธ ๋น„๋ฐ€๋ฒˆํ˜ธ: password123) const hashedPassword = await bcrypt.hash('password123', 10); // 1. ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ƒ์„ฑ console.log('๐Ÿ‘ฅ ์‚ฌ์šฉ์ž ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ค‘...'); const users = await prisma.user.createMany({ data: [ // ์šด์˜์ž { email: 'park@example.com', name: '๋ฐ•๋ฏผ์ˆ˜', password: hashedPassword, role: 'ADMIN', isActive: true }, { email: 'oh@example.com', name: '์˜ค์ค€ํ˜', password: hashedPassword, role: 'ADMIN', isActive: true }, { email: 'kwon@example.com', name: '๊ถŒํƒœ์˜', password: hashedPassword, role: 'ADMIN', isActive: true }, // ๊ฐ•์‚ฌ { email: 'kim@example.com', name: '๊น€์ฒ ์ˆ˜', password: hashedPassword, role: 'INSTRUCTOR', isActive: true }, { email: 'jung@example.com', name: '์ •๋Œ€ํ˜„', password: hashedPassword, role: 'INSTRUCTOR', isActive: true }, { email: 'lim@example.com', name: '์ž„์ˆ˜์ง„', password: hashedPassword, role: 'INSTRUCTOR', isActive: true }, { email: 'shin@example.com', name: '์‹ ๋™์šฑ', password: hashedPassword, role: 'INSTRUCTOR', isActive: true }, { email: 'jeon@example.com', name: '์ „ํ˜œ์ง„', password: hashedPassword, role: 'INSTRUCTOR', isActive: true }, // ํ•™์Šต์ž { email: 'hong@example.com', name: 'ํ™๊ธธ๋™', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'lee@example.com', name: '์ด์˜ํฌ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'choi@example.com', name: '์ตœ์ง€์˜', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'kang@example.com', name: '๊ฐ•๋ฏธ์˜', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'yoon@example.com', name: '์œค์„ฑํ˜ธ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'han@example.com', name: 'ํ•œ์ง€ํ›ˆ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'song@example.com', name: '์†ก๋ฏผ๊ฒฝ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'ryu@example.com', name: '๋ฅ˜ํ˜„์šฐ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'cho@example.com', name: '์กฐ์€์„œ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'bae@example.com', name: '๋ฐฐ์„ฑ๋ฏผ', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'namgung@example.com', name: '๋‚จ๊ถ์ค€', password: hashedPassword, role: 'STUDENT', isActive: true }, { email: 'seo@example.com', name: '์„œ์•„๋ฆ„', password: hashedPassword, role: 'STUDENT', isActive: true }, ], }); console.log(`โœ… ${users.count}๋ช…์˜ ์‚ฌ์šฉ์ž ์ƒ์„ฑ ์™„๋ฃŒ`); // ์‚ฌ์šฉ์ž ID ์กฐํšŒ (๊ฐ•์‚ฌ์™€ ๋“ฑ๋ก์ž๋กœ ์‚ฌ์šฉ) const instructorKim = await prisma.user.findUnique({ where: { email: 'kim@example.com' } }); const registrarLee = await prisma.user.findUnique({ where: { email: 'lee@example.com' } }); const registrarPark = await prisma.user.findUnique({ where: { email: 'park@example.com' } }); const registrarKim = await prisma.user.findUnique({ where: { email: 'kim@example.com' } }); if (!instructorKim || !registrarLee || !registrarPark || !registrarKim) { throw new Error('ํ•„์ˆ˜ ์‚ฌ์šฉ์ž๋ฅผ ์ฐพ์„ ์ˆ˜ ์—†์Šต๋‹ˆ๋‹ค.'); } // 2. ๊ต์œก ๊ณผ์ • ๋ฐ์ดํ„ฐ ์ƒ์„ฑ console.log('๐Ÿ“š ๊ต์œก ๊ณผ์ • ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ค‘...'); const curriculum1 = await prisma.curriculum.create({ data: { title: '๋ฐฉ์‚ฌ์„  ์ ์šฉ', thumbnailImage: null, instructorId: instructorKim.id, }, }); const curriculum2 = await prisma.curriculum.create({ data: { title: '๋ฐฉ์‚ฌ์„  ์›๋ฆฌ', thumbnailImage: null, instructorId: instructorKim.id, }, }); console.log('โœ… ๊ต์œก ๊ณผ์ • ์ƒ์„ฑ ์™„๋ฃŒ'); // 3. ๊ฐ•์ขŒ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ console.log('๐Ÿ“– ๊ฐ•์ขŒ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์ค‘...'); const lectures = await prisma.lecture.createMany({ data: [ // ๋ฐฉ์‚ฌ์„  ์ ์šฉ ๊ฐ•์ขŒ๋“ค { title: '๋ฐฉ์‚ฌ์„  ๊ธฐ๋ณธ ์›๋ฆฌ', attachmentFile: 'ํŒŒ์ผ1.pdf', evaluationQuestionCount: 10, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์•ˆ์ „ ๊ด€๋ฆฌ', attachmentFile: 'ํŒŒ์ผ2.pdf', evaluationQuestionCount: 15, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์žฅ๋น„ ์‚ฌ์šฉ๋ฒ•', attachmentFile: 'ํŒŒ์ผ4.pdf', evaluationQuestionCount: 8, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ๋ณดํ˜ธ ์žฅ๋น„', attachmentFile: 'ํŒŒ์ผ6.pdf', evaluationQuestionCount: 14, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์‘์šฉ ์‹ค์Šต', attachmentFile: 'ํŒŒ์ผ7.pdf', evaluationQuestionCount: 16, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์˜๋ฃŒ ์‘์šฉ', attachmentFile: 'ํŒŒ์ผ9.pdf', evaluationQuestionCount: 18, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์‚ฐ์—… ์‘์šฉ', attachmentFile: 'ํŒŒ์ผ10.pdf', evaluationQuestionCount: 13, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ํ™˜๊ฒฝ ๋ชจ๋‹ˆํ„ฐ๋ง', attachmentFile: 'ํŒŒ์ผ12.pdf', evaluationQuestionCount: 9, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ๊ฒ€์‚ฌ ๊ธฐ๋ฒ•', attachmentFile: 'ํŒŒ์ผ13.pdf', evaluationQuestionCount: 19, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์ฒ˜๋ฆฌ ๊ธฐ์ˆ ', attachmentFile: 'ํŒŒ์ผ15.pdf', evaluationQuestionCount: 7, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ํ’ˆ์งˆ ๊ด€๋ฆฌ', attachmentFile: 'ํŒŒ์ผ16.pdf', evaluationQuestionCount: 22, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ๊ณ„์ธก๋ฒ•', attachmentFile: 'ํŒŒ์ผ18.pdf', evaluationQuestionCount: 24, curriculumId: curriculum1.id, registrantId: registrarLee.id }, { title: '๋ฐฉ์‚ฌ์„  ์•ˆ์ „ ๊ทœ์ •', attachmentFile: 'ํŒŒ์ผ19.pdf', evaluationQuestionCount: 5, curriculumId: curriculum1.id, registrantId: registrarLee.id }, // ๋ฐฉ์‚ฌ์„  ์›๋ฆฌ ๊ฐ•์ขŒ๋“ค { title: '๋ฐฉ์‚ฌ์„  ์ธก์ • ๊ธฐ๋ฒ•', attachmentFile: 'ํŒŒ์ผ3.pdf', evaluationQuestionCount: 12, curriculumId: curriculum2.id, registrantId: registrarKim.id }, { title: '๋ฐฉ์‚ฌ์„  ๋ฌผ๋ฆฌํ•™ ๊ธฐ์ดˆ', attachmentFile: 'ํŒŒ์ผ5.pdf', evaluationQuestionCount: 20, curriculumId: curriculum2.id, registrantId: registrarKim.id }, { title: '๋ฐฉ์‚ฌ์„  ํ™”ํ•™ ๋ฐ˜์‘', attachmentFile: 'ํŒŒ์ผ8.pdf', evaluationQuestionCount: 11, curriculumId: curriculum2.id, registrantId: registrarKim.id }, { title: '๋ฐฉ์‚ฌ์„  ์ƒ๋ฌผํ•™', attachmentFile: 'ํŒŒ์ผ11.pdf', evaluationQuestionCount: 17, curriculumId: curriculum2.id, registrantId: registrarKim.id }, { title: '๋ฐฉ์‚ฌ์„  ์—๋„ˆ์ง€ ์ „๋‹ฌ', attachmentFile: 'ํŒŒ์ผ14.pdf', evaluationQuestionCount: 21, curriculumId: curriculum2.id, registrantId: registrarKim.id }, { title: '๋ฐฉ์‚ฌ์„  ๋ฐฉ์–ด ์ด๋ก ', attachmentFile: 'ํŒŒ์ผ17.pdf', evaluationQuestionCount: 6, curriculumId: curriculum2.id, registrantId: registrarKim.id }, { title: '๋ฐฉ์‚ฌ์„  ํ•ต๋ฌผ๋ฆฌํ•™', attachmentFile: 'ํŒŒ์ผ20.pdf', evaluationQuestionCount: 25, curriculumId: curriculum2.id, registrantId: registrarKim.id }, ], }); console.log(`โœ… ${lectures.count}๊ฐœ์˜ ๊ฐ•์ขŒ ์ƒ์„ฑ ์™„๋ฃŒ`); console.log('๐ŸŽ‰ ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์™„๋ฃŒ!'); } main() .catch((e) => { console.error('โŒ ์‹œ๋“œ ๋ฐ์ดํ„ฐ ์ƒ์„ฑ ์‹คํŒจ:', e); process.exit(1); }) .finally(async () => { await prisma.$disconnect(); });