// This is your Prisma schema file, // learn more about it in the docs: https://pris.ly/d/prisma-schema generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } // Modelo de Usuario para autenticación model User { id String @id @default(cuid()) email String @unique password String role UserRole createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // Relaciones teacher Teacher? student Student? @@map("users") } enum UserRole { ADMIN TEACHER STUDENT } // Modelo de Periodo Académico model Period { id String @id @default(cuid()) name String startDate DateTime endDate DateTime isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // Relaciones classes Class[] partials Partial[] @@map("periods") } // Modelo de Parciales model Partial { id String @id @default(cuid()) name String periodId String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // Relaciones period Period @relation(fields: [periodId], references: [id]) @@map("partials") } // Modelo de Clases (Materias) model Class { id String @id @default(cuid()) name String code String @unique description String? periodId String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // Relaciones period Period @relation(fields: [periodId], references: [id]) sections Section[] @@map("classes") } // Modelo de Secciones (Paralelos) model Section { id String @id @default(cuid()) name String classId String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // Relaciones class Class @relation(fields: [classId], references: [id]) teacherAssignments TeacherAssignment[] studentEnrollments StudentEnrollment[] attendances Attendance[] @@map("sections") } // Modelo de Profesores model Teacher { id String @id @default(cuid()) userId String @unique firstName String lastName String cedula String @unique email String @unique phone String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // Relaciones user User @relation(fields: [userId], references: [id]) assignments TeacherAssignment[] @@map("teachers") } // Modelo de Estudiantes model Student { id String @id @default(cuid()) userId String @unique firstName String lastName String cedula String @unique email String @unique phone String admissionNumber String @unique isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt deletedAt DateTime? // Relaciones user User @relation(fields: [userId], references: [id]) enrollments StudentEnrollment[] attendances Attendance[] @@map("students") } // Tabla de asignación de profesores a secciones model TeacherAssignment { id String @id @default(cuid()) teacherId String sectionId String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // Relaciones teacher Teacher @relation(fields: [teacherId], references: [id]) section Section @relation(fields: [sectionId], references: [id]) @@unique([teacherId, sectionId]) @@map("teacher_assignments") } // Tabla de inscripción de estudiantes a secciones model StudentEnrollment { id String @id @default(cuid()) studentId String sectionId String isActive Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // Relaciones student Student @relation(fields: [studentId], references: [id]) section Section @relation(fields: [sectionId], references: [id]) @@unique([studentId, sectionId]) @@map("student_enrollments") } // Modelo de Asistencia model Attendance { id String @id @default(cuid()) studentId String sectionId String date DateTime @db.Date status AttendanceStatus reason String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt // Relaciones student Student @relation(fields: [studentId], references: [id]) section Section @relation(fields: [sectionId], references: [id]) @@unique([studentId, sectionId, date]) @@map("attendances") } enum AttendanceStatus { PRESENT ABSENT JUSTIFIED }