generator client { provider = "prisma-client-js" } datasource db { provider = "postgresql" url = env("DATABASE_URL") } model User { id String @id @default(cuid()) email String @unique password String name String? role Role @default(ADMIN) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Client { id String @id @default(cuid()) name String slug String @unique apiKey String @unique @default(cuid()) isActive Boolean @default(true) semaphoreKey String? senderName String? @default("NFC-HUB") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt smsLogs SmsLog[] smsQueue SmsQueue[] } model SmsQueue { id String @id @default(cuid()) clientId String client Client @relation(fields: [clientId], references: [id]) studentName String studentId String parentPhone String event EventType timestamp DateTime message String? status SmsStatus @default(PENDING) attempts Int @default(0) lastError String? scheduledAt DateTime @default(now()) processedAt DateTime? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt smsLog SmsLog? } model SmsLog { id String @id @default(cuid()) clientId String client Client @relation(fields: [clientId], references: [id]) queueId String @unique queue SmsQueue @relation(fields: [queueId], references: [id]) phone String message String status LogStatus semaphoreId String? errorReason String? sentAt DateTime @default(now()) createdAt DateTime @default(now()) } enum Role { ADMIN VIEWER } enum EventType { time_in time_out } enum SmsStatus { PENDING PROCESSING SENT FAILED RETRYING } enum LogStatus { SUCCESS FAILED }