Added GameServer handling & commands #238

This commit is contained in:
2023-03-04 20:24:49 +01:00
parent a8dad6b223
commit 91b2cf7546
12 changed files with 339 additions and 36 deletions

View File

@@ -0,0 +1,39 @@
from abc import ABC, abstractmethod
from cpl_query.extension import List
from bot_data.model.game_server import GameServer
class GameServerRepositoryABC(ABC):
@abstractmethod
def __init__(self):
pass
@abstractmethod
def get_game_servers(self) -> List[GameServer]:
pass
@abstractmethod
def get_game_server_by_id(self, id: int) -> GameServer:
pass
@abstractmethod
def get_game_servers_by_server_id(self, id: int) -> List[GameServer]:
pass
@abstractmethod
def get_game_server_by_api_key_id(self, id: int) -> GameServer:
pass
@abstractmethod
def add_game_server(self, game_server: GameServer):
pass
@abstractmethod
def update_game_server(self, game_server: GameServer):
pass
@abstractmethod
def delete_game_server(self, game_server: GameServer):
pass

View File

@@ -11,6 +11,10 @@ class UserJoinedGameServerRepositoryABC(ABC):
def __init__(self):
pass
# @abstractmethod
# def get_game_server_by_api_key(self) -> List[UserJoinedGameServer]:
# pass
@abstractmethod
def get_user_joined_game_servers(self) -> List[UserJoinedGameServer]:
pass

View File

@@ -9,6 +9,7 @@ from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
from bot_data.abc.auth_user_repository_abc import AuthUserRepositoryABC
from bot_data.abc.auto_role_repository_abc import AutoRoleRepositoryABC
from bot_data.abc.client_repository_abc import ClientRepositoryABC
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
from bot_data.abc.level_repository_abc import LevelRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC
@@ -26,6 +27,7 @@ from bot_data.service.api_key_repository_service import ApiKeyRepositoryService
from bot_data.service.auth_user_repository_service import AuthUserRepositoryService
from bot_data.service.auto_role_repository_service import AutoRoleRepositoryService
from bot_data.service.client_repository_service import ClientRepositoryService
from bot_data.service.game_server_repository_service import GameServerRepositoryService
from bot_data.service.known_user_repository_service import KnownUserRepositoryService
from bot_data.service.level_repository_service import LevelRepositoryService
from bot_data.service.seeder_service import SeederService
@@ -68,5 +70,6 @@ class DataModule(ModuleABC):
UserMessageCountPerHourRepositoryABC,
UserMessageCountPerHourRepositoryService,
)
services.add_transient(GameServerRepositoryABC, GameServerRepositoryService)
services.add_transient(SeederService)

View File

@@ -57,7 +57,7 @@ class GameServer(TableABC):
def get_select_all_string() -> str:
return str(
f"""
SELECT * FROM `GameServer`;
SELECT * FROM `GameServers`;
"""
)
@@ -65,16 +65,34 @@ class GameServer(TableABC):
def get_select_by_id_string(id: int) -> str:
return str(
f"""
SELECT * FROM `GameServer`
SELECT * FROM `GameServers`
WHERE `Id` = {id};
"""
)
@staticmethod
def get_select_by_api_key_id_string(id: int) -> str:
return str(
f"""
SELECT * FROM `GameServers`
WHERE `ApiKeyId` = {id};
"""
)
@staticmethod
def get_select_by_server_id_string(id: int) -> str:
return str(
f"""
SELECT * FROM `GameServers`
WHERE `ServerId` = {id};
"""
)
@staticmethod
def get_select_by_user_id_string(id: int) -> str:
return str(
f"""
SELECT * FROM `GameServer`
SELECT * FROM `GameServers`
WHERE `UserId` = {id};
"""
)
@@ -83,8 +101,8 @@ class GameServer(TableABC):
def insert_string(self) -> str:
return str(
f"""
INSERT INTO `GameServer` (
`Name`, `ServerId`, `ApiKeyId`, CreatedAt`, `LastModifiedAt`
INSERT INTO `GameServers` (
`Name`, `ServerId`, `ApiKeyId`, `CreatedAt`, `LastModifiedAt`
) VALUES (
'{self._name}',
{self._server.id},
@@ -99,7 +117,7 @@ class GameServer(TableABC):
def udpate_string(self) -> str:
return str(
f"""
UPDATE `GameServer`
UPDATE `GameServers`
SET `LastModifiedAt` = '{self._modified_at}'
WHERE `Id` = {self._id};
"""
@@ -109,7 +127,7 @@ class GameServer(TableABC):
def delete_string(self) -> str:
return str(
f"""
DELETE FROM `GameServer`
DELETE FROM `GameServers`
WHERE `Id` = {self._id};
"""
)
@@ -118,7 +136,7 @@ class GameServer(TableABC):
def delete_by_user_id_string(id: int) -> str:
return str(
f"""
DELETE FROM `GameServer`
DELETE FROM `GameServers`
WHERE `UserId` = {id}
"""
)

View File

@@ -0,0 +1,89 @@
from cpl_core.database.context import DatabaseContextABC
from cpl_query.extension import List
from bot_core.logging.database_logger import DatabaseLogger
from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.model.game_server import GameServer
class GameServerRepositoryService(GameServerRepositoryABC):
def __init__(
self,
logger: DatabaseLogger,
db_context: DatabaseContextABC,
servers: ServerRepositoryABC,
api_keys: ApiKeyRepositoryABC,
):
self._logger = logger
self._context = db_context
self._servers = servers
self._api_keys = api_keys
GameServerRepositoryABC.__init__(self)
def _from_result(self, result: tuple):
return GameServer(
result[1],
self._servers.get_server_by_id(result[2]),
self._api_keys.get_api_key_by_id(result[3]),
result[4],
result[5],
id=result[0],
)
def get_game_servers(self) -> List[GameServer]:
game_servers = List(GameServer)
self._logger.trace(
__name__,
f"Send SQL command: {GameServer.get_select_all_string()}",
)
results = self._context.select(GameServer.get_select_all_string())
for result in results:
self._logger.trace(__name__, f"Get user-joined-game-server with id {result[0]}")
game_servers.append(self._from_result(result))
return game_servers
def get_game_servers_by_server_id(self, id: int) -> List[GameServer]:
game_servers = List(GameServer)
self._logger.trace(
__name__,
f"Send SQL command: {GameServer.get_select_by_server_id_string(id)}",
)
results = self._context.select(GameServer.get_select_by_server_id_string(id))
for result in results:
self._logger.trace(__name__, f"Get user-joined-game-server with id {result[0]}")
game_servers.append(self._from_result(result))
return game_servers
def get_game_server_by_id(self, id: int) -> GameServer:
self._logger.trace(
__name__,
f"Send SQL command: {GameServer.get_select_by_id_string(id)}",
)
result = self._context.select(GameServer.get_select_by_id_string(id))[0]
return self._from_result(result)
def get_game_server_by_api_key_id(self, id: int) -> GameServer:
self._logger.trace(
__name__,
f"Send SQL command: {GameServer.get_select_by_api_key_id_string(id)}",
)
result = self._context.select(GameServer.get_select_by_api_key_id_string(id))[0]
return self._from_result(result)
def add_game_server(self, game_server: GameServer):
self._logger.trace(__name__, f"Send SQL command: {game_server.insert_string}")
self._context.cursor.execute(game_server.insert_string)
def update_game_server(self, game_server: GameServer):
self._logger.trace(__name__, f"Send SQL command: {game_server.udpate_string}")
self._context.cursor.execute(game_server.udpate_string)
def delete_game_server(self, game_server: GameServer):
self._logger.trace(__name__, f"Send SQL command: {game_server.delete_string}")
self._context.cursor.execute(game_server.delete_string)

View File

@@ -4,13 +4,11 @@ from cpl_core.database.context import DatabaseContextABC
from cpl_query.extension import List
from bot_core.logging.database_logger import DatabaseLogger
from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
from bot_data.abc.user_joined_game_server_repository_abc import (
UserJoinedGameServerRepositoryABC,
)
from bot_data.abc.user_repository_abc import UserRepositoryABC
from bot_data.model.game_server import GameServer
from bot_data.model.user_joined_game_server import UserJoinedGameServer
@@ -20,38 +18,20 @@ class UserJoinedGameServerRepositoryService(UserJoinedGameServerRepositoryABC):
logger: DatabaseLogger,
db_context: DatabaseContextABC,
users: UserRepositoryABC,
servers: ServerRepositoryABC,
api_keys: ApiKeyRepositoryABC,
game_servers: GameServerRepositoryABC,
):
self._logger = logger
self._context = db_context
self._users = users
self._servers = servers
self._api_keys = api_keys
self._game_servers = game_servers
UserJoinedGameServerRepositoryABC.__init__(self)
def _game_server_from_id(self, id: int):
self._logger.trace(
__name__,
f"Send SQL command: {GameServer.get_select_by_id_string(id)}",
)
result = self._context.select(GameServer.get_select_by_id_string(id))[0]
return GameServer(
result[1],
self._servers.get_server_by_id(result[2]),
self._api_keys.get_api_key_by_id(result[3]),
result[4],
result[5],
id=result[0],
)
def _from_result(self, result: tuple) -> UserJoinedGameServer:
return UserJoinedGameServer(
self._users.get_user_by_id(result[1]),
self._game_server_from_id(result[2]),
self._game_servers.get_game_server_by_id(result[2]),
result[3],
result[4],
result[5],