Added technician config queries #127

This commit is contained in:
Sven Heidemann 2023-08-07 10:52:30 +02:00
parent 1098d3ed06
commit c81aa9f07b
15 changed files with 351 additions and 0 deletions

View File

@ -30,6 +30,10 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
self._created_at = created_at if created_at is not None else self._created_at 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 self._modified_at = modified_at if modified_at is not None else self._modified_at
@property
def id(self) -> int:
return self._id
@property @property
def help_command_reference_url(self) -> str: def help_command_reference_url(self) -> str:
return self._help_command_reference_url return self._help_command_reference_url

View File

@ -0,0 +1,58 @@
from bot_data.abc.history_table_abc import HistoryTableABC
class TechnicianConfigHistory(HistoryTableABC):
def __init__(
self,
help_command_reference_url: str,
wait_for_restart: int,
wait_for_shutdown: int,
cache_max_messages: int,
deleted: bool,
date_from: str,
date_to: str,
id=0,
):
HistoryTableABC.__init__(self)
self._id = id
self._help_command_reference_url = help_command_reference_url
self._wait_for_restart = wait_for_restart
self._wait_for_shutdown = wait_for_shutdown
self._cache_max_messages = cache_max_messages
self._deleted = deleted
self._date_from = date_from
self._date_to = date_to
@property
def help_command_reference_url(self) -> str:
return self._help_command_reference_url
@help_command_reference_url.setter
def help_command_reference_url(self, value: str):
self._help_command_reference_url = value
@property
def wait_for_restart(self) -> int:
return self._wait_for_restart
@wait_for_restart.setter
def wait_for_restart(self, value: int):
self._wait_for_restart = value
@property
def wait_for_shutdown(self) -> int:
return self._wait_for_shutdown
@wait_for_shutdown.setter
def wait_for_shutdown(self, value: int):
self._wait_for_shutdown = value
@property
def cache_max_messages(self) -> int:
return self._cache_max_messages
@cache_max_messages.setter
def cache_max_messages(self, value: int):
self._cache_max_messages = value

View File

@ -18,6 +18,10 @@ class TechnicianIdConfig(TableABC):
self._created_at = created_at if created_at is not None else self._created_at 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 self._modified_at = modified_at if modified_at is not None else self._modified_at
@property
def id(self) -> int:
return self._id
@property @property
def technician_id(self) -> str: def technician_id(self) -> str:
return self._technician_id return self._technician_id

View File

@ -0,0 +1,28 @@
from bot_data.abc.history_table_abc import HistoryTableABC
class TechnicianIdConfigHistory(HistoryTableABC):
def __init__(
self,
technician_id: int,
deleted: bool,
date_from: str,
date_to: str,
id=0,
):
HistoryTableABC.__init__(self)
self._id = id
self._technician_id = technician_id
self._deleted = deleted
self._date_from = date_from
self._date_to = date_to
@property
def technician_id(self) -> int:
return self._technician_id
@technician_id.setter
def technician_id(self, value: int):
self._technician_id = value

View File

@ -18,6 +18,10 @@ class TechnicianPingUrlConfig(TableABC):
self._created_at = created_at if created_at is not None else self._created_at 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 self._modified_at = modified_at if modified_at is not None else self._modified_at
@property
def id(self) -> int:
return self._id
@property @property
def ping_url(self) -> str: def ping_url(self) -> str:
return self._ping_url return self._ping_url

View File

@ -0,0 +1,28 @@
from bot_data.abc.history_table_abc import HistoryTableABC
class TechnicianPingUrlConfigHistory(HistoryTableABC):
def __init__(
self,
url: str,
deleted: bool,
date_from: str,
date_to: str,
id=0,
):
HistoryTableABC.__init__(self)
self._id = id
self._url = url
self._deleted = deleted
self._date_from = date_from
self._date_to = date_to
@property
def url(self) -> str:
return self._url
@url.setter
def url(self, value: str):
self._url = value

View File

@ -42,6 +42,10 @@ from bot_graphql.queries.level_history_query import LevelHistoryQuery
from bot_graphql.queries.level_query import LevelQuery from bot_graphql.queries.level_query import LevelQuery
from bot_graphql.queries.server_history_query import ServerHistoryQuery from bot_graphql.queries.server_history_query import ServerHistoryQuery
from bot_graphql.queries.server_query import ServerQuery from bot_graphql.queries.server_query import ServerQuery
from bot_graphql.queries.technician_config_history_query import TechnicianConfigHistoryQuery
from bot_graphql.queries.technician_config_query import TechnicianConfigQuery
from bot_graphql.queries.technician_id_config_history_query import TechnicianIdConfigHistoryQuery
from bot_graphql.queries.technician_ping_url_config_history_query import TechnicianPingUrlConfigHistoryQuery
from bot_graphql.queries.user_history_query import UserHistoryQuery from bot_graphql.queries.user_history_query import UserHistoryQuery
from bot_graphql.queries.user_joined_game_server_history_query import UserJoinedGameServerHistoryQuery from bot_graphql.queries.user_joined_game_server_history_query import UserJoinedGameServerHistoryQuery
from bot_graphql.queries.user_joined_game_server_query import UserJoinedGameServerQuery from bot_graphql.queries.user_joined_game_server_query import UserJoinedGameServerQuery
@ -83,6 +87,10 @@ class GraphQLModule(ModuleABC):
services.add_transient(QueryABC, LevelQuery) services.add_transient(QueryABC, LevelQuery)
services.add_transient(QueryABC, ServerHistoryQuery) services.add_transient(QueryABC, ServerHistoryQuery)
services.add_transient(QueryABC, ServerQuery) services.add_transient(QueryABC, ServerQuery)
services.add_transient(QueryABC, TechnicianConfigQuery)
services.add_transient(QueryABC, TechnicianConfigHistoryQuery)
services.add_transient(QueryABC, TechnicianPingUrlConfigHistoryQuery)
services.add_transient(QueryABC, TechnicianIdConfigHistoryQuery)
services.add_transient(QueryABC, GameServerQuery) services.add_transient(QueryABC, GameServerQuery)
services.add_transient(QueryABC, UserHistoryQuery) services.add_transient(QueryABC, UserHistoryQuery)
services.add_transient(QueryABC, UserQuery) services.add_transient(QueryABC, UserQuery)

View File

@ -0,0 +1,62 @@
type TechnicianConfig implements TableWithHistoryQuery {
id: ID
helpCommandReferenceUrl: String
waitForRestart: Int
waitForShutdown: Int
cacheMaxMessages: Int
pingURLs: [String]
technicianIds: [String]
createdAt: String
modifiedAt: String
history: [TechnicianConfigHistory]
pingURLHistory: [TechnicianPingUrlConfigHistory]
technicianIdHistory: [TechnicianIdConfigHistory]
}
type TechnicianConfigHistory implements HistoryTableQuery {
id: ID
helpCommandReferenceUrl: String
waitForRestart: Int
waitForShutdown: Int
cacheMaxMessages: Int
deleted: Boolean
dateFrom: String
dateTo: String
}
type TechnicianPingUrlConfigHistory implements HistoryTableQuery {
id: ID
url: String
deleted: Boolean
dateFrom: String
dateTo: String
}
type TechnicianIdConfigHistory implements HistoryTableQuery {
id: ID
technicianId: String
deleted: Boolean
dateFrom: String
dateTo: String
}
type TechnicianConfigMutation {
createTechnicianConfig(input: TechnicianConfigInput!): TechnicianConfig
updateTechnicianConfig(input: TechnicianConfigInput!): TechnicianConfig
deleteTechnicianConfig(id: ID): TechnicianConfig
}
input TechnicianConfigInput {
id: ID
helpCommandReferenceUrl: String
waitForRestart: Int
waitForShutdown: Int
cacheMaxMessages: Int
pingURLs: [String]
technicianIds: [String]
}

View File

@ -37,5 +37,7 @@ type Query {
achievementAttributes: [AchievementAttribute] achievementAttributes: [AchievementAttribute]
achievementOperators: [String] achievementOperators: [String]
technicianConfig: TechnicianConfig
guilds(filter: GuildFilter): [Guild] guilds(filter: GuildFilter): [Guild]
} }

View File

@ -0,0 +1,66 @@
from cpl_core.database.context import DatabaseContextABC
from cpl_discord.service import DiscordBotServiceABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
from bot_data.model.technician_config import TechnicianConfig
from bot_data.model.user_role_enum import UserRoleEnum
from bot_graphql.abc.query_abc import QueryABC
class TechnicianConfigMutation(QueryABC):
def __init__(
self,
bot: DiscordBotServiceABC,
servers: ServerRepositoryABC,
technician_configs: TechnicianConfigRepositoryABC,
db: DatabaseContextABC,
):
QueryABC.__init__(self, "TechnicianConfigMutation")
self._bot = bot
self._servers = servers
self._technician_configs = technician_configs
self._db = db
self.set_field("createTechnicianConfig", self.resolve_create_TechnicianConfig)
self.set_field("updateTechnicianConfig", self.resolve_update_TechnicianConfig)
self.set_field("deleteTechnicianConfig", self.resolve_delete_TechnicianConfig)
def resolve_create_technician_config(self, *_, input: dict):
if self._technician_configs.does_technician_config_exists():
return None
technician_config = TechnicianConfig(
input["helpCommandReferenceUrl"],
input["waitForRestart"],
input["waitForShutdown"],
input["cacheMaxMessages"],
input["pingURLs"],
input["technicianIds"],
)
self._technician_configs.add_technician_config(technician_config)
self._db.save_changes()
return self._technician_configs.get_technician_config()
def resolve_update_technician_config(self, *_, input: dict):
technician_config = self._technician_configs.get_technician_config()
self._can_user_mutate_data(technician_config, UserRoleEnum.admin)
technician_config.name = input["name"] if "name" in input else technician_config.name
self._technician_configs.update_TechnicianConfig(technician_config)
self._db.save_changes()
technician_config = self._technician_configs.get_TechnicianConfig_by_id(input["id"])
return technician_config
def resolve_delete_technician_config(self, *_, id: int):
technician_config = self._technician_configs.get_TechnicianConfig_by_id(id)
self._can_user_mutate_data(technician_config.server, UserRoleEnum.admin)
self._technician_configs.delete_TechnicianConfig(technician_config)
self._db.save_changes()
return technician_config

View File

@ -0,0 +1,11 @@
from bot_graphql.abc.history_query_abc import HistoryQueryABC
class TechnicianConfigHistoryQuery(HistoryQueryABC):
def __init__(self):
HistoryQueryABC.__init__(self, "TechnicianConfig")
self.set_field("helpCommandReferenceUrl", lambda config, *_: config.help_command_reference_url)
self.set_field("waitForRestart", lambda config, *_: config.wait_for_restart)
self.set_field("waitForShutdown", lambda config, *_: config.wait_for_shutdown)
self.set_field("cacheMaxMessages", lambda config, *_: config.cache_max_messages)

View File

@ -0,0 +1,57 @@
from cpl_core.database.context import DatabaseContextABC
from cpl_query.extension import List
from bot_data.abc.table_with_id_abc import TableWithIdABC
from bot_data.model.technician_config_history import TechnicianConfigHistory
from bot_data.model.technician_id_config_history import TechnicianIdConfigHistory
from bot_data.model.technician_ping_url_config_history import TechnicianPingUrlConfigHistory
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
class TechnicianConfigQuery(DataQueryWithHistoryABC):
def __init__(self, db: DatabaseContextABC):
DataQueryWithHistoryABC.__init__(self, "TechnicianConfig", "CFG_TechnicianHistory", TechnicianConfigHistory, db)
self.set_field("helpCommandReferenceUrl", lambda config, *_: config.help_command_reference_url)
self.set_field("waitForRestart", lambda config, *_: config.wait_for_restart)
self.set_field("waitForShutdown", lambda config, *_: config.wait_for_shutdown)
self.set_field("cacheMaxMessages", lambda config, *_: config.cache_max_messages)
self.set_field("pingURLs", lambda config, *_: config.ping_urls)
self.set_field("technicianIds", lambda config, *_: config.technician_ids)
self.set_field("pingURLHistory", self.resolve_ping_url_history)
self.set_field("technicianIdHistory", self.resolve_technician_id_history)
def resolve_ping_url_history(self, entry: TableWithIdABC, *_):
history = List(TechnicianPingUrlConfigHistory)
results = self._db.select(
f"""
SELECT *
FROM CFG_TechnicianPingUrlsHistory
WHERE Id = {entry.id}
ORDER BY DateTo DESC;
"""
)
for result in results:
history.add(TechnicianPingUrlConfigHistory(*result[1:], result[0]))
return history
def resolve_technician_id_history(self, entry: TableWithIdABC, *_):
history = List(TechnicianIdConfigHistory)
results = self._db.select(
f"""
SELECT *
FROM CFG_TechnicianIdsHistory
WHERE Id = {entry.id}
ORDER BY DateTo DESC;
"""
)
for result in results:
history.add(TechnicianIdConfigHistory(*result[1:], result[0]))
return history

View File

@ -0,0 +1,8 @@
from bot_graphql.abc.history_query_abc import HistoryQueryABC
class TechnicianIdConfigHistoryQuery(HistoryQueryABC):
def __init__(self):
HistoryQueryABC.__init__(self, "TechnicianIdConfig")
self.set_field("technicianId", lambda config, *_: config.technicianId)

View File

@ -0,0 +1,8 @@
from bot_graphql.abc.history_query_abc import HistoryQueryABC
class TechnicianPingUrlConfigHistoryQuery(HistoryQueryABC):
def __init__(self):
HistoryQueryABC.__init__(self, "TechnicianPingUrlConfig")
self.set_field("url", lambda config, *_: config.ping_url)

View File

@ -7,6 +7,7 @@ from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC from bot_data.abc.known_user_repository_abc import KnownUserRepositoryABC
from bot_data.abc.level_repository_abc import LevelRepositoryABC from bot_data.abc.level_repository_abc import LevelRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.technician_config_repository_abc import TechnicianConfigRepositoryABC
from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC
from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC from bot_data.abc.user_joined_server_repository_abc import UserJoinedServerRepositoryABC
from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoiceChannelRepositoryABC from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoiceChannelRepositoryABC
@ -41,6 +42,7 @@ class Query(QueryABC):
users: UserRepositoryABC, users: UserRepositoryABC,
achievements: AchievementRepositoryABC, achievements: AchievementRepositoryABC,
achievement_service: AchievementService, achievement_service: AchievementService,
technician_config: TechnicianConfigRepositoryABC,
): ):
QueryABC.__init__(self, "Query") QueryABC.__init__(self, "Query")
@ -68,6 +70,7 @@ class Query(QueryABC):
) )
self.add_collection("user", lambda *_: users.get_users(), UserFilter) self.add_collection("user", lambda *_: users.get_users(), UserFilter)
self.add_collection("achievement", lambda *_: achievements.get_achievements(), AchievementFilter) self.add_collection("achievement", lambda *_: achievements.get_achievements(), AchievementFilter)
self.set_field("technicianConfig", lambda *_: technician_config.get_technician_config())
self.set_field("guilds", self._resolve_guilds) self.set_field("guilds", self._resolve_guilds)
self.set_field("achievementAttributes", lambda x, *_: achievement_service.get_attributes()) self.set_field("achievementAttributes", lambda x, *_: achievement_service.get_attributes())