Added technician config queries #127
This commit is contained in:
parent
5c2c89ca45
commit
05ddfb3de3
@ -30,6 +30,10 @@ class TechnicianConfig(TableABC, ConfigurationModelABC):
|
||||
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 id(self) -> int:
|
||||
return self._id
|
||||
|
||||
@property
|
||||
def help_command_reference_url(self) -> str:
|
||||
return self._help_command_reference_url
|
||||
|
58
kdb-bot/src/bot_data/model/technician_config_history.py
Normal file
58
kdb-bot/src/bot_data/model/technician_config_history.py
Normal 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
|
@ -18,6 +18,10 @@ class TechnicianIdConfig(TableABC):
|
||||
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 id(self) -> int:
|
||||
return self._id
|
||||
|
||||
@property
|
||||
def technician_id(self) -> str:
|
||||
return self._technician_id
|
||||
|
28
kdb-bot/src/bot_data/model/technician_id_config_history.py
Normal file
28
kdb-bot/src/bot_data/model/technician_id_config_history.py
Normal 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
|
@ -18,6 +18,10 @@ class TechnicianPingUrlConfig(TableABC):
|
||||
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 id(self) -> int:
|
||||
return self._id
|
||||
|
||||
@property
|
||||
def ping_url(self) -> str:
|
||||
return self._ping_url
|
||||
|
@ -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
|
@ -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.server_history_query import ServerHistoryQuery
|
||||
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_joined_game_server_history_query import UserJoinedGameServerHistoryQuery
|
||||
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, ServerHistoryQuery)
|
||||
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, UserHistoryQuery)
|
||||
services.add_transient(QueryABC, UserQuery)
|
||||
|
62
kdb-bot/src/bot_graphql/model/config_technician.gql
Normal file
62
kdb-bot/src/bot_graphql/model/config_technician.gql
Normal 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]
|
||||
}
|
@ -37,5 +37,7 @@ type Query {
|
||||
achievementAttributes: [AchievementAttribute]
|
||||
achievementOperators: [String]
|
||||
|
||||
technicianConfig: TechnicianConfig
|
||||
|
||||
guilds(filter: GuildFilter): [Guild]
|
||||
}
|
@ -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
|
@ -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)
|
57
kdb-bot/src/bot_graphql/queries/technician_config_query.py
Normal file
57
kdb-bot/src/bot_graphql/queries/technician_config_query.py
Normal 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
|
@ -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)
|
@ -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)
|
@ -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.level_repository_abc import LevelRepositoryABC
|
||||
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_server_repository_abc import UserJoinedServerRepositoryABC
|
||||
from bot_data.abc.user_joined_voice_channel_repository_abc import UserJoinedVoiceChannelRepositoryABC
|
||||
@ -41,6 +42,7 @@ class Query(QueryABC):
|
||||
users: UserRepositoryABC,
|
||||
achievements: AchievementRepositoryABC,
|
||||
achievement_service: AchievementService,
|
||||
technician_config: TechnicianConfigRepositoryABC,
|
||||
):
|
||||
QueryABC.__init__(self, "Query")
|
||||
|
||||
@ -68,6 +70,7 @@ class Query(QueryABC):
|
||||
)
|
||||
self.add_collection("user", lambda *_: users.get_users(), UserFilter)
|
||||
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("achievementAttributes", lambda x, *_: achievement_service.get_attributes())
|
||||
|
Loading…
Reference in New Issue
Block a user