Improved queries & filtering #162
This commit is contained in:
parent
807827e30f
commit
16066864ed
@ -1,20 +0,0 @@
|
|||||||
from datetime import datetime
|
|
||||||
|
|
||||||
from bot_graphql.abc.query_type_abc import QueryTypeABC
|
|
||||||
|
|
||||||
|
|
||||||
class DiscordQueryTypeABC(QueryTypeABC):
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
id: str,
|
|
||||||
discord_id: str,
|
|
||||||
created_at: datetime = None,
|
|
||||||
modified_at: datetime = None,
|
|
||||||
):
|
|
||||||
QueryTypeABC.__init__(self, id, created_at, modified_at)
|
|
||||||
|
|
||||||
self._discord_id = discord_id
|
|
||||||
|
|
||||||
@property
|
|
||||||
def discord_id(self) -> str:
|
|
||||||
return self._discord_id
|
|
@ -1,7 +1,6 @@
|
|||||||
import functools
|
import functools
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
from inspect import signature, Parameter
|
from inspect import signature, Parameter
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
from cpl_core.dependency_injection import ServiceProviderABC
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
@ -11,35 +10,6 @@ class FilterABC(ABC):
|
|||||||
def __init__(self):
|
def __init__(self):
|
||||||
ABC.__init__(self)
|
ABC.__init__(self)
|
||||||
|
|
||||||
self._page_index = None
|
|
||||||
self._page_size = None
|
|
||||||
self._sort_direction = None
|
|
||||||
self._sort_column = None
|
|
||||||
|
|
||||||
@property
|
|
||||||
def page_index(self) -> Optional[int]:
|
|
||||||
return self._page_index
|
|
||||||
|
|
||||||
@property
|
|
||||||
def page_size(self) -> Optional[int]:
|
|
||||||
return self._page_size
|
|
||||||
|
|
||||||
@property
|
|
||||||
def sort_direction(self) -> Optional[str]:
|
|
||||||
return self._sort_direction
|
|
||||||
|
|
||||||
@property
|
|
||||||
def sort_column(self) -> Optional[str]:
|
|
||||||
return self._sort_column
|
|
||||||
|
|
||||||
def skip_and_take(self, query: List):
|
|
||||||
if self._page_size is not None and self.page_index is not None:
|
|
||||||
skip = self.page_size * self.page_index
|
|
||||||
result = query.skip(skip).take(self.page_size)
|
|
||||||
return result
|
|
||||||
|
|
||||||
return query
|
|
||||||
|
|
||||||
@abstractmethod
|
@abstractmethod
|
||||||
def from_dict(self, values: dict):
|
def from_dict(self, values: dict):
|
||||||
pass
|
pass
|
||||||
|
@ -4,6 +4,8 @@ from ariadne import ObjectType
|
|||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
|
||||||
from bot_graphql.abc.filter_abc import FilterABC
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
|
from bot_graphql.filter.page import Page
|
||||||
|
from bot_graphql.filter.sort import Sort
|
||||||
|
|
||||||
|
|
||||||
class QueryABC(ObjectType):
|
class QueryABC(ObjectType):
|
||||||
@ -19,12 +21,30 @@ class QueryABC(ObjectType):
|
|||||||
else:
|
else:
|
||||||
kwargs["filter"] = None
|
kwargs["filter"] = None
|
||||||
|
|
||||||
|
if "page" in kwargs:
|
||||||
|
page = Page()
|
||||||
|
page.from_dict(kwargs["page"])
|
||||||
|
kwargs["page"] = page
|
||||||
|
|
||||||
|
if "sort" in kwargs:
|
||||||
|
sort = Sort()
|
||||||
|
sort.from_dict(kwargs["sort"])
|
||||||
|
kwargs["sort"] = sort
|
||||||
|
|
||||||
return self._resolve_collection(get_collection(*args), *args, **kwargs)
|
return self._resolve_collection(get_collection(*args), *args, **kwargs)
|
||||||
|
|
||||||
self.set_field(f"{name}s", wrapper)
|
self.set_field(f"{name}s", wrapper)
|
||||||
self.set_field(f"{name}_count", lambda *args: get_collection(*args).count())
|
self.set_field(f"{name}_count", lambda *args: get_collection(*args).count())
|
||||||
|
|
||||||
def _resolve_collection(self, collection: List, *_, filter: FilterABC = None):
|
# @FilterABC.resolve_filter_annotation
|
||||||
|
def _resolve_collection(self, collection: List, *_, filter: FilterABC = None, page: Page = None, sort: Sort = None):
|
||||||
if filter is not None:
|
if filter is not None:
|
||||||
return filter.filter(collection)
|
return filter.filter(collection)
|
||||||
|
|
||||||
|
if page is not None:
|
||||||
|
return page.filter(collection)
|
||||||
|
|
||||||
|
if sort is not None:
|
||||||
|
return sort.filter(collection)
|
||||||
|
|
||||||
return collection
|
return collection
|
||||||
|
@ -1,29 +0,0 @@
|
|||||||
from abc import ABC
|
|
||||||
from datetime import datetime
|
|
||||||
from typing import Optional
|
|
||||||
|
|
||||||
|
|
||||||
class QueryTypeABC(ABC):
|
|
||||||
def __init__(
|
|
||||||
self,
|
|
||||||
id: str,
|
|
||||||
created_at: datetime = None,
|
|
||||||
modified_at: datetime = None,
|
|
||||||
):
|
|
||||||
ABC.__init__(self)
|
|
||||||
|
|
||||||
self._id = id
|
|
||||||
self._created_at = created_at
|
|
||||||
self._modified_at = modified_at
|
|
||||||
|
|
||||||
@property
|
|
||||||
def id(self) -> str:
|
|
||||||
return self._id
|
|
||||||
|
|
||||||
@property
|
|
||||||
def created_at(self) -> Optional[datetime]:
|
|
||||||
return self._created_at
|
|
||||||
|
|
||||||
@property
|
|
||||||
def modified_at(self) -> Optional[datetime]:
|
|
||||||
return self._modified_at
|
|
@ -35,4 +35,4 @@ class AutoRoleFilter(FilterABC):
|
|||||||
# if self._server_id is not None:
|
# if self._server_id is not None:
|
||||||
# query = query.where(lambda x: x.server.server_id == self._server_id)
|
# query = query.where(lambda x: x.server.server_id == self._server_id)
|
||||||
|
|
||||||
return self.skip_and_take(query)
|
return query
|
||||||
|
@ -42,4 +42,4 @@ class AutoRoleRuleFilter(FilterABC):
|
|||||||
# if self._server_id is not None:
|
# if self._server_id is not None:
|
||||||
# query = query.where(lambda x: x.server.server_id == self._server_id)
|
# query = query.where(lambda x: x.server.server_id == self._server_id)
|
||||||
|
|
||||||
return self.skip_and_take(query)
|
return query
|
||||||
|
@ -17,7 +17,7 @@ class LevelFilter(FilterABC):
|
|||||||
self._id = values["id"]
|
self._id = values["id"]
|
||||||
|
|
||||||
if "name" in values:
|
if "name" in values:
|
||||||
self._id = values["name"]
|
self._name = values["name"]
|
||||||
|
|
||||||
def filter(self, query: List[Level]) -> List[Level]:
|
def filter(self, query: List[Level]) -> List[Level]:
|
||||||
if self._id is not None:
|
if self._id is not None:
|
||||||
@ -26,4 +26,4 @@ class LevelFilter(FilterABC):
|
|||||||
if self._name is not None:
|
if self._name is not None:
|
||||||
query = query.where(lambda x: self._name.lower() == x.name.lower() or self._name.lower() in x.name.lower())
|
query = query.where(lambda x: self._name.lower() == x.name.lower() or self._name.lower() in x.name.lower())
|
||||||
|
|
||||||
return self.skip_and_take(query)
|
return query
|
||||||
|
25
kdb-bot/src/bot_graphql/filter/page.py
Normal file
25
kdb-bot/src/bot_graphql/filter/page.py
Normal file
@ -0,0 +1,25 @@
|
|||||||
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
|
|
||||||
|
|
||||||
|
class Page(FilterABC):
|
||||||
|
def __init__(self):
|
||||||
|
FilterABC.__init__(self)
|
||||||
|
self._page_index = None
|
||||||
|
self._page_size = None
|
||||||
|
|
||||||
|
def from_dict(self, values: dict):
|
||||||
|
if "page_index" in values:
|
||||||
|
self._page_index = values["page_index"]
|
||||||
|
|
||||||
|
if "page_size" in values:
|
||||||
|
self._page_size = values["page_size"]
|
||||||
|
|
||||||
|
def filter(self, query: List, *args) -> List:
|
||||||
|
if self._page_size is not None and self._page_index is not None:
|
||||||
|
skip = self._page_size * self._page_index
|
||||||
|
result = query.skip(skip).take(self._page_size)
|
||||||
|
return result
|
||||||
|
|
||||||
|
return query
|
@ -19,6 +19,12 @@ class ServerFilter(FilterABC):
|
|||||||
if "id" in values:
|
if "id" in values:
|
||||||
self._id = int(values["id"])
|
self._id = int(values["id"])
|
||||||
|
|
||||||
|
if "discord_id" in values:
|
||||||
|
self._discord_id = values["discord_id"]
|
||||||
|
|
||||||
|
if "name" in values:
|
||||||
|
self._name = values["name"]
|
||||||
|
|
||||||
@ServiceProviderABC.inject
|
@ServiceProviderABC.inject
|
||||||
def filter(self, query: List[Server], bot: DiscordBotServiceABC) -> List[Server]:
|
def filter(self, query: List[Server], bot: DiscordBotServiceABC) -> List[Server]:
|
||||||
if self._id is not None:
|
if self._id is not None:
|
||||||
@ -37,4 +43,4 @@ class ServerFilter(FilterABC):
|
|||||||
|
|
||||||
query = query.where(where_guild)
|
query = query.where(where_guild)
|
||||||
|
|
||||||
return self.skip_and_take(query)
|
return query
|
||||||
|
20
kdb-bot/src/bot_graphql/filter/sort.py
Normal file
20
kdb-bot/src/bot_graphql/filter/sort.py
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
from cpl_query.extension import List
|
||||||
|
|
||||||
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
|
|
||||||
|
|
||||||
|
class Sort(FilterABC):
|
||||||
|
def __init__(self):
|
||||||
|
FilterABC.__init__(self)
|
||||||
|
self._sort_direction = None
|
||||||
|
self._sort_column = None
|
||||||
|
|
||||||
|
def from_dict(self, values: dict):
|
||||||
|
if "sort_direction" in values:
|
||||||
|
self._sort_direction = values["sort_direction"]
|
||||||
|
|
||||||
|
if "sort_column" in values:
|
||||||
|
self._sort_column = values["sort_column"]
|
||||||
|
|
||||||
|
def filter(self, query: List, *args) -> List:
|
||||||
|
return query
|
@ -1,21 +1,27 @@
|
|||||||
|
from typing import Optional
|
||||||
|
|
||||||
|
from cpl_core.dependency_injection import ServiceProviderABC
|
||||||
from cpl_discord.service import DiscordBotServiceABC
|
from cpl_discord.service import DiscordBotServiceABC
|
||||||
from cpl_query.extension import List
|
from cpl_query.extension import List
|
||||||
|
|
||||||
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
from bot_core.abc.client_utils_abc import ClientUtilsABC
|
||||||
from bot_data.model.user import User
|
from bot_data.model.user import User
|
||||||
from bot_graphql.abc.filter_abc import FilterABC
|
from bot_graphql.abc.filter_abc import FilterABC
|
||||||
|
from bot_graphql.filter.level_filter import LevelFilter
|
||||||
from modules.level.service.level_service import LevelService
|
from modules.level.service.level_service import LevelService
|
||||||
|
|
||||||
|
|
||||||
class UserFilter(FilterABC):
|
class UserFilter(FilterABC):
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
services: ServiceProviderABC,
|
||||||
bot: DiscordBotServiceABC,
|
bot: DiscordBotServiceABC,
|
||||||
client_utils: ClientUtilsABC,
|
client_utils: ClientUtilsABC,
|
||||||
levels: LevelService,
|
levels: LevelService,
|
||||||
):
|
):
|
||||||
FilterABC.__init__(self)
|
FilterABC.__init__(self)
|
||||||
|
|
||||||
|
self._services = services
|
||||||
self._bot = bot
|
self._bot = bot
|
||||||
self._client_utils = client_utils
|
self._client_utils = client_utils
|
||||||
self._levels = levels
|
self._levels = levels
|
||||||
@ -25,7 +31,7 @@ class UserFilter(FilterABC):
|
|||||||
self._name = None
|
self._name = None
|
||||||
self._xp = None
|
self._xp = None
|
||||||
self._ontime = None
|
self._ontime = None
|
||||||
self._level = None
|
self._level: Optional[LevelFilter] = None
|
||||||
|
|
||||||
def from_dict(self, values: dict):
|
def from_dict(self, values: dict):
|
||||||
if "id" in values:
|
if "id" in values:
|
||||||
@ -39,7 +45,8 @@ class UserFilter(FilterABC):
|
|||||||
if "ontime" in values:
|
if "ontime" in values:
|
||||||
self._ontime = values["ontime"]
|
self._ontime = values["ontime"]
|
||||||
if "level" in values:
|
if "level" in values:
|
||||||
self._level = values["level"]
|
self._level: LevelFilter = self._services.get_service(LevelFilter)
|
||||||
|
self._level.from_dict(values["level"])
|
||||||
|
|
||||||
def filter(self, query: List[User]) -> List[User]:
|
def filter(self, query: List[User]) -> List[User]:
|
||||||
if self._id is not None:
|
if self._id is not None:
|
||||||
@ -61,6 +68,7 @@ class UserFilter(FilterABC):
|
|||||||
query = query.where(lambda x: self._client_utils.get_ontime_for_user(x) == self._ontime)
|
query = query.where(lambda x: self._client_utils.get_ontime_for_user(x) == self._ontime)
|
||||||
|
|
||||||
if self._level is not None:
|
if self._level is not None:
|
||||||
query = query.where(lambda x: self._levels.get_level(x) == self._level)
|
levels = self._level.filter(query.select(lambda x: self._levels.get_level(x))).select(lambda x: x.id)
|
||||||
|
query = query.where(lambda x: self._levels.get_level(x).id in levels)
|
||||||
|
|
||||||
return self.skip_and_take(query)
|
return query
|
||||||
|
@ -1,212 +0,0 @@
|
|||||||
interface TableQuery {
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type Mutation {
|
|
||||||
level: LevelMutation
|
|
||||||
}
|
|
||||||
|
|
||||||
type Query {
|
|
||||||
auto_roles: [AutoRole]
|
|
||||||
auto_role_count: Int
|
|
||||||
|
|
||||||
auto_role_rules: [AutoRole]
|
|
||||||
auto_role_rule_count: Int
|
|
||||||
|
|
||||||
clients: [Client]
|
|
||||||
client_count: Int
|
|
||||||
|
|
||||||
known_users: [KnownUser]
|
|
||||||
known_user_count: Int
|
|
||||||
|
|
||||||
levels: [Level]
|
|
||||||
level_count: Int
|
|
||||||
|
|
||||||
servers(filter: ServerFilter): [Server]
|
|
||||||
server_count: Int
|
|
||||||
|
|
||||||
user_joined_servers: [User]
|
|
||||||
user_joined_server_count: Int
|
|
||||||
|
|
||||||
user_joined_voice_channels: [User]
|
|
||||||
user_joined_voice_channel_count: Int
|
|
||||||
|
|
||||||
users(filter: UserFilter): [User]
|
|
||||||
user_count: Int
|
|
||||||
}
|
|
||||||
|
|
||||||
type KnownUser implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
discord_id: String
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
input ServerFilter {
|
|
||||||
id: ID
|
|
||||||
discord_id: String
|
|
||||||
name: String
|
|
||||||
|
|
||||||
page_index: Int
|
|
||||||
page_size: Int
|
|
||||||
sort_direction: String
|
|
||||||
sort_column: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type Server implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
discord_id: String
|
|
||||||
name: String
|
|
||||||
|
|
||||||
auto_roles: [AutoRole]
|
|
||||||
auto_role_count: Int
|
|
||||||
|
|
||||||
clients: [Client]
|
|
||||||
client_count: Int
|
|
||||||
|
|
||||||
users(filter: UserFilter): [User]
|
|
||||||
user_count: Int
|
|
||||||
|
|
||||||
levels: [Level]
|
|
||||||
level_count: Int
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type Client implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
discord_id: String
|
|
||||||
name: String
|
|
||||||
sent_message_count: Int
|
|
||||||
received_message_count: Int
|
|
||||||
deleted_message_count: Int
|
|
||||||
received_command_count: Int
|
|
||||||
moved_users_count: Int
|
|
||||||
|
|
||||||
server: Server
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type AutoRole implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
channel_id: String
|
|
||||||
message_id: String
|
|
||||||
|
|
||||||
server: Server
|
|
||||||
|
|
||||||
auto_role_rules: [AutoRoleRule]
|
|
||||||
auto_role_rule_count: Int
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type AutoRoleRule implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
emoji_name: String
|
|
||||||
role_id: String
|
|
||||||
|
|
||||||
auto_role: AutoRole
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
input UserFilter {
|
|
||||||
id: ID
|
|
||||||
discord_id: String
|
|
||||||
name: String
|
|
||||||
xp: Int
|
|
||||||
ontime: Float
|
|
||||||
level: LevelFilter
|
|
||||||
|
|
||||||
page_index: Int
|
|
||||||
page_size: Int
|
|
||||||
sort_direction: String
|
|
||||||
sort_column: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type User implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
discord_id: String
|
|
||||||
name: String
|
|
||||||
xp: Int
|
|
||||||
ontime: Float
|
|
||||||
level: Level
|
|
||||||
|
|
||||||
joined_servers: [UserJoinedServer]
|
|
||||||
joined_server_count: Int
|
|
||||||
|
|
||||||
joined_voice_channels: [UserJoinedVoiceChannel]
|
|
||||||
joined_voice_channel_count: Int
|
|
||||||
|
|
||||||
server: Server
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserJoinedServer implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
user: User
|
|
||||||
server: Server
|
|
||||||
joined_on: String
|
|
||||||
leaved_on: String
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type UserJoinedVoiceChannel implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
channel_id: String
|
|
||||||
user: User
|
|
||||||
server: Server
|
|
||||||
joined_on: String
|
|
||||||
leaved_on: String
|
|
||||||
|
|
||||||
created_at: String
|
|
||||||
modified_at: String
|
|
||||||
}
|
|
||||||
|
|
||||||
input LevelFilter {
|
|
||||||
id: ID
|
|
||||||
name: String
|
|
||||||
|
|
||||||
page_index: Int
|
|
||||||
page_size: Int
|
|
||||||
sort_direction: String
|
|
||||||
sort_column: String
|
|
||||||
}
|
|
||||||
|
|
||||||
type Level implements TableQuery {
|
|
||||||
id: ID
|
|
||||||
name: String
|
|
||||||
color: String
|
|
||||||
min_xp: Int
|
|
||||||
permissions: String
|
|
||||||
|
|
||||||
server: Server
|
|
||||||
|
|
||||||
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
|
|
||||||
}
|
|
13
kdb-bot/src/bot_graphql/model/auto_role.gql
Normal file
13
kdb-bot/src/bot_graphql/model/auto_role.gql
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
type AutoRole implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
channel_id: String
|
||||||
|
message_id: String
|
||||||
|
|
||||||
|
server: Server
|
||||||
|
|
||||||
|
auto_role_rules: [AutoRoleRule]
|
||||||
|
auto_role_rule_count: Int
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
10
kdb-bot/src/bot_graphql/model/auto_role_rule.gql
Normal file
10
kdb-bot/src/bot_graphql/model/auto_role_rule.gql
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
type AutoRoleRule implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
emoji_name: String
|
||||||
|
role_id: String
|
||||||
|
|
||||||
|
auto_role: AutoRole
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
14
kdb-bot/src/bot_graphql/model/base.gql
Normal file
14
kdb-bot/src/bot_graphql/model/base.gql
Normal file
@ -0,0 +1,14 @@
|
|||||||
|
interface TableQuery {
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input Page {
|
||||||
|
page_index: Int
|
||||||
|
page_size: Int
|
||||||
|
}
|
||||||
|
|
||||||
|
input Sort {
|
||||||
|
sort_direction: String
|
||||||
|
sort_column: String
|
||||||
|
}
|
15
kdb-bot/src/bot_graphql/model/client.gql
Normal file
15
kdb-bot/src/bot_graphql/model/client.gql
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
type Client implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
discord_id: String
|
||||||
|
name: String
|
||||||
|
sent_message_count: Int
|
||||||
|
received_message_count: Int
|
||||||
|
deleted_message_count: Int
|
||||||
|
received_command_count: Int
|
||||||
|
moved_users_count: Int
|
||||||
|
|
||||||
|
server: Server
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
7
kdb-bot/src/bot_graphql/model/known_user.gql
Normal file
7
kdb-bot/src/bot_graphql/model/known_user.gql
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
type KnownUser implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
discord_id: String
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
31
kdb-bot/src/bot_graphql/model/level.gql
Normal file
31
kdb-bot/src/bot_graphql/model/level.gql
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
type Level implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
name: String
|
||||||
|
color: String
|
||||||
|
min_xp: Int
|
||||||
|
permissions: String
|
||||||
|
|
||||||
|
server: Server
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input LevelFilter {
|
||||||
|
id: ID
|
||||||
|
name: String
|
||||||
|
}
|
||||||
|
|
||||||
|
type LevelMutation {
|
||||||
|
create_level(input: LevelInput!): Level
|
||||||
|
update_level(input: LevelInput!): Level
|
||||||
|
delete_level(id: ID): Level
|
||||||
|
}
|
||||||
|
|
||||||
|
input LevelInput {
|
||||||
|
name: String!
|
||||||
|
color: String!
|
||||||
|
min_xp: Int!
|
||||||
|
permissions: String!
|
||||||
|
server_id: ID!
|
||||||
|
}
|
3
kdb-bot/src/bot_graphql/model/mutation.gql
Normal file
3
kdb-bot/src/bot_graphql/model/mutation.gql
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
type Mutation {
|
||||||
|
level: LevelMutation
|
||||||
|
}
|
28
kdb-bot/src/bot_graphql/model/query.gql
Normal file
28
kdb-bot/src/bot_graphql/model/query.gql
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
type Query {
|
||||||
|
auto_roles: [AutoRole]
|
||||||
|
auto_role_count: Int
|
||||||
|
|
||||||
|
auto_role_rules: [AutoRole]
|
||||||
|
auto_role_rule_count: Int
|
||||||
|
|
||||||
|
clients: [Client]
|
||||||
|
client_count: Int
|
||||||
|
|
||||||
|
known_users: [KnownUser]
|
||||||
|
known_user_count: Int
|
||||||
|
|
||||||
|
levels(filter: LevelFilter, page: Page, sort: Sort): [Level]
|
||||||
|
level_count: Int
|
||||||
|
|
||||||
|
servers(filter: ServerFilter, page: Page, sort: Sort): [Server]
|
||||||
|
server_count: Int
|
||||||
|
|
||||||
|
user_joined_servers: [User]
|
||||||
|
user_joined_server_count: Int
|
||||||
|
|
||||||
|
user_joined_voice_channels: [User]
|
||||||
|
user_joined_voice_channel_count: Int
|
||||||
|
|
||||||
|
users(filter: UserFilter, page: Page, sort: Sort): [User]
|
||||||
|
user_count: Int
|
||||||
|
}
|
26
kdb-bot/src/bot_graphql/model/server.gql
Normal file
26
kdb-bot/src/bot_graphql/model/server.gql
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
type Server implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
discord_id: String
|
||||||
|
name: String
|
||||||
|
|
||||||
|
auto_roles: [AutoRole]
|
||||||
|
auto_role_count: Int
|
||||||
|
|
||||||
|
clients: [Client]
|
||||||
|
client_count: Int
|
||||||
|
|
||||||
|
users(filter: UserFilter): [User]
|
||||||
|
user_count: Int
|
||||||
|
|
||||||
|
levels: [Level]
|
||||||
|
level_count: Int
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input ServerFilter {
|
||||||
|
id: ID
|
||||||
|
discord_id: String
|
||||||
|
name: String
|
||||||
|
}
|
28
kdb-bot/src/bot_graphql/model/user.gql
Normal file
28
kdb-bot/src/bot_graphql/model/user.gql
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
type User implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
discord_id: String
|
||||||
|
name: String
|
||||||
|
xp: Int
|
||||||
|
ontime: Float
|
||||||
|
level: Level
|
||||||
|
|
||||||
|
joined_servers: [UserJoinedServer]
|
||||||
|
joined_server_count: Int
|
||||||
|
|
||||||
|
joined_voice_channels: [UserJoinedVoiceChannel]
|
||||||
|
joined_voice_channel_count: Int
|
||||||
|
|
||||||
|
server: Server
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
||||||
|
|
||||||
|
input UserFilter {
|
||||||
|
id: ID
|
||||||
|
discord_id: String
|
||||||
|
name: String
|
||||||
|
xp: Int
|
||||||
|
ontime: Float
|
||||||
|
level: LevelFilter
|
||||||
|
}
|
10
kdb-bot/src/bot_graphql/model/user_joined_server.gql
Normal file
10
kdb-bot/src/bot_graphql/model/user_joined_server.gql
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
type UserJoinedServer implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
user: User
|
||||||
|
server: Server
|
||||||
|
joined_on: String
|
||||||
|
leaved_on: String
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
11
kdb-bot/src/bot_graphql/model/user_joined_voice_channel.gql
Normal file
11
kdb-bot/src/bot_graphql/model/user_joined_voice_channel.gql
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
type UserJoinedVoiceChannel implements TableQuery {
|
||||||
|
id: ID
|
||||||
|
channel_id: String
|
||||||
|
user: User
|
||||||
|
server: Server
|
||||||
|
joined_on: String
|
||||||
|
leaved_on: String
|
||||||
|
|
||||||
|
created_at: String
|
||||||
|
modified_at: String
|
||||||
|
}
|
@ -10,7 +10,7 @@ from bot_graphql.query import Query
|
|||||||
|
|
||||||
class Schema:
|
class Schema:
|
||||||
def __init__(self, query: Query, mutation: Mutation, queries: list[QueryABC]):
|
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"))
|
type_defs = load_schema_from_path(os.path.join(os.path.dirname(os.path.realpath(__file__)), "model/"))
|
||||||
self._schema = make_executable_schema(type_defs, query, mutation, *queries)
|
self._schema = make_executable_schema(type_defs, query, mutation, *queries)
|
||||||
|
|
||||||
@property
|
@property
|
||||||
|
Loading…
Reference in New Issue
Block a user