Added level history to graphql #246

This commit is contained in:
2023-03-07 15:09:43 +01:00
parent 5df0501505
commit 325a17b5a8
17 changed files with 255 additions and 31 deletions

View 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

View File

@@ -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)

View File

@@ -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

View File

@@ -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 {

View 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

View File

@@ -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)