262 lines
6.9 KiB
Plaintext
262 lines
6.9 KiB
Plaintext
generator client {
|
|
provider = "prisma-client-js"
|
|
}
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
url = env("DATABASE_URL")
|
|
}
|
|
|
|
enum UserRoleSource {
|
|
AUTHENTIK
|
|
SYSTEM
|
|
}
|
|
|
|
model User {
|
|
id String @id @default(uuid())
|
|
authentikId String? @unique
|
|
authentikUserId String? @unique
|
|
authentikSubject String? @unique
|
|
username String? @unique
|
|
email String? @unique
|
|
name String?
|
|
picture String?
|
|
isActive Boolean @default(true)
|
|
deletedAt DateTime?
|
|
lastSeenAt DateTime?
|
|
lastSyncedAt DateTime?
|
|
syncStatus String?
|
|
storageQuota BigInt? @default(10737418240)
|
|
storageUsed BigInt? @default(0)
|
|
metadata Json?
|
|
lastGroupHash String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
|
|
userRoles UserRole[]
|
|
userPermissions UserPermission[]
|
|
mediaObjects MediaObject[]
|
|
auditLogs AuditLog[] @relation("AuditUser")
|
|
debtTransactionsCreated DebtTransaction[] @relation("createdBy")
|
|
debtGroupMemberships DebtGroupMember[]
|
|
}
|
|
|
|
model ServiceAccount {
|
|
id String @id @default(uuid())
|
|
client_id String @unique
|
|
client_secret_hash String
|
|
name String
|
|
role String
|
|
permissions Json
|
|
status String @default("ACTIVE")
|
|
metadata Json?
|
|
created_at DateTime @default(now())
|
|
updated_at DateTime @default(now())
|
|
deleted_at DateTime?
|
|
}
|
|
|
|
|
|
model Role {
|
|
id String @id @default(uuid())
|
|
code String @unique
|
|
name String
|
|
displayName String?
|
|
description String?
|
|
isDefault Boolean @default(false)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
|
|
permissions RolePermission[]
|
|
users UserRole[]
|
|
authGroupRoleMappings AuthGroupRoleMapping[]
|
|
}
|
|
|
|
model Permission {
|
|
id String @id @default(uuid())
|
|
code String @unique
|
|
name String
|
|
displayName String?
|
|
description String?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
|
|
roles RolePermission[]
|
|
users UserPermission[]
|
|
}
|
|
|
|
model RolePermission {
|
|
id String @id @default(uuid())
|
|
roleId String
|
|
permissionId String
|
|
createdAt DateTime @default(now())
|
|
|
|
role Role @relation(fields: [roleId], references: [id])
|
|
permission Permission @relation(fields: [permissionId], references: [id])
|
|
|
|
@@unique([roleId, permissionId])
|
|
@@index([roleId])
|
|
@@index([permissionId])
|
|
}
|
|
|
|
model UserPermission {
|
|
id String @id @default(uuid())
|
|
userId String
|
|
permissionId String
|
|
assignedBy String?
|
|
createdAt DateTime @default(now())
|
|
|
|
user User @relation(fields: [userId], references: [id])
|
|
permission Permission @relation(fields: [permissionId], references: [id])
|
|
|
|
@@unique([userId, permissionId])
|
|
@@index([userId])
|
|
@@index([permissionId])
|
|
}
|
|
|
|
model UserRole {
|
|
id String @id @default(uuid())
|
|
userId String
|
|
roleId String
|
|
source UserRoleSource @default(AUTHENTIK)
|
|
syncedAt DateTime @default(now())
|
|
createdAt DateTime @default(now())
|
|
|
|
user User @relation(fields: [userId], references: [id])
|
|
role Role @relation(fields: [roleId], references: [id])
|
|
|
|
@@unique([userId, roleId])
|
|
@@index([userId])
|
|
@@index([roleId])
|
|
}
|
|
|
|
model AuthGroupRoleMapping {
|
|
id String @id @default(uuid())
|
|
authGroup String
|
|
roleId String
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
|
|
role Role @relation(fields: [roleId], references: [id])
|
|
}
|
|
|
|
model AuditLog {
|
|
id String @id @default(uuid())
|
|
userId String?
|
|
action String
|
|
resource String?
|
|
resourceId String?
|
|
details Json?
|
|
createdAt DateTime @default(now())
|
|
|
|
user User? @relation("AuditUser", fields: [userId], references: [id])
|
|
|
|
@@index([userId])
|
|
@@index([action])
|
|
}
|
|
|
|
model ScheduledJob {
|
|
id String @id @default(uuid())
|
|
name String
|
|
payload Json?
|
|
cron String?
|
|
runAt DateTime?
|
|
status String @default("pending")
|
|
attempts Int @default(0)
|
|
lastRunAt DateTime?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
}
|
|
|
|
model MediaObject {
|
|
id String @id @default(uuid())
|
|
ownerUserId String?
|
|
storageKey String
|
|
filename String?
|
|
mimeType String?
|
|
size BigInt?
|
|
isPublic Boolean @default(false)
|
|
metadata Json?
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
|
|
owner User? @relation(fields: [ownerUserId], references: [id])
|
|
|
|
@@index([ownerUserId])
|
|
@@index([storageKey])
|
|
}
|
|
|
|
model Application {
|
|
id String @id @default(uuid())
|
|
code String @unique
|
|
name String
|
|
description String?
|
|
icon String?
|
|
url String?
|
|
applicationsClaim String @unique
|
|
isActive Boolean @default(true)
|
|
displayOrder Int @default(0)
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
}
|
|
|
|
// Debt models used by bot-debt module
|
|
model DebtGroup {
|
|
id String @id @default(uuid())
|
|
name String
|
|
ownerId String
|
|
publicId String @unique
|
|
createdAt DateTime @default(now())
|
|
updatedAt DateTime @default(now())
|
|
|
|
members DebtGroupMember[]
|
|
people DebtPerson[]
|
|
transactions DebtTransaction[]
|
|
}
|
|
|
|
model DebtGroupMember {
|
|
id String @id @default(uuid())
|
|
groupId String
|
|
userId String
|
|
createdAt DateTime @default(now())
|
|
|
|
group DebtGroup @relation(fields: [groupId], references: [id])
|
|
user User @relation(fields: [userId], references: [id])
|
|
|
|
@@unique([groupId, userId], name: "groupId_userId")
|
|
}
|
|
|
|
model DebtPerson {
|
|
id String @id @default(uuid())
|
|
groupId String
|
|
name String
|
|
isDeleted Boolean @default(false)
|
|
createdAt DateTime @default(now())
|
|
|
|
group DebtGroup @relation(fields: [groupId], references: [id])
|
|
fromTransactions DebtTransaction[] @relation("fromPerson")
|
|
toTransactions DebtTransaction[] @relation("toPerson")
|
|
}
|
|
|
|
model DebtTransaction {
|
|
id String @id @default(uuid())
|
|
groupId String
|
|
fromPersonId String
|
|
toPersonId String
|
|
amount BigInt
|
|
type String
|
|
description String?
|
|
transactionDate DateTime
|
|
createdByUserId String
|
|
requestId String?
|
|
createdAt DateTime @default(now())
|
|
|
|
group DebtGroup @relation(fields: [groupId], references: [id])
|
|
fromPerson DebtPerson @relation("fromPerson", fields: [fromPersonId], references: [id])
|
|
toPerson DebtPerson @relation("toPerson", fields: [toPersonId], references: [id])
|
|
createdByUser User @relation("createdBy", fields: [createdByUserId], references: [id])
|
|
|
|
@@index([groupId])
|
|
@@index([requestId])
|
|
}
|
|
|