Improved get server logic #72
This commit is contained in:
		@@ -15,6 +15,7 @@ from bot_api.transformer.server_transformer import ServerTransformer
 | 
			
		||||
from bot_data.abc.server_repository_abc import ServerRepositoryABC
 | 
			
		||||
from bot_data.abc.user_repository_abc import UserRepositoryABC
 | 
			
		||||
from bot_data.model.auth_role_enum import AuthRoleEnum
 | 
			
		||||
from bot_data.model.server import Server
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class DiscordService:
 | 
			
		||||
@@ -31,14 +32,26 @@ class DiscordService:
 | 
			
		||||
        self._auth = auth
 | 
			
		||||
        self._users = users
 | 
			
		||||
 | 
			
		||||
    def _to_dto(self, x: Server) -> Optional[ServerDTO]:
 | 
			
		||||
        guild = self._bot.get_guild(x.discord_server_id)
 | 
			
		||||
        if guild is None:
 | 
			
		||||
            return ServerTransformer.to_dto(
 | 
			
		||||
                x,
 | 
			
		||||
                '',
 | 
			
		||||
                0,
 | 
			
		||||
                None
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
        return ServerTransformer.to_dto(
 | 
			
		||||
                x,
 | 
			
		||||
                guild.name,
 | 
			
		||||
                guild.member_count,
 | 
			
		||||
                guild.icon
 | 
			
		||||
            )
 | 
			
		||||
 | 
			
		||||
    async def get_all_servers(self) -> List[ServerDTO]:
 | 
			
		||||
        servers = self._servers.get_servers()
 | 
			
		||||
        return servers.select(lambda x: ServerTransformer.to_dto(
 | 
			
		||||
            x,
 | 
			
		||||
            self._bot.get_guild(x.discord_server_id).name,
 | 
			
		||||
            self._bot.get_guild(x.discord_server_id).member_count,
 | 
			
		||||
            self._bot.get_guild(x.discord_server_id).icon
 | 
			
		||||
        ))
 | 
			
		||||
        servers = List(ServerDTO, self._servers.get_servers())
 | 
			
		||||
        return servers.select(self._to_dto).where(lambda x: x.name != '')
 | 
			
		||||
 | 
			
		||||
    async def get_all_servers_by_user(self) -> List[ServerDTO]:
 | 
			
		||||
        token = self._auth.get_decoded_token_from_request()
 | 
			
		||||
@@ -53,12 +66,8 @@ class DiscordService:
 | 
			
		||||
            user_from_db = self._users.find_user_by_id(0 if user.user_id is None else user.user_id)
 | 
			
		||||
            servers = self._servers.get_servers().where(lambda x: user_from_db is not None and x.server_id == user_from_db.server.server_id)
 | 
			
		||||
 | 
			
		||||
        return servers.select(lambda x: ServerTransformer.to_dto(
 | 
			
		||||
            x,
 | 
			
		||||
            self._bot.get_guild(x.discord_server_id).name,
 | 
			
		||||
            self._bot.get_guild(x.discord_server_id).member_count,
 | 
			
		||||
            self._bot.get_guild(x.discord_server_id).icon
 | 
			
		||||
        ))
 | 
			
		||||
        servers = List(ServerDTO, servers)
 | 
			
		||||
        return servers.select(self._to_dto).where(lambda x: x.name != '')
 | 
			
		||||
 | 
			
		||||
    async def get_filtered_servers_async(self, criteria: ServerSelectCriteria) -> ServerFilteredResultDTO:
 | 
			
		||||
        token = self._auth.get_decoded_token_from_request()
 | 
			
		||||
@@ -67,27 +76,21 @@ class DiscordService:
 | 
			
		||||
 | 
			
		||||
        role = AuthRoleEnum(token['role'])
 | 
			
		||||
        filtered_result = self._servers.get_filtered_servers(criteria)
 | 
			
		||||
        servers = filtered_result.result
 | 
			
		||||
        # filter out servers, where the user not exists
 | 
			
		||||
        if role != AuthRoleEnum.admin:
 | 
			
		||||
            user = await self._auth.find_auth_user_by_email_async(token['email'])
 | 
			
		||||
            user_from_db = self._users.find_user_by_id(0 if user.user_id is None else user.user_id)
 | 
			
		||||
            servers = servers.where(lambda x: user_from_db is not None and x.server_id == user_from_db.server.server_id)
 | 
			
		||||
            filtered_result.result = filtered_result.result.where(lambda x: user_from_db is not None and x.server_id == user_from_db.server.server_id)
 | 
			
		||||
 | 
			
		||||
        result = servers.select(
 | 
			
		||||
            lambda x: ServerTransformer.to_dto(
 | 
			
		||||
                x,
 | 
			
		||||
                self._bot.get_guild(x.discord_server_id).name,
 | 
			
		||||
                self._bot.get_guild(x.discord_server_id).member_count,
 | 
			
		||||
                self._bot.get_guild(x.discord_server_id).icon
 | 
			
		||||
            )
 | 
			
		||||
        )
 | 
			
		||||
        servers: List = filtered_result.result.select(self._to_dto).where(lambda x: x.name != '')
 | 
			
		||||
        result = List(ServerDTO, servers)
 | 
			
		||||
 | 
			
		||||
        if criteria.name is not None and criteria.name != '':
 | 
			
		||||
            result = result.where(lambda x: criteria.name.lower() in x.name.lower() or x.name.lower() == criteria.name.lower())
 | 
			
		||||
 | 
			
		||||
        return ServerFilteredResultDTO(
 | 
			
		||||
            List(ServerDTO, result),
 | 
			
		||||
            filtered_result.total_count
 | 
			
		||||
            servers.count()
 | 
			
		||||
        )
 | 
			
		||||
 | 
			
		||||
    async def get_server_by_id_async(self, id: int) -> ServerDTO:
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user