appoint team manager in UI
This commit is contained in:
@@ -19,12 +19,24 @@ P = Player
|
||||
player_router = APIRouter(prefix="/player", tags=["player"])
|
||||
|
||||
|
||||
def update_team_manager(scopes_str: str, team_id: int, state: bool = True):
|
||||
scopes = set(scopes_str.split())
|
||||
if state:
|
||||
scopes.add(f"team:{team_id}")
|
||||
else:
|
||||
scopes.remove(f"team:{team_id}")
|
||||
|
||||
print("new scopestr", " ".join(scopes))
|
||||
return " ".join(sorted(scopes))
|
||||
|
||||
|
||||
class PlayerRequest(BaseModel):
|
||||
display_name: str
|
||||
username: str
|
||||
gender: str | None
|
||||
number: str
|
||||
email: str | None
|
||||
is_manager: bool | None
|
||||
|
||||
|
||||
class AddPlayerRequest(PlayerRequest): ...
|
||||
@@ -96,6 +108,10 @@ def modify_player(
|
||||
player.number = r.number.strip()
|
||||
player.gender = r.gender.strip() if r.gender else None
|
||||
player.email = r.email.strip() if r.email else None
|
||||
if r.is_manager is not None:
|
||||
player.scopes = update_team_manager(
|
||||
player.scopes, request.team_id, r.is_manager
|
||||
)
|
||||
session.add(player)
|
||||
session.commit()
|
||||
return PlainTextResponse("modification successful")
|
||||
@@ -212,6 +228,8 @@ async def list_players(
|
||||
] + demo_players
|
||||
|
||||
allowed_scopes = set(user.scopes.split())
|
||||
team_manager_scope = f"team:{team_id}"
|
||||
is_team_manager = team_manager_scope in allowed_scopes
|
||||
|
||||
with Session(engine) as session:
|
||||
current_user = session.exec(
|
||||
@@ -220,7 +238,7 @@ async def list_players(
|
||||
.join(Team)
|
||||
.where(Team.id == team_id, P.disabled == False, P.id == user.id)
|
||||
).one_or_none()
|
||||
if not current_user and f"team:{team_id}" not in allowed_scopes:
|
||||
if not current_user and not is_team_manager:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="you're not in this team",
|
||||
@@ -233,21 +251,26 @@ async def list_players(
|
||||
.where(Team.id == team_id, P.disabled == False)
|
||||
.order_by(P.display_name)
|
||||
).all()
|
||||
|
||||
if players:
|
||||
return [
|
||||
player.model_dump(
|
||||
include={
|
||||
"id",
|
||||
"display_name",
|
||||
"username",
|
||||
"gender",
|
||||
"number",
|
||||
"email",
|
||||
}
|
||||
)
|
||||
for player in players
|
||||
if not player.disabled
|
||||
]
|
||||
players_dump = []
|
||||
for player in players:
|
||||
if not player.disabled:
|
||||
player_dump = player.model_dump(
|
||||
include={
|
||||
"id",
|
||||
"display_name",
|
||||
"username",
|
||||
"gender",
|
||||
"number",
|
||||
}
|
||||
)
|
||||
if is_team_manager:
|
||||
player_dump["email"] = player.email
|
||||
if team_manager_scope in player.scopes:
|
||||
player_dump["is_manager"] = True
|
||||
players_dump.append(player_dump)
|
||||
return players_dump
|
||||
|
||||
|
||||
def read_teams_me(user: Annotated[P, Depends(get_current_active_user)]):
|
||||
|
||||
Reference in New Issue
Block a user