Added logic to make achievement config more generic #268_achievements

This commit is contained in:
2023-07-15 12:52:54 +02:00
parent c8a2ed290b
commit cd5b3b6523
12 changed files with 138 additions and 18 deletions

View File

@@ -1,3 +1,8 @@
type AchievementAttribute {
name: String
type: String
}
type Achievement implements TableWithHistoryQuery {
id: ID
name: String

View File

@@ -31,6 +31,8 @@ type Query {
achievementCount: Int
achievements(filter: AchievementFilter, page: Page, sort: Sort): [Achievement]
AchievementAttributes: [AchievementAttribute]
AchievementOperators: [String]
guilds(filter: GuildFilter): [Guild]
}

View File

@@ -0,0 +1,11 @@
from bot_graphql.abc.data_query_abc import DataQueryABC
class AchievementQuery(DataQueryABC):
def __init__(
self,
):
DataQueryABC.__init__(self, "AchievementAttribute")
self.set_field("name", lambda x, *_: x.name)
self.set_field("type", lambda x, *_: x.type)

View File

@@ -21,6 +21,7 @@ from bot_graphql.filter.user_filter import UserFilter
from bot_graphql.filter.user_joined_game_server_filter import UserJoinedGameServerFilter
from bot_graphql.filter.user_joined_server_filter import UserJoinedServerFilter
from bot_graphql.filter.user_joined_voice_channel_filter import UserJoinedVoiceChannelFilter
from modules.achievements.achievement_service import AchievementService
class Query(QueryABC):
@@ -37,6 +38,7 @@ class Query(QueryABC):
user_joined_game_server: UserJoinedGameServerRepositoryABC,
users: UserRepositoryABC,
achievements: AchievementRepositoryABC,
achievement_service: AchievementService,
):
QueryABC.__init__(self, "Query")
@@ -65,6 +67,8 @@ class Query(QueryABC):
self.add_collection("achievement", lambda *_: achievements.get_achievements(), AchievementFilter)
self.set_field("guilds", self._resolve_guilds)
self.set_field("AchievementAttributes", lambda x, *_: achievement_service.get_attributes())
self.set_field("AchievementOperators", lambda x, *_: ["==", "!=", "<=", ">=", "<", ">"])
def _resolve_guilds(self, *_, filter=None):
if filter is None or "id" not in filter: