from datetime import datetime from typing import Optional from cpl_core.database import TableABC from gismo_data.model.server import Server class User(TableABC): def __init__(self, dc_id: int, xp: int, server: Optional[Server], created_at: datetime = None, modified_at: datetime = None, id=0): self._user_id = id self._discord_id = dc_id self._xp = xp self._server = server TableABC.__init__(self) self._created_at = created_at if created_at is not None else self._created_at self._modified_at = modified_at if modified_at is not None else self._modified_at @property def user_id(self) -> int: return self._user_id @property def discord_id(self) -> int: return self._discord_id @property def xp(self) -> int: return self._xp @xp.setter def xp(self, value: int): self._modified_at = datetime.now().isoformat() self._xp = value @property def server(self) -> Optional[Server]: return self._server @staticmethod def get_select_all_string() -> str: return str(f""" SELECT * FROM `Users`; """) @staticmethod def get_select_by_id_string(id: int) -> str: return str(f""" SELECT * FROM `Users` WHERE `UserId` = {id}; """) @staticmethod def get_select_by_discord_id_string(id: int) -> str: return str(f""" SELECT * FROM `Users` WHERE `DiscordId` = {id}; """) @staticmethod def get_select_by_discord_id_and_server_id_string(dc_id: int, s_id: int) -> str: return str(f""" SELECT * FROM `Users` WHERE `DiscordId` = {dc_id} AND `ServerId` = {s_id}; """) @property def insert_string(self) -> str: return str(f""" INSERT INTO `Users` ( `DiscordId`, `XP`, `ServerId`, `CreatedAt`, `LastModifiedAt` ) VALUES ( {self._discord_id}, {self._xp}, {self._server.server_id}, '{self._created_at}', '{self._modified_at}' ); """) @property def udpate_string(self) -> str: return str(f""" UPDATE `Users` SET `XP` = {self._xp}, `LastModifiedAt` = '{self._modified_at}' WHERE `UserId` = {self._user_id}; """) @property def delete_string(self) -> str: return str(f""" DELETE FROM `Users` WHERE `UserId` = {self._user_id}; """)