Newer
Older
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
generator dbml {
provider = "prisma-dbml-generator"
}
model Setting {
key String @id
value String // this value will be parsed with JSON.parse
}
sub String @id
display_name String?
picture_url String?
profile_url String?
lastPixelTime DateTime @default(now()) // the time the last pixel was placed at
pixelStack Int @default(0) // amount of pixels stacked for this user
undoExpires DateTime? // when the undo for the most recent pixel expires at
isAdmin Boolean @default(false)
isModerator Boolean @default(false)
model Instance {
id Int @id @default(autoincrement())
hostname String @unique
name String?
logo_url String?
banner_url String?
id Int @id @default(autoincrement())
name String
hex String @unique
}
model Pixel {
id Int @id @default(autoincrement())
userId String
x Int
y Int
color String
isTop Boolean @default(false)
isModAction Boolean @default(false)
createdAt DateTime @default(now())
deletedAt DateTime?

Grant
committed
user User @relation(fields: [userId], references: [sub])
// do not add a relation to PaletteColor, in the case the palette gets changed
// https://github.com/prisma/prisma/issues/18058
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
model Faction {
id String @id @default(uuid())
name String
image String?
FactionMember FactionMember[]
FactionRole FactionRole[]
FactionSocial FactionSocial[]
FactionSetting FactionSetting[]
}
// people can be apart of multiple factions at once
model FactionMember {
id Int @id @default(autoincrement())
sub String
factionId String
user User @relation(fields: [sub], references: [sub])
faction Faction @relation(fields: [factionId], references: [id])
}
// future proofing maybe: different roles for the same faction
// factions by default should have LEADER, MODERATOR, MEMBER
model FactionRole {
id String @id @default(uuid())
name String
level Int // permission level (similar to matrix [0 = member, 100 = leader])
factionId String
faction Faction @relation(fields: [factionId], references: [id])
}
model FactionSocial {
id String @id @default(uuid())
factionId String
title String? // display name for the link
url String // [!] rel=nofollow [!]
position Int
faction Faction @relation(fields: [factionId], references: [id])
}
model FactionSetting {
id String @id @default(uuid())
factionId String
key String
value String
definition FactionSettingDefinition @relation(fields: [key], references: [id])
faction Faction @relation(fields: [factionId], references: [id])
}
// global definition for the faction setting
model FactionSettingDefinition {
id String @id
name String
type String // enum of type of setting (eg. text, checkbox)
minimumLevel Int // what level is needed to modify this setting (>=)
FactionSetting FactionSetting[]
}
model Ban {
id Int @id @default(autoincrement())
userId String? @unique
instanceId Int? @unique
privateNote String?
publicNote String?
expiresAt DateTime
createdAt DateTime @default(now())
updatedAt DateTime?
user User? @relation(fields: [userId], references: [sub])
instance Instance? @relation(fields: [instanceId], references: [id])
AuditLog AuditLog[]
}
enum AuditLogAction {
BAN_CREATE
BAN_UPDATE
BAN_DELETE
}
model AuditLog {
id Int @id @default(autoincrement())
userId String?
action AuditLogAction
reason String?
comment String? // service comment
banId Int?
createdAt DateTime @default(now())
updatedAt DateTime?
user User? @relation(fields: [userId], references: [sub])
ban Ban? @relation(fields: [banId], references: [id])