2025-09-27 02:44:50 -04:00
|
|
|
generator client {
|
2025-09-27 18:47:34 -04:00
|
|
|
provider = "prisma-client-js"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
generator zod {
|
2025-09-27 04:52:32 -04:00
|
|
|
provider = "prisma-zod-generator"
|
2025-09-27 02:44:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
datasource db {
|
|
|
|
|
provider = "postgresql"
|
|
|
|
|
url = env("DATABASE_URL")
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model Instance {
|
2025-09-27 19:13:22 -04:00
|
|
|
id String @id @default(uuid(7))
|
|
|
|
|
name String
|
|
|
|
|
icon String?
|
|
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
|
|
|
|
Role Role[]
|
|
|
|
|
Category Category[]
|
2025-09-27 02:44:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model User {
|
|
|
|
|
id String @id @default(uuid(7))
|
|
|
|
|
username String
|
|
|
|
|
nickname String?
|
|
|
|
|
bio String?
|
|
|
|
|
picture String?
|
|
|
|
|
banner String?
|
|
|
|
|
admin Boolean
|
|
|
|
|
status String // online/offline/dnd/idle/invis
|
2025-09-27 19:13:22 -04:00
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 02:44:50 -04:00
|
|
|
Role Role[]
|
|
|
|
|
UserAuth UserAuth?
|
|
|
|
|
Message Message[]
|
|
|
|
|
MessagePing MessagePing[]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model Role {
|
2025-09-27 19:13:22 -04:00
|
|
|
User User @relation(fields: [userId], references: [id])
|
|
|
|
|
userId String
|
|
|
|
|
Instance Instance @relation(fields: [instanceId], references: [id])
|
|
|
|
|
instanceId String
|
|
|
|
|
type String
|
|
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 02:44:50 -04:00
|
|
|
|
|
|
|
|
@@unique([userId, instanceId])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model UserAuth {
|
2025-09-27 19:13:22 -04:00
|
|
|
User User @relation(fields: [userId], references: [id])
|
|
|
|
|
userId String
|
|
|
|
|
password String // HASHED PASSWORD AS STRING USING SHA-256
|
|
|
|
|
token String? // current user token
|
|
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 02:44:50 -04:00
|
|
|
|
|
|
|
|
@@unique([userId])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model Category {
|
|
|
|
|
id String @id @default(uuid(7))
|
|
|
|
|
Instance Instance? @relation(fields: [instanceId], references: [id])
|
|
|
|
|
instanceId String?
|
|
|
|
|
name String
|
|
|
|
|
position Int
|
2025-09-27 19:13:22 -04:00
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 02:44:50 -04:00
|
|
|
Channel Channel[]
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model Channel {
|
2025-09-27 19:13:22 -04:00
|
|
|
id String @id @default(uuid(7))
|
2025-09-27 02:44:50 -04:00
|
|
|
type String
|
2025-09-27 19:13:22 -04:00
|
|
|
Category Category? @relation(fields: [categoryId], references: [id])
|
2025-09-27 02:44:50 -04:00
|
|
|
categoryId String?
|
|
|
|
|
name String
|
|
|
|
|
description String
|
2025-09-27 19:13:22 -04:00
|
|
|
pinnedId String?
|
|
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 02:44:50 -04:00
|
|
|
Message Message[]
|
2025-09-27 19:13:22 -04:00
|
|
|
ChannelPin ChannelPin?
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model ChannelPin {
|
|
|
|
|
messageId String @unique
|
|
|
|
|
channelId String @unique
|
|
|
|
|
|
|
|
|
|
Message Message @relation(fields: [messageId], references: [id])
|
|
|
|
|
Channel Channel @relation(fields: [channelId], references: [id])
|
|
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
|
|
|
|
|
@@unique([messageId, channelId])
|
2025-09-27 02:44:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model Message {
|
|
|
|
|
id String @id @default(uuid(7))
|
2025-09-27 14:53:15 -04:00
|
|
|
Channel Channel @relation(fields: [channelId], references: [id])
|
|
|
|
|
channelId String
|
|
|
|
|
User User @relation(fields: [userId], references: [id])
|
|
|
|
|
userId String
|
2025-09-27 03:13:33 -04:00
|
|
|
deleted Boolean
|
2025-09-28 05:58:29 -04:00
|
|
|
text String @db.VarChar(2000)
|
2025-09-27 19:13:22 -04:00
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 15:01:10 -04:00
|
|
|
replies Reply? @relation("MessageToReply")
|
|
|
|
|
repliedTo Reply? @relation("ReplyToMessage")
|
2025-09-27 02:44:50 -04:00
|
|
|
MessagePing MessagePing[]
|
2025-09-27 19:13:22 -04:00
|
|
|
ChannelPin ChannelPin?
|
2025-09-27 02:44:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model Reply {
|
2025-09-28 05:58:29 -04:00
|
|
|
message Message @relation("MessageToReply", fields: [messageId], references: [id]) //message text
|
2025-09-27 19:13:22 -04:00
|
|
|
messageId String @unique //message id of the reply
|
|
|
|
|
repliesTo Message @relation("ReplyToMessage", fields: [repliesToId], references: [id]) //message id that this message replies to
|
|
|
|
|
repliesToId String @unique //replies to this message id
|
|
|
|
|
createdAt DateTime @default(now())
|
|
|
|
|
updatedAt DateTime @updatedAt
|
2025-09-27 02:44:50 -04:00
|
|
|
|
|
|
|
|
@@unique([messageId, repliesToId])
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
model MessagePing {
|
2025-09-27 19:13:22 -04:00
|
|
|
Message Message @relation(fields: [messageId], references: [id])
|
2025-09-27 02:44:50 -04:00
|
|
|
messageId String
|
2025-09-27 19:13:22 -04:00
|
|
|
PingsUser User @relation(fields: [pingsUserId], references: [id])
|
2025-09-27 02:44:50 -04:00
|
|
|
pingsUserId String
|
2025-09-27 19:13:22 -04:00
|
|
|
createdAt DateTime @default(now())
|
2025-09-27 02:44:50 -04:00
|
|
|
|
|
|
|
|
@@unique([messageId, pingsUserId])
|
|
|
|
|
}
|