xyter/prisma/schema.prisma
Vermium Sifell a2e1fa7a98 feat: add quote feature
Now users can post quotes about each other if guild has enabled it!
2023-05-29 17:31:17 +02:00

186 lines
5 KiB
Text

generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
model Guild {
id String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
guildMembers GuildMember[]
guildSettings GuildSettings?
guildCreditsSettings GuildCreditsSettings?
guildQuotesSettings GuildQuotesSettings?
apiCredentials ApiCredentials[]
cooldowns Cooldown[]
Quotes Quotes[]
}
model User {
id String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
guildMembers GuildMember[]
apiCredentials ApiCredentials[]
cooldowns Cooldown[]
userReputation UserReputation?
Quotes Quotes[] @relation(name: "Quotes")
PostedQuotes Quotes[] @relation(name: "PostedQuotes")
}
model GuildMember {
guildId String
userId String
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
guild Guild @relation(fields: [guildId], references: [id], onDelete: Cascade)
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
guildMemberCredit GuildMemberCredit?
apiCredentials ApiCredentials[]
cooldowns Cooldown[]
@@unique([guildId, userId])
}
model GuildMemberCredit {
guildId String
userId String
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
guildMember GuildMember @relation(fields: [guildId, userId], references: [guildId, userId], onDelete: Cascade)
balance Int @default(0)
@@unique([guildId, userId])
@@index([guildId])
@@index([userId])
@@index([guildId, userId])
}
model UserReputation {
id String @unique
createdAt DateTime @default(now())
updatedAt DateTime @default(now())
user User @relation(fields: [id], references: [id], onDelete: Cascade)
negative Int @default(0)
positive Int @default(0)
}
model GuildSettings {
id String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
guild Guild @relation(fields: [id], references: [id], onDelete: Cascade)
creditsSettings GuildCreditsSettings? @relation(fields: [guildCreditsSettingsId], references: [id], onDelete: Cascade)
guildCreditsSettingsId String?
GuildQuotesSettings GuildQuotesSettings? @relation(fields: [guildQuotesSettingsId], references: [id])
guildQuotesSettingsId String?
}
model GuildCreditsSettings {
id String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
guild Guild @relation(fields: [id], references: [id], onDelete: Cascade)
// Work commands
workBonusChance Int @default(30)
workPenaltyChance Int @default(10)
// Bonus commands
dailyBonusAmount Int @default(25)
weeklyBonusAmount Int @default(50)
monthlyBonusAmount Int @default(150)
guildSettings GuildSettings[]
}
model GuildQuotesSettings {
id String @unique
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
guild Guild @relation(fields: [id], references: [id], onDelete: Cascade)
status Boolean @default(false)
quoteChannelId String
guildSettings GuildSettings[]
}
model Quotes {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
user User @relation(fields: [userId], references: [id], name: "Quotes")
userId String
guild Guild @relation(fields: [guildId], references: [id], onDelete: Cascade)
guildId String
message String
posterUserId String
posterUser User @relation(fields: [posterUserId], references: [id], name: "PostedQuotes")
}
model ApiCredentials {
id String @id @default(cuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
guild Guild? @relation(fields: [guildId], references: [id], onDelete: Cascade)
guildId String?
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
userId String?
guildMember GuildMember? @relation(fields: [guildId, userId], references: [guildId, userId], onDelete: Cascade)
apiName String
credentials Json
@@unique([guildId, apiName])
@@unique([userId, apiName])
}
model Cooldown {
id String @id @default(uuid())
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
expiresAt DateTime
cooldownItem String
guild Guild? @relation(fields: [guildId], references: [id], onDelete: Cascade)
user User? @relation(fields: [userId], references: [id], onDelete: Cascade)
guildMember GuildMember? @relation(fields: [guildId, userId], references: [guildId, userId], onDelete: Cascade)
guildId String?
userId String?
@@index([cooldownItem, guildId], name: "cooldownItem_guildId_idx")
@@index([cooldownItem, userId], name: "cooldownItem_userId_idx")
@@index([cooldownItem, guildId, userId], name: "cooldownItem_guildId_userId_idx")
}
model ImportOldData {
id String @unique
done Boolean @default(false)
beforeMessageId String?
}