| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- // 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
- }
|