1
Fork 0
mirror of https://github.com/allthingslinux/tux.git synced 2024-10-02 16:43:12 +00:00
tux/prisma/schema.prisma
kzndotsh 52cf304657 refactor(schema.prisma): simplify database URL environment variables for better maintainability
feat(bot.py): enhance logging for Prisma client setup and connection status for better debugging
style(bot.py): improve logging messages for better readability
feat(main.py): integrate Sentry setup into main function for better error tracking
refactor(constants.py): simplify database URL environment variables and add verbose loading for dotenv
chore(sentry.py): remove redundant Sentry setup file as setup is now integrated into main function
2024-08-11 02:36:21 +00:00

140 lines
4.4 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
TIMEOUT
UNTIMEOUT
WARN
JAIL
UNJAIL
}
// 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[]
@@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_target_id BigInt
case_target_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])
@@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_target_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])
}