Added level history to graphql #246
This commit is contained in:
41
kdb-bot/src/bot_graphql/abc/data_query_with_history_abc.py
Normal file
41
kdb-bot/src/bot_graphql/abc/data_query_with_history_abc.py
Normal file
@@ -0,0 +1,41 @@
|
||||
from typing import Type
|
||||
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
from cpl_query.extension import List
|
||||
|
||||
from bot_data.abc.history_table_abc import HistoryTableABC
|
||||
from bot_data.abc.table_with_id_abc import TableWithIdABC
|
||||
from bot_graphql.abc.data_query_abc import DataQueryABC
|
||||
|
||||
|
||||
class DataQueryWithHistoryABC(DataQueryABC):
|
||||
def __init__(
|
||||
self,
|
||||
name: str,
|
||||
table_name: str,
|
||||
history_type: Type[HistoryTableABC],
|
||||
db: DatabaseContextABC,
|
||||
):
|
||||
self._table_name = table_name
|
||||
self._history_type = history_type
|
||||
self._db = db
|
||||
|
||||
DataQueryABC.__init__(self, name)
|
||||
|
||||
self.set_field("history", self.resolve_history)
|
||||
|
||||
def resolve_history(self, entry: TableWithIdABC, *_):
|
||||
history = List(self._history_type)
|
||||
|
||||
results = self._db.select(
|
||||
f"""
|
||||
SELECT *
|
||||
FROM {self._table_name}
|
||||
WHERE Id = {entry.id};
|
||||
"""
|
||||
)
|
||||
|
||||
for result in results:
|
||||
history.add(self._history_type(*result[1:], result[0]))
|
||||
|
||||
return history
|
@@ -28,6 +28,7 @@ from bot_graphql.queries.auto_role_query import AutoRoleQuery
|
||||
from bot_graphql.queries.auto_role_rule_query import AutoRoleRuleQuery
|
||||
from bot_graphql.queries.client_query import ClientQuery
|
||||
from bot_graphql.queries.known_user_query import KnownUserQuery
|
||||
from bot_graphql.queries.level_history_query import LevelHistoryQuery
|
||||
from bot_graphql.queries.level_query import LevelQuery
|
||||
from bot_graphql.queries.server_query import ServerQuery
|
||||
from bot_graphql.queries.user_joined_game_server_query import UserJoinedGameServerQuery
|
||||
@@ -57,6 +58,7 @@ class GraphQLModule(ModuleABC):
|
||||
services.add_transient(QueryABC, ClientQuery)
|
||||
services.add_transient(QueryABC, KnownUserQuery)
|
||||
services.add_transient(QueryABC, LevelQuery)
|
||||
services.add_transient(QueryABC, LevelHistoryQuery)
|
||||
services.add_transient(QueryABC, ServerQuery)
|
||||
services.add_transient(QueryABC, UserQuery)
|
||||
services.add_transient(QueryABC, UserJoinedServerQuery)
|
||||
|
@@ -3,6 +3,18 @@ interface TableQuery {
|
||||
modifiedAt: String
|
||||
}
|
||||
|
||||
interface TableWithHistoryQuery {
|
||||
createdAt: String
|
||||
modifiedAt: String
|
||||
history: [HistoryTableQuery]
|
||||
}
|
||||
|
||||
interface HistoryTableQuery {
|
||||
deleted: Boolean
|
||||
dateFrom: String
|
||||
dateTo: String
|
||||
}
|
||||
|
||||
input Page {
|
||||
pageIndex: Int
|
||||
pageSize: Int
|
||||
|
@@ -1,4 +1,4 @@
|
||||
type Level implements TableQuery {
|
||||
type Level implements TableWithHistoryQuery {
|
||||
id: ID
|
||||
name: String
|
||||
color: String
|
||||
@@ -9,6 +9,22 @@ type Level implements TableQuery {
|
||||
|
||||
createdAt: String
|
||||
modifiedAt: String
|
||||
|
||||
history: [LevelHistory]
|
||||
}
|
||||
|
||||
type LevelHistory implements HistoryTableQuery {
|
||||
id: ID
|
||||
name: String
|
||||
color: String
|
||||
minXp: Int
|
||||
permissions: String
|
||||
|
||||
server: Server
|
||||
|
||||
deleted: Boolean
|
||||
dateFrom: String
|
||||
dateTo: String
|
||||
}
|
||||
|
||||
input LevelFilter {
|
||||
|
54
kdb-bot/src/bot_graphql/queries/level_history_query.py
Normal file
54
kdb-bot/src/bot_graphql/queries/level_history_query.py
Normal file
@@ -0,0 +1,54 @@
|
||||
from bot_data.abc.history_table_abc import HistoryTableABC
|
||||
from bot_data.model.level import Level
|
||||
from bot_graphql.abc.query_abc import QueryABC
|
||||
|
||||
|
||||
class LevelHistoryQuery(QueryABC):
|
||||
def __init__(self):
|
||||
QueryABC.__init__(self, "LevelHistory")
|
||||
|
||||
self.set_field("id", self.resolve_id)
|
||||
self.set_field("name", self.resolve_name)
|
||||
self.set_field("color", self.resolve_color)
|
||||
self.set_field("minXp", self.resolve_min_xp)
|
||||
self.set_field("permissions", self.resolve_permissions)
|
||||
self.set_field("server", self.resolve_server)
|
||||
self.set_field("deleted", self.resolve_deleted)
|
||||
self.set_field("dateFrom", self.resolve_date_from)
|
||||
self.set_field("dateTo", self.resolve_date_to)
|
||||
|
||||
@staticmethod
|
||||
def resolve_id(level: Level, *_):
|
||||
return level.id
|
||||
|
||||
@staticmethod
|
||||
def resolve_name(level: Level, *_):
|
||||
return level.name
|
||||
|
||||
@staticmethod
|
||||
def resolve_color(level: Level, *_):
|
||||
return level.color
|
||||
|
||||
@staticmethod
|
||||
def resolve_min_xp(level: Level, *_):
|
||||
return level.min_xp
|
||||
|
||||
@staticmethod
|
||||
def resolve_permissions(level: Level, *_):
|
||||
return level.permissions
|
||||
|
||||
@staticmethod
|
||||
def resolve_server(level: Level, *_):
|
||||
return level.server
|
||||
|
||||
@staticmethod
|
||||
def resolve_deleted(entry: HistoryTableABC, *_):
|
||||
return entry.deleted
|
||||
|
||||
@staticmethod
|
||||
def resolve_date_from(entry: HistoryTableABC, *_):
|
||||
return entry.date_from
|
||||
|
||||
@staticmethod
|
||||
def resolve_date_to(entry: HistoryTableABC, *_):
|
||||
return entry.date_to
|
@@ -1,10 +1,13 @@
|
||||
from cpl_core.database.context import DatabaseContextABC
|
||||
|
||||
from bot_data.model.level import Level
|
||||
from bot_graphql.abc.data_query_abc import DataQueryABC
|
||||
from bot_data.model.level_history import LevelHistory
|
||||
from bot_graphql.abc.data_query_with_history_abc import DataQueryWithHistoryABC
|
||||
|
||||
|
||||
class LevelQuery(DataQueryABC):
|
||||
def __init__(self):
|
||||
DataQueryABC.__init__(self, "Level")
|
||||
class LevelQuery(DataQueryWithHistoryABC):
|
||||
def __init__(self, db: DatabaseContextABC):
|
||||
DataQueryWithHistoryABC.__init__(self, "Level", "LevelsHistory", LevelHistory, db)
|
||||
|
||||
self.set_field("id", self.resolve_id)
|
||||
self.set_field("name", self.resolve_name)
|
||||
|
Reference in New Issue
Block a user