95 lines
2.4 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "sqlite"
url = env("DATABASE_URL")
}
enum Role {
CITIZEN
STAFF
ADMIN
}
enum ApplicationStatus {
PENDING
UNDER_REVIEW
APPROVED
REJECTED
PENDING_DOCUMENTS
COMPLETED
}
model User {
id String @id @default(cuid())
email String @unique
firstName String
lastName String
passwordHash String
role Role @default(CITIZEN)
failedLoginAttempts Int @default(0)
lockoutUntil DateTime?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
newsArticles NewsArticle[]
applications Application[]
auditLogs AuditLog[]
}
model Application {
id String @id @default(cuid())
user User @relation(fields: [userId], references: [id])
userId String
type String
status ApplicationStatus @default(PENDING)
data Json
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
documents Document[]
assignments ServiceAssignment[]
}
model Document {
id String @id @default(cuid())
application Application @relation(fields: [applicationId], references: [id])
applicationId String
filename String
url String
status String
uploadedAt DateTime @default(now())
}
model NewsArticle {
id String @id @default(cuid())
title String
slug String @unique
content String
published Boolean @default(false)
publishedAt DateTime?
author User? @relation(fields: [authorId], references: [id])
authorId String?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ServiceAssignment {
id String @id @default(cuid())
application Application @relation(fields: [applicationId], references: [id])
applicationId String
staff User @relation(fields: [staffId], references: [id])
staffId String
notes String?
createdAt DateTime @default(now())
}
model AuditLog {
id String @id @default(cuid())
actor User? @relation(fields: [actorId], references: [id])
actorId String?
action String
details Json?
createdAt DateTime @default(now())
}