Files
Valentin Romero 25d4ba6cc0 add bot wsp
2026-06-30 22:04:56 -03:00

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
}