from typing import Optional from cpl_core.database.context import DatabaseContextABC from cpl_core.logging import LoggerABC from cpl_query.extension import List from gismo_data.abc.server_repository_abc import ServerRepositoryABC from gismo_data.abc.user_repository_abc import UserRepositoryABC from gismo_data.model.user import User class UserRepositoryService(UserRepositoryABC): def __init__(self, logger: LoggerABC, db_context: DatabaseContextABC, servers: ServerRepositoryABC): self._logger = logger self._context = db_context self._servers = servers UserRepositoryABC.__init__(self) def get_users(self) -> List[User]: users = List(User) self._logger.trace(__name__, f'Send SQL command: {User.get_select_all_string()}') results = self._context.select(User.get_select_all_string()) for result in results: self._logger.trace(__name__, f'Get user with id {result[0]}') users.append(User( result[1], result[2], self._servers.get_server_by_id(result[3]), id=result[0] )) return users def get_user_by_id(self, id: int) -> User: self._logger.trace(__name__, f'Send SQL command: {User.get_select_by_id_string(id)}') result = self._context.select(User.get_select_by_id_string(id))[0] return User( result[1], result[2], self._servers.get_server_by_id(result[3]), id=result[0] ) def get_user_by_discord_id(self, discord_id: int) -> User: self._logger.trace(__name__, f'Send SQL command: {User.get_select_by_discord_id_string(discord_id)}') result = self._context.select(User.get_select_by_discord_id_string(discord_id))[0] return User( result[1], result[2], self._servers.get_server_by_id(result[3]), id=result[0] ) def find_user_by_discord_id(self, discord_id: int) -> Optional[User]: self._logger.trace(__name__, f'Send SQL command: {User.get_select_by_discord_id_string(discord_id)}') result = self._context.select(User.get_select_by_discord_id_string(discord_id)) if result is None or len(result) == 0: return None result = result[0] return User( result[1], result[2], result[3], result[4], self._servers.get_server_by_id(result[3]), id=result[0] ) def add_user(self, user: User): self._logger.trace(__name__, f'Send SQL command: {user.insert_string}') self._context.cursor.execute(user.insert_string) def update_user(self, user: User): self._logger.trace(__name__, f'Send SQL command: {user.udpate_string}') self._context.cursor.execute(user.udpate_string) def delete_user(self, user: User): self._logger.trace(__name__, f'Send SQL command: {user.delete_string}') self._context.cursor.execute(user.delete_string)