Files
concord/concord-server/schema.prisma

101 lines
2.6 KiB
Plaintext
Raw Normal View History

2025-09-27 02:44:50 -04:00
generator client {
provider = "prisma-zod-generator"
2025-09-27 02:44:50 -04:00
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Instance {
id String @id @default(uuid(7))
name String
icon String?
Role Role[]
Category Category[]
}
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
Role Role[]
UserAuth UserAuth?
Message Message[]
MessagePing MessagePing[]
}
model Role {
User User @relation(fields: [userId], references: [id])
userId String
Instance Instance @relation(fields: [instanceId], references: [id])
instanceId String
type String
2025-09-27 02:44:50 -04:00
@@unique([userId, instanceId])
}
model UserAuth {
User User @relation(fields: [userId], references: [id])
userId String
password String // HASHED PASSWORD AS STRING USING SHA-256
token String? // current user token
@@unique([userId])
}
model Category {
id String @id @default(uuid(7))
Instance Instance? @relation(fields: [instanceId], references: [id])
instanceId String?
name String
position Int
Channel Channel[]
}
model Channel {
id String @id @default(uuid(7))
type String
Category Category? @relation(fields: [categoryId], references: [id])
categoryId String?
name String
description String
Message Message[]
}
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
deleted Boolean
2025-09-27 02:44:50 -04:00
text String
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[]
}
model Reply {
2025-09-27 15:51:33 -04:00
message Message @relation("MessageToReply", fields: [messageId], references: [id]) //message text
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
2025-09-27 02:44:50 -04:00
@@unique([messageId, repliesToId])
}
model MessagePing {
Message Message @relation(fields: [messageId], references: [id])
messageId String
PingsUser User @relation(fields: [pingsUserId], references: [id])
pingsUserId String
@@unique([messageId, pingsUserId])
}