Files
concord/concord-server/schema.prisma

115 lines
2.8 KiB
Plaintext

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "postgresql"
url = env("DATABASE_URL")
}
model Hello {
id String @id @default(uuid(7))
names Thing[]
}
model Thing {
id BigInt @id @default(autoincrement())
txt String
Hello Hello? @relation(fields: [helloId], references: [id])
helloId String?
}
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
@@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[]
Message Message[]
}
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))
Channel Channel? @relation(fields: [channelId], references: [id])
channelId String?
Category Category? @relation(fields: [categoryId], references: [id])
categoryId String?
User User? @relation(fields: [userId], references: [id])
userId String?
deleted Boolean
text String
replies Reply[] @relation("MessageToReply")
repliedTo Reply[] @relation("ReplyToMessage")
MessagePing MessagePing[]
}
model Reply {
message Message @relation("MessageToReply", fields: [messageId], references: [id])
messageId String
repliesTo Message @relation("ReplyToMessage", fields: [repliesToId], references: [id])
repliesToId String
@@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])
}