in backend/services/team_service.py [0:0]
def join_team(team_id: int, requesting_user: int, username: str, role: str = None):
is_manager = TeamService.is_user_team_manager(team_id, requesting_user)
team = TeamService.get_team_by_id(team_id)
user = UserService.get_user_by_username(username)
if TeamService.is_user_team_member(team.id, user.id):
raise TeamJoinNotAllowed(
"User is already a member of this team or has already requested to join"
)
if is_manager:
if role:
try:
role = TeamMemberFunctions[role.upper()].value
except KeyError:
raise Exception("Invalid TeamMemberFunction")
else:
role = TeamMemberFunctions.MEMBER.value
TeamService.add_team_member(team_id, user.id, role, True)
else:
if user.id != requesting_user:
raise TeamJoinNotAllowed("User not allowed to join team")
role = TeamMemberFunctions.MEMBER.value
# active if the team is open
if team.invite_only:
active = False
else:
active = True
TeamService.add_team_member(team_id, user.id, role, active)
if team.invite_only:
team_managers = team.get_team_managers()
for member in team_managers:
MessageService.send_request_to_join_team(
user.id, user.username, member.user_id, team.name, team_id
)