1.0.2 #283 #284
@ -27,6 +27,7 @@ from bot_data.abc.user_warnings_repository_abc import UserWarningsRepositoryABC
|
||||
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.cache_service import CacheService
|
||||
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
|
||||
@ -56,6 +57,8 @@ class DataModule(ModuleABC):
|
||||
pass
|
||||
|
||||
def configure_services(self, services: ServiceCollectionABC, env: ApplicationEnvironmentABC):
|
||||
services.add_singleton(CacheService)
|
||||
|
||||
services.add_transient(ApiKeyRepositoryABC, ApiKeyRepositoryService)
|
||||
services.add_transient(AuthUserRepositoryABC, AuthUserRepositoryService)
|
||||
services.add_transient(ServerRepositoryABC, ServerRepositoryService)
|
||||
|
16
kdb-bot/src/bot_data/service/cache_service.py
Normal file
16
kdb-bot/src/bot_data/service/cache_service.py
Normal file
@ -0,0 +1,16 @@
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_data.model.server import Server
|
||||
|
||||
|
||||
class CacheService:
|
||||
def __init__(self):
|
||||
self._cached_server = List(Server)
|
||||
|
||||
@property
|
||||
def cached_server(self) -> List[Server]:
|
||||
return self._cached_server
|
||||
|
||||
@cached_server.setter
|
||||
def cached_server(self, value: List[Server]):
|
||||
self._cached_server = value
|
@ -8,12 +8,14 @@ from bot_core.logging.database_logger import DatabaseLogger
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from bot_data.filtered_result import FilteredResult
|
||||
from bot_data.model.server import Server
|
||||
from bot_data.service.cache_service import CacheService
|
||||
|
||||
|
||||
class ServerRepositoryService(ServerRepositoryABC):
|
||||
def __init__(self, logger: DatabaseLogger, db_context: DatabaseContextABC):
|
||||
def __init__(self, logger: DatabaseLogger, db_context: DatabaseContextABC, cache: CacheService):
|
||||
self._logger = logger
|
||||
self._context = db_context
|
||||
self._cache = cache
|
||||
|
||||
ServerRepositoryABC.__init__(self)
|
||||
|
||||
@ -24,6 +26,7 @@ class ServerRepositoryService(ServerRepositoryABC):
|
||||
for result in results:
|
||||
servers.append(Server(result[1], result[2], result[3], id=result[0]))
|
||||
|
||||
self._cache.cached_server = List(Server, servers)
|
||||
return servers
|
||||
|
||||
def get_filtered_servers(self, criteria: ServerSelectCriteria) -> FilteredResult:
|
||||
@ -52,11 +55,23 @@ class ServerRepositoryService(ServerRepositoryABC):
|
||||
return result
|
||||
|
||||
def get_server_by_id(self, server_id: int) -> Server:
|
||||
cs = self._cache.cached_server.where(lambda x: x.id == server_id).single_or_default()
|
||||
if cs is not None:
|
||||
self._logger.error(__name__, f"CACHE")
|
||||
return cs
|
||||
|
||||
self._logger.trace(__name__, f"Send SQL command: {Server.get_select_by_id_string(server_id)}")
|
||||
result = self._context.select(Server.get_select_by_id_string(server_id))[0]
|
||||
return Server(result[1], result[2], result[3], id=result[0])
|
||||
server = Server(result[1], result[2], result[3], id=result[0])
|
||||
self._cache.cached_server.add(server)
|
||||
return server
|
||||
|
||||
def get_server_by_discord_id(self, discord_id: int) -> Server:
|
||||
cs = self._cache.cached_server.where(lambda x: x.discord_id == discord_id).single_or_default()
|
||||
if cs is not None:
|
||||
self._logger.error(__name__, f"CACHE")
|
||||
return cs
|
||||
|
||||
self._logger.trace(
|
||||
__name__,
|
||||
f"Send SQL command: {Server.get_select_by_discord_id_string(discord_id)}",
|
||||
@ -65,6 +80,11 @@ class ServerRepositoryService(ServerRepositoryABC):
|
||||
return Server(result[1], result[2], result[3], id=result[0])
|
||||
|
||||
def find_server_by_discord_id(self, discord_id: int) -> Optional[Server]:
|
||||
cs = self._cache.cached_server.where(lambda x: x.discord_id == discord_id).single_or_default()
|
||||
if cs is not None:
|
||||
self._logger.error(__name__, f"CACHE")
|
||||
return cs
|
||||
|
||||
self._logger.trace(
|
||||
__name__,
|
||||
f"Send SQL command: {Server.get_select_by_discord_id_string(discord_id)}",
|
||||
|
Loading…
Reference in New Issue
Block a user