160 lines
5.2 KiB
Plaintext
160 lines
5.2 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
/// Un ejemplo de modelo "User"
|
|
model User {
|
|
id String @id @default(cuid())
|
|
customId String?
|
|
name String
|
|
dni String?
|
|
phone String?
|
|
birth DateTime?
|
|
rfid String?
|
|
deleted DateTime?
|
|
role UserRole @default(USER)
|
|
profilePicture String?
|
|
profilePictureUpdatedAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
AccessLog AccessLog[]
|
|
invoices Invoice[]
|
|
tokens Token[]
|
|
assistantSessions Session[] @relation("AssistantSessions")
|
|
instructorSessions Session[] @relation("InstructorSessions")
|
|
presentAssistantsOnDates SessionDateSnapshot[] @relation("PresentAssistantsOnDate")
|
|
presentInstructorsOnDates SessionDateSnapshot[] @relation("PresentInstructorsOnDate")
|
|
SessionDateSnapshot SessionDateSnapshot[] @relation("SubstituteInstructorsOnDate")
|
|
}
|
|
|
|
/// Registro de acceso de un usuario
|
|
model AccessLog {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
direction LogDirection
|
|
timestamp DateTime @default(now())
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@index([userId, timestamp])
|
|
}
|
|
|
|
model Token {
|
|
id String @id @default(cuid())
|
|
userId String?
|
|
token String @unique
|
|
isActive Boolean @default(true)
|
|
redirectUrl String?
|
|
expiresAt DateTime
|
|
createdAt DateTime @default(now())
|
|
user User? @relation(fields: [userId], references: [id])
|
|
}
|
|
|
|
model Session {
|
|
id String @id @default(cuid())
|
|
customId String @unique
|
|
description String
|
|
type SessionType
|
|
startDate DateTime?
|
|
endDate DateTime?
|
|
isActive Boolean @default(true)
|
|
amount Float?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
invoices Invoice[]
|
|
dates SessionDateRange[]
|
|
SessionDateSnapshot SessionDateSnapshot[]
|
|
priceHistories SessionPriceHistory[]
|
|
assistants User[] @relation("AssistantSessions")
|
|
instructors User[] @relation("InstructorSessions")
|
|
}
|
|
|
|
model SessionPriceHistory {
|
|
id String @id @default(cuid())
|
|
sessionId String
|
|
amount Float
|
|
effectiveFrom DateTime
|
|
effectiveTo DateTime?
|
|
createdAt DateTime @default(now())
|
|
session Session @relation(fields: [sessionId], references: [id], onDelete: Cascade)
|
|
}
|
|
|
|
model SessionDateRange {
|
|
id String @id @default(cuid())
|
|
start DateTime
|
|
end DateTime
|
|
sessionId String
|
|
session Session @relation(fields: [sessionId], references: [id], onDelete: Cascade)
|
|
SessionDateSnapshot SessionDateSnapshot[]
|
|
}
|
|
|
|
model SessionDateSnapshot {
|
|
id String @id @default(cuid())
|
|
dateRangeId String
|
|
sessionId String
|
|
notes String?
|
|
isActive Boolean @default(true)
|
|
createdAt DateTime @default(now())
|
|
dateRange SessionDateRange @relation(fields: [dateRangeId], references: [id])
|
|
session Session @relation(fields: [sessionId], references: [id])
|
|
presentAssistants User[] @relation("PresentAssistantsOnDate")
|
|
presentInstructors User[] @relation("PresentInstructorsOnDate")
|
|
substituteInstructors User[] @relation("SubstituteInstructorsOnDate")
|
|
}
|
|
|
|
model Invoice {
|
|
id String @id @default(cuid())
|
|
userId String
|
|
sessionId String
|
|
base64Invoice String?
|
|
linkPayment String?
|
|
status InvoiceStatus @default(PENDING)
|
|
amount Float
|
|
dateInvoice DateTime
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @updatedAt
|
|
session Session @relation(fields: [sessionId], references: [id])
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@index([userId, dateInvoice])
|
|
@@index([sessionId, dateInvoice])
|
|
}
|
|
|
|
model SystemConfig {
|
|
id String @id @default(cuid())
|
|
sessionCleanupIntervalMinutes Int @default(30)
|
|
invoiceGenerationDayOfMonth Int @default(1)
|
|
tokenExpirationMinutes Int @default(30)
|
|
tokenCleanupIntervalMinutes Int @default(60)
|
|
profilePictureUpdateIntervalDays Int @default(2)
|
|
updatedAt DateTime @updatedAt
|
|
createdAt DateTime @default(now())
|
|
}
|
|
|
|
enum UserRole {
|
|
ADMIN
|
|
INSTRUCTOR
|
|
USER
|
|
GUEST
|
|
}
|
|
|
|
/// Dirección de un registro (INGRESO o EGRESO)
|
|
enum LogDirection {
|
|
INGRESS
|
|
EGRESS
|
|
}
|
|
|
|
enum SessionType {
|
|
RECURRING
|
|
ONE_TIME
|
|
}
|
|
|
|
enum InvoiceStatus {
|
|
PENDING
|
|
PAID
|
|
CANCELED
|
|
}
|