diff --git a/cutt/player.py b/cutt/player.py index 9d3ef5d..2781238 100644 --- a/cutt/player.py +++ b/cutt/player.py @@ -110,6 +110,32 @@ class DisablePlayerRequest(BaseModel): player_id: int +def remove_player_from_team( + r: DisablePlayerRequest, + request: Annotated[TeamScopedRequest, Depends(verify_team_scope)], +): + if request.team_id == 42: + raise DEMO_TEAM_REQUEST + with Session(engine) as session: + player = session.exec( + select(P) + .join(PlayerTeamLink) + .join(Team) + .where(Team.id == request.team_id, P.id == r.player_id) + ).one_or_none() + if player: + team = session.exec(select(Team).where(Team.id == request.team_id)).one() + player.teams.remove(team) + session.add(team) + session.commit() + return PlainTextResponse(f"removed {player.display_name} from {team.name}.") + else: + raise HTTPException( + status_code=status.HTTP_404_NOT_FOUND, + detail="no such player found in your team", + ) + + def disable_player_team( r: DisablePlayerRequest, request: Annotated[TeamScopedRequest, Depends(verify_team_scope)], @@ -261,7 +287,7 @@ player_router.add_api_route( ) player_router.add_api_route( "/{team_id}", - endpoint=disable_player_team, + endpoint=remove_player_from_team, methods=["DELETE"], ) player_router.add_api_route(