"use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __generator = (this && this.__generator) || function (thisArg, body) { var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype); return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g; function verb(n) { return function (v) { return step([n, v]); }; } function step(op) { if (f) throw new TypeError("Generator is already executing."); while (g && (g = 0, op[0] && (_ = 0)), _) try { if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t; if (y = 0, t) op = [op[0] & 2, t.value]; switch (op[0]) { case 0: case 1: t = op; break; case 4: _.label++; return { value: op[1], done: false }; case 5: _.label++; y = op[1]; op = [0]; continue; case 7: op = _.ops.pop(); _.trys.pop(); continue; default: if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; } if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; } if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; } if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; } if (t[2]) _.ops.pop(); _.trys.pop(); continue; } op = body.call(thisArg, _); } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; } if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true }; } }; Object.defineProperty(exports, "__esModule", { value: true }); exports.seedDatabase = seedDatabase; var index_1 = require("./index"); var schema_1 = require("./schema"); var bcryptjs_1 = require("bcryptjs"); function seedDatabase() { return __awaiter(this, void 0, void 0, function () { var hashedPassword, admin, period, partial1, partial2, class1, class2, section1A, section1B, section2A, teacherPassword, teacher, studentPassword, students, i, student, _i, _a, student, _b, _c, student, error_1; return __generator(this, function (_d) { switch (_d.label) { case 0: _d.trys.push([0, 27, , 28]); console.log('🌱 Iniciando seed de la base de datos...'); return [4 /*yield*/, bcryptjs_1.default.hash('admin123', 10)]; case 1: hashedPassword = _d.sent(); return [4 /*yield*/, index_1.db.insert(schema_1.users).values({ email: 'admin@universidad.edu', password: hashedPassword, firstName: 'Administrador', lastName: 'Sistema', cedula: '1234567890', phone: '0999999999', role: 'admin', }).returning()]; case 2: admin = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.periods).values({ name: '2024-2025', startDate: '2024-09-01', endDate: '2025-06-30', }).returning()]; case 3: period = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.partials).values({ name: 'Primer Parcial', periodId: period.id, startDate: '2024-09-01', endDate: '2024-11-15', }).returning()]; case 4: partial1 = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.partials).values({ name: 'Segundo Parcial', periodId: period.id, startDate: '2024-11-16', endDate: '2025-02-15', }).returning()]; case 5: partial2 = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.classes).values({ name: 'Programación I', code: 'PROG001', credits: 4, description: 'Introducción a la programación con fundamentos básicos', }).returning()]; case 6: class1 = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.classes).values({ name: 'Matemáticas I', code: 'MATH001', credits: 3, description: 'Fundamentos matemáticos para ingeniería', }).returning()]; case 7: class2 = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.sections).values({ name: 'A', classId: class1.id, maxStudents: 30, }).returning()]; case 8: section1A = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.sections).values({ name: 'B', classId: class1.id, maxStudents: 25, }).returning()]; case 9: section1B = (_d.sent())[0]; return [4 /*yield*/, index_1.db.insert(schema_1.sections).values({ name: 'A', classId: class2.id, maxStudents: 35, }).returning()]; case 10: section2A = (_d.sent())[0]; return [4 /*yield*/, bcryptjs_1.default.hash('teacher123', 10)]; case 11: teacherPassword = _d.sent(); return [4 /*yield*/, index_1.db.insert(schema_1.users).values({ email: 'profesor@universidad.edu', password: teacherPassword, firstName: 'Juan', lastName: 'Pérez', cedula: '0987654321', phone: '0988888888', role: 'teacher', }).returning()]; case 12: teacher = (_d.sent())[0]; // Asignar profesor a clases return [4 /*yield*/, index_1.db.insert(schema_1.teacherAssignments).values([ { teacherId: teacher.id, classId: class1.id, sectionId: section1A.id, }, { teacherId: teacher.id, classId: class1.id, sectionId: section1B.id, }, ])]; case 13: // Asignar profesor a clases _d.sent(); return [4 /*yield*/, bcryptjs_1.default.hash('student123', 10)]; case 14: studentPassword = _d.sent(); students = []; i = 1; _d.label = 15; case 15: if (!(i <= 5)) return [3 /*break*/, 18]; return [4 /*yield*/, index_1.db.insert(schema_1.users).values({ email: "estudiante".concat(i, "@universidad.edu"), password: studentPassword, firstName: "Estudiante", lastName: "".concat(i), cedula: "123456789".concat(i), phone: "099888888".concat(i), role: 'student', admissionNumber: "2024-".concat(String(i).padStart(4, '0')), }).returning()]; case 16: student = (_d.sent())[0]; students.push(student); _d.label = 17; case 17: i++; return [3 /*break*/, 15]; case 18: _i = 0, _a = students.slice(0, 3); _d.label = 19; case 19: if (!(_i < _a.length)) return [3 /*break*/, 22]; student = _a[_i]; return [4 /*yield*/, index_1.db.insert(schema_1.studentEnrollments).values({ studentId: student.id, classId: class1.id, sectionId: section1A.id, })]; case 20: _d.sent(); _d.label = 21; case 21: _i++; return [3 /*break*/, 19]; case 22: _b = 0, _c = students.slice(3, 5); _d.label = 23; case 23: if (!(_b < _c.length)) return [3 /*break*/, 26]; student = _c[_b]; return [4 /*yield*/, index_1.db.insert(schema_1.studentEnrollments).values({ studentId: student.id, classId: class1.id, sectionId: section1B.id, })]; case 24: _d.sent(); _d.label = 25; case 25: _b++; return [3 /*break*/, 23]; case 26: console.log('✅ Seed completado exitosamente!'); console.log('👤 Admin: admin@universidad.edu / admin123'); console.log('👨‍🏫 Profesor: profesor@universidad.edu / teacher123'); console.log('👨‍🎓 Estudiantes: estudiante1@universidad.edu / student123 (hasta estudiante5)'); return [3 /*break*/, 28]; case 27: error_1 = _d.sent(); console.error('❌ Error durante el seed:', error_1); throw error_1; case 28: return [2 /*return*/]; } }); }); } if (require.main === module) { seedDatabase() .then(function () { return process.exit(0); }) .catch(function () { return process.exit(1); }); }