mirror of
https://github.com/allthingslinux/tux.git
synced 2024-10-02 16:43:12 +00:00
157 lines
No EOL
4.8 KiB
Text
157 lines
No EOL
4.8 KiB
Text
// Prisma Client Python is a next-generation ORM built on top of Prisma that has been designed from the ground up for ease of use and correctness. Prisma is a TypeScript ORM with zero-cost type safety for your database, although don't worry, Prisma Client Python interfaces with Prisma using Rust, you don't need Node or TypeScript.
|
|
|
|
// For more information on how to use Prisma Client Python, please refer to the documentation:
|
|
// https://www.prisma.io/docs/prisma-client-py
|
|
|
|
// For more information on the Prisma schema, please refer to the documentation:
|
|
// https://www.prisma.io/docs/orm/prisma-schema
|
|
|
|
datasource db {
|
|
provider = "postgresql"
|
|
|
|
url = env("DATABASE_URL")
|
|
directUrl = env("DATABASE_URL")
|
|
}
|
|
|
|
// Docs: https://prisma-client-py.readthedocs.io/en/stable/reference/client/
|
|
// Docs: https://prisma-client-py.readthedocs.io/en/stable/reference/config/#recursive-type-depth
|
|
generator client {
|
|
provider = "prisma-client-py"
|
|
interface = "asyncio"
|
|
recursive_type_depth = -1
|
|
}
|
|
|
|
// Docs: https://www.prisma.io/docs/orm/reference/prisma-schema-reference#enum
|
|
enum CaseType {
|
|
BAN
|
|
UNBAN
|
|
HACKBAN
|
|
TEMPBAN
|
|
KICK
|
|
SNIPPETBAN
|
|
TIMEOUT
|
|
UNTIMEOUT
|
|
WARN
|
|
JAIL
|
|
UNJAIL
|
|
SNIPPETUNBAN
|
|
}
|
|
|
|
// Docs: https://www.prisma.io/docs/orm/prisma-schema/data-model/models#defining-models
|
|
// Docs: https://www.prisma.io/docs/orm/prisma-schema/data-model/models#defining-attributes
|
|
model Guild {
|
|
guild_id BigInt @id
|
|
guild_joined_at DateTime? @default(now())
|
|
cases Case[]
|
|
snippets Snippet[]
|
|
notes Note[]
|
|
reminders Reminder[]
|
|
guild_config GuildConfig[]
|
|
AFK AFKModel[]
|
|
|
|
@@unique([guild_id])
|
|
@@index([guild_id])
|
|
}
|
|
|
|
model GuildConfig {
|
|
mod_log_id BigInt?
|
|
audit_log_id BigInt?
|
|
join_log_id BigInt?
|
|
private_log_id BigInt?
|
|
report_log_id BigInt?
|
|
dev_log_id BigInt?
|
|
jail_channel_id BigInt?
|
|
general_channel_id BigInt?
|
|
starboard_channel_id BigInt?
|
|
perm_level_0_role_id BigInt?
|
|
perm_level_1_role_id BigInt?
|
|
perm_level_2_role_id BigInt?
|
|
perm_level_3_role_id BigInt?
|
|
perm_level_4_role_id BigInt?
|
|
perm_level_5_role_id BigInt?
|
|
perm_level_6_role_id BigInt?
|
|
perm_level_7_role_id BigInt?
|
|
base_staff_role_id BigInt?
|
|
base_member_role_id BigInt?
|
|
jail_role_id BigInt?
|
|
quarantine_role_id BigInt?
|
|
|
|
guild_id BigInt @id
|
|
guild Guild? @relation(fields: [guild_id], references: [guild_id])
|
|
|
|
@@unique([guild_id])
|
|
@@index([guild_id])
|
|
}
|
|
|
|
model Case {
|
|
case_id BigInt @id @default(autoincrement())
|
|
case_status Boolean? @default(true)
|
|
case_type CaseType
|
|
case_reason String
|
|
case_moderator_id BigInt
|
|
case_user_id BigInt
|
|
case_user_roles BigInt[] @default([]) // Role IDs for the jailed user
|
|
case_number BigInt? // Incremented for each case per guild via a trigger/function
|
|
case_created_at DateTime? @default(now())
|
|
case_expires_at DateTime? // For temporary bans and timeouts
|
|
guild_id BigInt
|
|
guild Guild @relation(fields: [guild_id], references: [guild_id])
|
|
|
|
@@unique([case_number, guild_id])
|
|
@@index([case_number, guild_id])
|
|
}
|
|
|
|
model Snippet {
|
|
snippet_id BigInt @id @default(autoincrement())
|
|
snippet_name String
|
|
snippet_content String
|
|
snippet_user_id BigInt
|
|
snippet_created_at DateTime @default(now())
|
|
guild_id BigInt
|
|
guild Guild @relation(fields: [guild_id], references: [guild_id])
|
|
uses BigInt @default(0)
|
|
locked Boolean @default(false)
|
|
|
|
@@unique([snippet_name, guild_id])
|
|
@@index([snippet_name, guild_id])
|
|
}
|
|
|
|
model Note {
|
|
note_id BigInt @id @default(autoincrement())
|
|
note_content String
|
|
note_created_at DateTime @default(now())
|
|
note_moderator_id BigInt
|
|
note_user_id BigInt
|
|
note_number BigInt? // Incremented for each note per guild via a trigger/function
|
|
guild_id BigInt
|
|
guild Guild @relation(fields: [guild_id], references: [guild_id])
|
|
|
|
@@unique([note_number, guild_id])
|
|
@@index([note_number, guild_id])
|
|
}
|
|
|
|
model Reminder {
|
|
reminder_id BigInt @id @default(autoincrement())
|
|
reminder_content String
|
|
reminder_created_at DateTime @default(now())
|
|
reminder_expires_at DateTime
|
|
reminder_channel_id BigInt // Channel to send the reminder to if direct message fails
|
|
reminder_user_id BigInt
|
|
guild_id BigInt
|
|
guild Guild @relation(fields: [guild_id], references: [guild_id])
|
|
|
|
@@unique([reminder_id, guild_id])
|
|
@@index([reminder_id, guild_id])
|
|
}
|
|
|
|
model AFKModel {
|
|
member_id BigInt @id
|
|
nickname String
|
|
reason String
|
|
since DateTime @default(now())
|
|
guild_id BigInt
|
|
guild Guild @relation(fields: [guild_id], references: [guild_id])
|
|
|
|
@@unique([member_id, guild_id])
|
|
@@index([member_id])
|
|
} |