Files
RayLab-Core/prisma/schema.prisma
T
Rayyan Syahbani Hermanto 8a278281ce
Deploy / deploy (push) Successful in 47s
Fix Build Error
2026-09-07 23:44:40 +07:00

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])
}