GraphQL Part1 (gql endpoint only) #162 #192
@ -8,6 +8,8 @@ from bot_core.configuration.feature_flags_enum import FeatureFlagsEnum
|
||||
from bot_data.service.seeder_service import SeederService
|
||||
from bot_graphql.abc.query_abc import QueryABC
|
||||
from bot_graphql.graphql_service import GraphQLService
|
||||
from bot_graphql.mutation import Mutation
|
||||
from bot_graphql.mutations.level_mutation import LevelMutation
|
||||
from bot_graphql.queries.level_query import LevelQuery
|
||||
from bot_graphql.queries.server_query import ServerQuery
|
||||
from bot_graphql.query import Query
|
||||
@ -27,7 +29,9 @@ class GraphQLModule(ModuleABC):
|
||||
services.add_singleton(Schema)
|
||||
services.add_singleton(GraphQLService)
|
||||
services.add_singleton(Query)
|
||||
services.add_singleton(Mutation)
|
||||
services.add_transient(QueryABC, ServerQuery)
|
||||
services.add_transient(QueryABC, LevelQuery)
|
||||
services.add_transient(QueryABC, LevelMutation)
|
||||
|
||||
services.add_transient(SeederService)
|
||||
|
@ -1,14 +1,18 @@
|
||||
interface TableQuery {
|
||||
created_at: String
|
||||
modified_at: String
|
||||
}
|
||||
|
||||
type Mutation {
|
||||
level: LevelMutation
|
||||
}
|
||||
|
||||
type Query {
|
||||
servers(filter: ServerFilter): [Server]
|
||||
server_count: Int
|
||||
known_users: [User]
|
||||
}
|
||||
|
||||
interface TableQuery {
|
||||
created_at: String
|
||||
modified_at: String
|
||||
}
|
||||
|
||||
input ServerFilter {
|
||||
id: ID
|
||||
discord_id: String
|
||||
@ -102,4 +106,18 @@ type Level implements TableQuery {
|
||||
|
||||
created_at: String
|
||||
modified_at: String
|
||||
}
|
||||
|
||||
input LevelInput {
|
||||
name: String!
|
||||
color: String!
|
||||
min_xp: Int!
|
||||
permissions: String!
|
||||
server_id: ID!
|
||||
}
|
||||
|
||||
type LevelMutation {
|
||||
create_level(input: LevelInput!): Level
|
||||
update_level(input: LevelInput!): Level
|
||||
delete_level(id: ID): Level
|
||||
}
|
18
kdb-bot/src/bot_graphql/mutation.py
Normal file
18
kdb-bot/src/bot_graphql/mutation.py
Normal file
@ -0,0 +1,18 @@
|
||||
from ariadne import MutationType
|
||||
|
||||
from bot_graphql.mutations.level_mutation import LevelMutation
|
||||
|
||||
|
||||
class Mutation(MutationType):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
level_mutation: LevelMutation
|
||||
):
|
||||
MutationType.__init__(self)
|
||||
|
||||
self._level_mutation = level_mutation
|
||||
self.set_field('level', self.resolve_level)
|
||||
|
||||
def resolve_level(self, *_):
|
||||
return self._level_mutation
|
0
kdb-bot/src/bot_graphql/mutations/__init__.py
Normal file
0
kdb-bot/src/bot_graphql/mutations/__init__.py
Normal file
37
kdb-bot/src/bot_graphql/mutations/level_mutation.py
Normal file
37
kdb-bot/src/bot_graphql/mutations/level_mutation.py
Normal file
@ -0,0 +1,37 @@
|
||||
from bot_data.abc.level_repository_abc import LevelRepositoryABC
|
||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
|
||||
from bot_data.model.level import Level
|
||||
from bot_graphql.abc.query_abc import QueryABC
|
||||
|
||||
|
||||
class LevelMutation(QueryABC):
|
||||
|
||||
def __init__(
|
||||
self,
|
||||
servers: ServerRepositoryABC,
|
||||
levels: LevelRepositoryABC
|
||||
):
|
||||
QueryABC.__init__(self, 'LevelMutation')
|
||||
|
||||
self._servers = servers
|
||||
self._levels = levels
|
||||
|
||||
self.set_field('create_level', self.resolve_create_level)
|
||||
self.set_field('update_level', self.resolve_create_level)
|
||||
self.set_field('delete_level', self.resolve_create_level)
|
||||
|
||||
def resolve_create_level(self, *_, input: dict):
|
||||
level = Level(
|
||||
input['name'],
|
||||
input['color'],
|
||||
int(input['min_xp']),
|
||||
int(input['permissions']),
|
||||
self._servers.get_server_by_id(input['server_id'])
|
||||
)
|
||||
return level
|
||||
|
||||
def resolve_update_level(self, *_, input):
|
||||
return self._levels.get_level_by_id(input.id)
|
||||
|
||||
def resolve_delete_level(self, *_, id: int):
|
||||
return self._levels.get_level_by_id(id)
|
@ -4,6 +4,7 @@ from ariadne import make_executable_schema, load_schema_from_path
|
||||
from graphql import GraphQLSchema
|
||||
|
||||
from bot_graphql.abc.query_abc import QueryABC
|
||||
from bot_graphql.mutation import Mutation
|
||||
from bot_graphql.query import Query
|
||||
|
||||
|
||||
@ -12,10 +13,11 @@ class Schema:
|
||||
def __init__(
|
||||
self,
|
||||
query: Query,
|
||||
mutation: Mutation,
|
||||
queries: list[QueryABC]
|
||||
):
|
||||
type_defs = load_schema_from_path(os.path.join(os.path.dirname(os.path.realpath(__file__)), 'model.gql'))
|
||||
self._schema = make_executable_schema(type_defs, query, *queries)
|
||||
self._schema = make_executable_schema(type_defs, query, mutation, *queries)
|
||||
|
||||
@property
|
||||
def schema(self) -> GraphQLSchema:
|
||||
|
Loading…
Reference in New Issue
Block a user