1
Fork 0
mirror of https://github.com/allthingslinux/tux.git synced 2024-10-02 16:43:12 +00:00

refactor: Add StarboardController to database controllers

This commit is contained in:
wlinator 2024-09-04 04:59:54 -04:00
parent 5d285cd2fe
commit a6c8aaabae
3 changed files with 54 additions and 4 deletions

View file

@ -145,13 +145,12 @@ model Reminder {
}
model Starboard {
starboard_id BigInt @id @default(autoincrement())
guild_id BigInt @id
starboard_channel_id BigInt
starboard_emoji String
starboard_threshold Int
guild_id BigInt
guild Guild @relation(fields: [guild_id], references: [guild_id])
@@unique([starboard_id, guild_id])
@@index([starboard_id, guild_id])
@@unique([guild_id])
@@index([guild_id])
}

View file

@ -4,6 +4,7 @@ from .guild_config import GuildConfigController
from .note import NoteController
from .reminder import ReminderController
from .snippet import SnippetController
from .starboard import StarboardController
class DatabaseController:
@ -14,3 +15,4 @@ class DatabaseController:
self.reminder = ReminderController()
self.guild = GuildController()
self.guild_config = GuildConfigController()
self.starboard = StarboardController()

View file

@ -0,0 +1,49 @@
from prisma.models import Guild, Starboard
from tux.database.client import db
class StarboardController:
def __init__(self):
self.table = db.starboard
self.guild_table = db.guild
async def ensure_guild_exists(self, guild_id: int) -> Guild | None:
guild = await self.guild_table.find_unique(where={"guild_id": guild_id})
if guild is None:
return await self.guild_table.create(data={"guild_id": guild_id})
return guild
async def get_all_starboards(self) -> list[Starboard]:
return await self.table.find_many()
async def get_starboard_by_guild_id(self, guild_id: int) -> Starboard | None:
return await self.table.find_unique(where={"guild_id": guild_id})
async def create_or_update_starboard(
self,
guild_id: int,
starboard_channel_id: int,
starboard_emoji: str,
starboard_threshold: int,
) -> Starboard:
await self.ensure_guild_exists(guild_id)
return await self.table.upsert(
where={"guild_id": guild_id},
data={
"create": {
"guild_id": guild_id,
"starboard_channel_id": starboard_channel_id,
"starboard_emoji": starboard_emoji,
"starboard_threshold": starboard_threshold,
},
"update": {
"starboard_channel_id": starboard_channel_id,
"starboard_emoji": starboard_emoji,
"starboard_threshold": starboard_threshold,
},
},
)
async def delete_starboard_by_guild_id(self, guild_id: int) -> Starboard | None:
return await self.table.delete(where={"guild_id": guild_id})