|
|
@@ -0,0 +1,214 @@
|
|
|
+"use strict";
|
|
|
+Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
+exports.attendanceRelations = exports.studentEnrollmentsRelations = exports.teacherAssignmentsRelations = exports.sectionsRelations = exports.classesRelations = exports.partialsRelations = exports.periodsRelations = exports.usersRelations = exports.attendance = exports.studentEnrollments = exports.teacherAssignments = exports.sections = exports.classes = exports.partials = exports.periods = exports.users = exports.like = exports.desc = exports.lte = exports.gte = exports.ne = exports.and = exports.eq = void 0;
|
|
|
+var pg_core_1 = require("drizzle-orm/pg-core");
|
|
|
+var drizzle_orm_1 = require("drizzle-orm");
|
|
|
+var drizzle_orm_2 = require("drizzle-orm");
|
|
|
+Object.defineProperty(exports, "eq", { enumerable: true, get: function () { return drizzle_orm_2.eq; } });
|
|
|
+Object.defineProperty(exports, "and", { enumerable: true, get: function () { return drizzle_orm_2.and; } });
|
|
|
+Object.defineProperty(exports, "ne", { enumerable: true, get: function () { return drizzle_orm_2.ne; } });
|
|
|
+Object.defineProperty(exports, "gte", { enumerable: true, get: function () { return drizzle_orm_2.gte; } });
|
|
|
+Object.defineProperty(exports, "lte", { enumerable: true, get: function () { return drizzle_orm_2.lte; } });
|
|
|
+Object.defineProperty(exports, "desc", { enumerable: true, get: function () { return drizzle_orm_2.desc; } });
|
|
|
+Object.defineProperty(exports, "like", { enumerable: true, get: function () { return drizzle_orm_2.like; } });
|
|
|
+// Tabla de usuarios (administradores, docentes, estudiantes)
|
|
|
+exports.users = (0, pg_core_1.pgTable)('users', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ email: (0, pg_core_1.varchar)('email', { length: 255 }).notNull().unique(),
|
|
|
+ password: (0, pg_core_1.text)('password').notNull(),
|
|
|
+ firstName: (0, pg_core_1.varchar)('first_name', { length: 100 }).notNull(),
|
|
|
+ lastName: (0, pg_core_1.varchar)('last_name', { length: 100 }).notNull(),
|
|
|
+ cedula: (0, pg_core_1.varchar)('cedula', { length: 20 }).notNull().unique(),
|
|
|
+ phone: (0, pg_core_1.varchar)('phone', { length: 20 }),
|
|
|
+ role: (0, pg_core_1.varchar)('role', { length: 20 }).notNull(), // 'admin', 'teacher', 'student'
|
|
|
+ admissionNumber: (0, pg_core_1.varchar)('admission_number', { length: 50 }), // Solo para estudiantes
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de periodos
|
|
|
+exports.periods = (0, pg_core_1.pgTable)('periods', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ name: (0, pg_core_1.varchar)('name', { length: 100 }).notNull(),
|
|
|
+ startDate: (0, pg_core_1.date)('start_date').notNull(),
|
|
|
+ endDate: (0, pg_core_1.date)('end_date').notNull(),
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de parciales
|
|
|
+exports.partials = (0, pg_core_1.pgTable)('partials', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ name: (0, pg_core_1.varchar)('name', { length: 100 }).notNull(),
|
|
|
+ periodId: (0, pg_core_1.uuid)('period_id').references(function () { return exports.periods.id; }),
|
|
|
+ startDate: (0, pg_core_1.date)('start_date').notNull(),
|
|
|
+ endDate: (0, pg_core_1.date)('end_date').notNull(),
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de clases/materias
|
|
|
+exports.classes = (0, pg_core_1.pgTable)('classes', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ name: (0, pg_core_1.varchar)('name', { length: 100 }).notNull(),
|
|
|
+ code: (0, pg_core_1.varchar)('code', { length: 20 }).notNull().unique(),
|
|
|
+ credits: (0, pg_core_1.integer)('credits').notNull(),
|
|
|
+ description: (0, pg_core_1.text)('description'),
|
|
|
+ periodId: (0, pg_core_1.uuid)('period_id').references(function () { return exports.periods.id; }),
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de paralelos/secciones
|
|
|
+exports.sections = (0, pg_core_1.pgTable)('sections', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ name: (0, pg_core_1.varchar)('name', { length: 50 }).notNull(),
|
|
|
+ classId: (0, pg_core_1.uuid)('class_id').references(function () { return exports.classes.id; }),
|
|
|
+ maxStudents: (0, pg_core_1.integer)('max_students').notNull(),
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+ updatedAt: (0, pg_core_1.timestamp)('updated_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de asignaciones de docentes a clases/secciones
|
|
|
+exports.teacherAssignments = (0, pg_core_1.pgTable)('teacher_assignments', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ teacherId: (0, pg_core_1.uuid)('teacher_id').references(function () { return exports.users.id; }),
|
|
|
+ classId: (0, pg_core_1.uuid)('class_id').references(function () { return exports.classes.id; }),
|
|
|
+ sectionId: (0, pg_core_1.uuid)('section_id').references(function () { return exports.sections.id; }),
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de inscripciones de estudiantes
|
|
|
+exports.studentEnrollments = (0, pg_core_1.pgTable)('student_enrollments', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ studentId: (0, pg_core_1.uuid)('student_id').references(function () { return exports.users.id; }),
|
|
|
+ classId: (0, pg_core_1.uuid)('class_id').references(function () { return exports.classes.id; }),
|
|
|
+ sectionId: (0, pg_core_1.uuid)('section_id').references(function () { return exports.sections.id; }),
|
|
|
+ isActive: (0, pg_core_1.boolean)('is_active').default(true),
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+});
|
|
|
+// Tabla de asistencia
|
|
|
+exports.attendance = (0, pg_core_1.pgTable)('attendance', {
|
|
|
+ id: (0, pg_core_1.uuid)('id').defaultRandom().primaryKey(),
|
|
|
+ studentId: (0, pg_core_1.uuid)('student_id').references(function () { return exports.users.id; }),
|
|
|
+ classId: (0, pg_core_1.uuid)('class_id').references(function () { return exports.classes.id; }),
|
|
|
+ sectionId: (0, pg_core_1.uuid)('section_id').references(function () { return exports.sections.id; }),
|
|
|
+ teacherId: (0, pg_core_1.uuid)('teacher_id').references(function () { return exports.users.id; }),
|
|
|
+ partialId: (0, pg_core_1.uuid)('partial_id').references(function () { return exports.partials.id; }),
|
|
|
+ date: (0, pg_core_1.date)('date').notNull(),
|
|
|
+ status: (0, pg_core_1.varchar)('status', { length: 20 }).notNull(), // 'present', 'absent', 'justified'
|
|
|
+ reason: (0, pg_core_1.text)('reason'), // Motivo de falta o justificación
|
|
|
+ createdAt: (0, pg_core_1.timestamp)('created_at').defaultNow(),
|
|
|
+});
|
|
|
+// Relaciones
|
|
|
+exports.usersRelations = (0, drizzle_orm_1.relations)(exports.users, function (_a) {
|
|
|
+ var many = _a.many;
|
|
|
+ return ({
|
|
|
+ teacherAssignments: many(exports.teacherAssignments),
|
|
|
+ studentEnrollments: many(exports.studentEnrollments),
|
|
|
+ attendanceAsStudent: many(exports.attendance, { relationName: 'studentAttendance' }),
|
|
|
+ attendanceAsTeacher: many(exports.attendance, { relationName: 'teacherAttendance' }),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.periodsRelations = (0, drizzle_orm_1.relations)(exports.periods, function (_a) {
|
|
|
+ var many = _a.many;
|
|
|
+ return ({
|
|
|
+ partials: many(exports.partials),
|
|
|
+ sections: many(exports.sections),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.partialsRelations = (0, drizzle_orm_1.relations)(exports.partials, function (_a) {
|
|
|
+ var one = _a.one;
|
|
|
+ return ({
|
|
|
+ period: one(exports.periods, {
|
|
|
+ fields: [exports.partials.periodId],
|
|
|
+ references: [exports.periods.id],
|
|
|
+ }),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.classesRelations = (0, drizzle_orm_1.relations)(exports.classes, function (_a) {
|
|
|
+ var one = _a.one, many = _a.many;
|
|
|
+ return ({
|
|
|
+ period: one(exports.periods, {
|
|
|
+ fields: [exports.classes.periodId],
|
|
|
+ references: [exports.periods.id],
|
|
|
+ }),
|
|
|
+ sections: many(exports.sections),
|
|
|
+ teacherAssignments: many(exports.teacherAssignments),
|
|
|
+ studentEnrollments: many(exports.studentEnrollments),
|
|
|
+ attendance: many(exports.attendance),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.sectionsRelations = (0, drizzle_orm_1.relations)(exports.sections, function (_a) {
|
|
|
+ var one = _a.one, many = _a.many;
|
|
|
+ return ({
|
|
|
+ class: one(exports.classes, {
|
|
|
+ fields: [exports.sections.classId],
|
|
|
+ references: [exports.classes.id],
|
|
|
+ }),
|
|
|
+ teacherAssignments: many(exports.teacherAssignments),
|
|
|
+ studentEnrollments: many(exports.studentEnrollments),
|
|
|
+ attendance: many(exports.attendance),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.teacherAssignmentsRelations = (0, drizzle_orm_1.relations)(exports.teacherAssignments, function (_a) {
|
|
|
+ var one = _a.one;
|
|
|
+ return ({
|
|
|
+ teacher: one(exports.users, {
|
|
|
+ fields: [exports.teacherAssignments.teacherId],
|
|
|
+ references: [exports.users.id],
|
|
|
+ }),
|
|
|
+ class: one(exports.classes, {
|
|
|
+ fields: [exports.teacherAssignments.classId],
|
|
|
+ references: [exports.classes.id],
|
|
|
+ }),
|
|
|
+ section: one(exports.sections, {
|
|
|
+ fields: [exports.teacherAssignments.sectionId],
|
|
|
+ references: [exports.sections.id],
|
|
|
+ }),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.studentEnrollmentsRelations = (0, drizzle_orm_1.relations)(exports.studentEnrollments, function (_a) {
|
|
|
+ var one = _a.one;
|
|
|
+ return ({
|
|
|
+ student: one(exports.users, {
|
|
|
+ fields: [exports.studentEnrollments.studentId],
|
|
|
+ references: [exports.users.id],
|
|
|
+ }),
|
|
|
+ class: one(exports.classes, {
|
|
|
+ fields: [exports.studentEnrollments.classId],
|
|
|
+ references: [exports.classes.id],
|
|
|
+ }),
|
|
|
+ section: one(exports.sections, {
|
|
|
+ fields: [exports.studentEnrollments.sectionId],
|
|
|
+ references: [exports.sections.id],
|
|
|
+ }),
|
|
|
+ });
|
|
|
+});
|
|
|
+exports.attendanceRelations = (0, drizzle_orm_1.relations)(exports.attendance, function (_a) {
|
|
|
+ var one = _a.one;
|
|
|
+ return ({
|
|
|
+ student: one(exports.users, {
|
|
|
+ fields: [exports.attendance.studentId],
|
|
|
+ references: [exports.users.id],
|
|
|
+ relationName: 'studentAttendance',
|
|
|
+ }),
|
|
|
+ teacher: one(exports.users, {
|
|
|
+ fields: [exports.attendance.teacherId],
|
|
|
+ references: [exports.users.id],
|
|
|
+ relationName: 'teacherAttendance',
|
|
|
+ }),
|
|
|
+ class: one(exports.classes, {
|
|
|
+ fields: [exports.attendance.classId],
|
|
|
+ references: [exports.classes.id],
|
|
|
+ }),
|
|
|
+ section: one(exports.sections, {
|
|
|
+ fields: [exports.attendance.sectionId],
|
|
|
+ references: [exports.sections.id],
|
|
|
+ }),
|
|
|
+ partial: one(exports.partials, {
|
|
|
+ fields: [exports.attendance.partialId],
|
|
|
+ references: [exports.partials.id],
|
|
|
+ }),
|
|
|
+ });
|
|
|
+});
|