1
Fork 0
mirror of https://github.com/wlinator/luminara.git synced 2024-10-02 18:23:12 +00:00
Lumi/services/birthday_service.py

53 lines
1.7 KiB
Python
Raw Normal View History

import datetime
from zoneinfo import ZoneInfo
from db import database
class BirthdayService:
def __init__(self, user_id: int, guild_id: int) -> None:
self.user_id: int = user_id
self.guild_id: int = guild_id
def set(self, birthday: datetime.date) -> None:
query: str = """
INSERT INTO birthdays (user_id, guild_id, birthday)
VALUES (%s, %s, %s)
ON DUPLICATE KEY UPDATE birthday = VALUES(birthday);
"""
database.execute_query(query, (self.user_id, self.guild_id, birthday))
def delete(self) -> None:
query: str = """
DELETE FROM birthdays
WHERE user_id = %s AND guild_id = %s;
"""
database.execute_query(query, (self.user_id, self.guild_id))
@staticmethod
def get_birthdays_today() -> list[tuple[int, int]]:
query: str = """
SELECT user_id, guild_id
FROM birthdays
WHERE DATE_FORMAT(birthday, '%m-%d') = %s
"""
today: str = datetime.datetime.now(ZoneInfo("US/Eastern")).strftime("%m-%d")
return database.select_query(query, (today,))
@staticmethod
def get_upcoming_birthdays(guild_id: int) -> list[tuple[int, str]]:
query: str = """
SELECT user_id, DATE_FORMAT(birthday, '%m-%d') AS upcoming_birthday
FROM birthdays
WHERE guild_id = %s
ORDER BY (DAYOFYEAR(birthday) - DAYOFYEAR(now()) + 366) % 366;
"""
data: list[tuple[int, str]] = database.select_query(query, (guild_id,))
return [(int(row[0]), str(row[1])) for row in data]