def as_dto(self): """ Returns a dto for the team """ team_dto = TeamDTO() team_dto.team_id = self.id team_dto.description = self.description team_dto.invite_only = self.invite_only team_dto.members = self._get_team_members() team_dto.name = self.name team_dto.organisation = self.organisation.name team_dto.organisation_id = self.organisation.id team_dto.logo = self.organisation.logo team_dto.visibility = TeamVisibility(self.visibility).name return team_dto
def assert_validate_members(team_dto: TeamDTO): """ Validates that the users exist""" if len(team_dto.members) == 0: raise TeamServiceError("Must have at least one member") members = [] managers = 0 for member in team_dto.members: try: UserService.get_user_by_username(member["name"]) except NotFound: raise NotFound(f'User {member["name"]} does not exist') if member["function"] == TeamMemberFunctions.MANAGER.name: managers += 1 members.append(member) if managers == 0: raise TeamServiceError( "Must have at least one manager in team") team_dto.members = members
def get_all_teams( user_id: int = None, team_name_filter: str = None, team_role_filter: str = None, member_filter: int = None, member_request_filter: int = None, manager_filter: int = None, organisation_filter: int = None, omit_members: bool = False, ) -> TeamsListDTO: query = db.session.query(Team) orgs_query = None is_admin = UserService.is_user_an_admin(user_id) if organisation_filter: orgs_query = query.filter( Team.organisation_id == organisation_filter) if manager_filter and not (manager_filter == user_id and is_admin): manager_teams = query.filter( TeamMembers.user_id == manager_filter, TeamMembers.active == True, # noqa TeamMembers.function == TeamMemberFunctions.MANAGER.value, Team.id == TeamMembers.team_id, ) manager_orgs_teams = query.filter( Team.organisation_id.in_([ org.id for org in OrganisationService.get_organisations( manager_filter) ])) query = manager_teams.union(manager_orgs_teams) if team_name_filter: query = query.filter(Team.name.ilike("%" + team_name_filter + "%"), ) if team_role_filter: try: role = TeamRoles[team_role_filter.upper()].value project_teams = (db.session.query(ProjectTeams).filter( ProjectTeams.role == role).subquery()) query = query.join(project_teams) except KeyError: pass if member_filter: team_member = (db.session.query(TeamMembers).filter( TeamMembers.user_id == member_filter, TeamMembers.active.is_(True)).subquery()) query = query.join(team_member) if member_request_filter: team_member = (db.session.query(TeamMembers).filter( TeamMembers.user_id == member_request_filter, TeamMembers.active.is_(False), ).subquery()) query = query.join(team_member) if orgs_query: query = query.union(orgs_query) teams_list_dto = TeamsListDTO() for team in query.all(): team_dto = TeamDTO() team_dto.team_id = team.id team_dto.name = team.name team_dto.invite_only = team.invite_only team_dto.visibility = TeamVisibility(team.visibility).name team_dto.description = team.description team_dto.logo = team.organisation.logo team_dto.organisation = team.organisation.name team_dto.organisation_id = team.organisation.id team_dto.members = [] is_team_member = TeamService.is_user_an_active_team_member( team.id, user_id) # Skip if members are not included if not omit_members: team_members = team.members team_dto.members = [ team.as_dto_team_member(member) for member in team_members ] if team_dto.visibility == "PRIVATE" and not is_admin: if is_team_member: teams_list_dto.teams.append(team_dto) else: teams_list_dto.teams.append(team_dto) return teams_list_dto
def get_all_teams( user_id: int = None, team_name_filter: str = None, team_role_filter: str = None, member_filter: int = None, member_request_filter: int = None, manager_filter: int = None, organisation_filter: int = None, ) -> TeamsListDTO: query = db.session.query(Team).outerjoin(TeamMembers).outerjoin( ProjectTeams) orgs_query = None is_admin = UserService.is_user_an_admin(user_id) if organisation_filter: orgs_query = query.filter( Team.organisation_id.in_(organisation_filter)) if manager_filter and not (manager_filter == user_id and is_admin): query = query.filter( TeamMembers.user_id == manager_filter, TeamMembers.active == True, # noqa TeamMembers.function == TeamMemberFunctions.MANAGER.value, ) if team_name_filter: query = query.filter(Team.name.contains(team_name_filter)) if team_role_filter: try: role = TeamRoles[team_role_filter.upper()].value query = query.filter(ProjectTeams.role == role) except KeyError: pass if member_filter: query = query.filter( TeamMembers.user_id == member_filter, TeamMembers.active == True # noqa ) if member_request_filter: query = query.filter( TeamMembers.user_id == member_request_filter, TeamMembers.active == False, # noqa ) if orgs_query: query = query.union(orgs_query) teams_list_dto = TeamsListDTO() for team in query.all(): team_dto = TeamDTO() team_dto.team_id = team.id team_dto.name = team.name team_dto.invite_only = team.invite_only team_dto.visibility = TeamVisibility(team.visibility).name team_dto.description = team.description team_dto.logo = team.organisation.logo team_dto.organisation = team.organisation.name team_dto.organisation_id = team.organisation.id team_dto.members = [] team_members = TeamService._get_team_members(team.id) is_team_manager = False is_team_member = False for member in team_members: user = UserService.get_user_by_id(member.user_id) member_dto = TeamMembersDTO() member_dto.username = user.username member_dto.function = TeamMemberFunctions(member.function).name if member.user_id == user_id: is_team_member = True if member_dto.function == "MANAGER": is_team_manager = True member_dto.picture_url = user.picture_url member_dto.active = member.active team_dto.members.append(member_dto) if team_dto.visibility == "PRIVATE" and not is_admin: if is_team_manager or is_team_member: teams_list_dto.teams.append(team_dto) else: teams_list_dto.teams.append(team_dto) return teams_list_dto