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 ebc652ce1c refactor(schema.prisma, case.py, note.py): rename 'target' to 'user' for better clarity
- 'case_target_id' and 'note_target_id' renamed to 'case_user_id' and 'note_user_id' respectively
- 'case_target_roles' renamed to 'case_user_roles'
- All related function names and parameters updated to reflect these changes
2024-08-27 10:31:49 +00:00

144 lines
4.5 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[]
@@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])
}