Improved game server handling for ontime #238

This commit is contained in:
2023-03-05 13:47:30 +01:00
parent 15dfc3f47c
commit 34c362a391
14 changed files with 412 additions and 76 deletions

View File

@@ -3,7 +3,6 @@ type User implements TableQuery {
discordId: String
name: String
xp: Int
minecraftId: String
ontime: Float
level: Level
@@ -28,7 +27,6 @@ input UserFilter {
discordId: String
name: String
xp: Int
minecraftId: String
ontime: Float
level: LevelFilter
server: ServerFilter

View File

@@ -20,9 +20,9 @@ input UserJoinedGameServerFilter {
type UserJoinedGameServerMutation {
userJoined(input: UserJoinedGameServerInput!): UserJoinedGameServer
userLeaved(input: UserJoinedGameServerInput!): UserJoinedGameServer
userLeft(input: UserJoinedGameServerInput!): UserJoinedGameServer
}
input UserJoinedGameServerInput {
userId: ID!
ident: String!
}

View File

@@ -11,6 +11,7 @@ from bot_api.configuration.authentication_settings import AuthenticationSettings
from bot_data.abc.api_key_repository_abc import ApiKeyRepositoryABC
from bot_data.abc.game_server_repository_abc import GameServerRepositoryABC
from bot_data.abc.server_repository_abc import ServerRepositoryABC
from bot_data.abc.user_game_ident_repository_abc import UserGameIdentRepositoryABC
from bot_data.abc.user_joined_game_server_repository_abc import UserJoinedGameServerRepositoryABC
from bot_data.abc.user_repository_abc import UserRepositoryABC
from bot_data.model.api_key import ApiKey
@@ -32,6 +33,7 @@ class UserJoinedGameServerMutation(QueryABC):
user_joined_game_servers: UserJoinedGameServerRepositoryABC,
api_keys: ApiKeyRepositoryABC,
game_servers: GameServerRepositoryABC,
user_game_idents: UserGameIdentRepositoryABC,
bot: DiscordBotServiceABC,
db: DatabaseContextABC,
permissions: PermissionService,
@@ -46,13 +48,14 @@ class UserJoinedGameServerMutation(QueryABC):
self._user_joined_game_servers = user_joined_game_servers
self._api_keys = api_keys
self._game_servers = game_servers
self._user_game_idents = user_game_idents
self._bot = bot
self._db = db
self._permissions = permissions
self._auth_settings = auth_settings
self.set_field("userJoined", self.resolve_user_joined)
self.set_field("userLeaved", self.resolve_user_leaved)
self.set_field("userLeft", self.resolve_user_left)
def _get_api_key_str(self, api_key: ApiKey) -> str:
return hashlib.sha256(
@@ -72,7 +75,14 @@ class UserJoinedGameServerMutation(QueryABC):
)
def resolve_user_joined(self, *_, input: dict):
user = self._users.get_user_by_id(input["userId"])
api_key = self._get_api_key()
if api_key is None:
self._logger.warn(__name__, f"UserJoinedGameServer not saved. Api-Key not available!")
return
game_server = self._game_servers.get_game_server_by_api_key_id(api_key.id)
game_ident = self._user_game_idents.get_user_game_ident_by_ident(input["ident"])
user = game_ident.user
self._can_user_mutate_data(user.server, UserRoleEnum.admin)
active = self._user_joined_game_servers.find_active_user_joined_game_server_by_user_id(user.id)
@@ -83,21 +93,27 @@ class UserJoinedGameServerMutation(QueryABC):
)
return
api_key = self._get_api_key()
game_server = self._game_servers.get_game_server_by_api_key_id(api_key.id)
new = UserJoinedGameServer(user, game_server, datetime.now())
self._user_joined_game_servers.add_user_joined_game_server(new)
self._db.save_changes()
return self._user_joined_game_servers.get_active_user_joined_game_server_by_user_id(user.id)
def resolve_user_leaved(self, *_, input: dict):
user = self._users.get_user_by_id(input["userId"])
def resolve_user_left(self, *_, input: dict):
api_key = self._get_api_key()
if api_key is None:
self._logger.warn(__name__, f"UserJoinedGameServer not saved. Api-Key not available!")
return
game_ident = self._user_game_idents.find_user_game_ident_by_ident(input["ident"])
if game_ident is None:
return
user = game_ident.user
self._can_user_mutate_data(user.server, UserRoleEnum.admin)
active = self._user_joined_game_servers.find_active_user_joined_game_server_by_user_id(user.id)
if active is None:
return None
return
active.leaved_on = datetime.now()
settings: BaseServerSettings = self._base_helper.get_config(user.server.discord_id)

View File

@@ -38,7 +38,6 @@ class UserQuery(DataQueryABC):
self.set_field("discordId", self.resolve_discord_id)
self.set_field("name", self.resolve_name)
self.set_field("xp", self.resolve_xp)
self.set_field("minecraftId", self.resolve_minecraft_id)
self.set_field("ontime", self.resolve_ontime)
self.set_field("level", self.resolve_level)
self.add_collection(
@@ -75,10 +74,6 @@ class UserQuery(DataQueryABC):
def resolve_xp(user: User, *_):
return user.xp
@staticmethod
def resolve_minecraft_id(user: User, *_):
return user.minecraft_id
@staticmethod
def resolve_ontime(user: User, *_):
return user.ontime