+237
-13
@@ -1,6 +1,3 @@
|
||||
// Prisma schema
|
||||
// Basic User model for RayLab Core
|
||||
|
||||
generator client {
|
||||
provider = "prisma-client-js"
|
||||
}
|
||||
@@ -10,16 +7,38 @@ datasource db {
|
||||
url = env("DATABASE_URL")
|
||||
}
|
||||
|
||||
enum UserRoleSource {
|
||||
AUTHENTIK
|
||||
SYSTEM
|
||||
}
|
||||
|
||||
model User {
|
||||
id String @id @default(uuid())
|
||||
name String
|
||||
email String @unique
|
||||
password String
|
||||
status String @default("ACTIVE")
|
||||
metadata Json?
|
||||
created_at DateTime @default(now())
|
||||
updated_at DateTime @updatedAt
|
||||
deleted_at DateTime?
|
||||
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 {
|
||||
@@ -32,6 +51,211 @@ model ServiceAccount {
|
||||
status String @default("ACTIVE")
|
||||
metadata Json?
|
||||
created_at DateTime @default(now())
|
||||
updated_at DateTime @updatedAt
|
||||
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])
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user