from typing import Any, List from fastapi import APIRouter, Depends, HTTPException from sqlalchemy.orm import Session from app import crud from app.api import deps from app.models.player import Player, PlayerCreate, PlayerUpdate, \ PlayerTeamsMatchdays from app.models.user import User router = APIRouter() @router.get("/{player_id}", response_model=PlayerTeamsMatchdays) def read_player( *, db: Session = Depends(deps.get_db), player_id: int, current_user: User = Depends(deps.get_current_active_user), ) -> Any: """ Get player by id. """ player = crud.player.get( db=db, id=player_id ) if not player: raise HTTPException(status_code=404, detail="player not found") if not crud.user.is_superuser(current_user): raise HTTPException(status_code=400, detail="Not enough permissions") return player @router.post("/", response_model=List[Player]) def create_player( *, db: Session = Depends(deps.get_db), players_in: list[PlayerCreate], current_user: User = Depends(deps.get_current_active_superuser), ) -> Any: """ Create new user. """ player_out = [] for player_in in players_in: player = crud.player.get_player_by_name( db, firstname=player_in.firstname, lastname=player_in.lastname ) if player: raise HTTPException( status_code=400, detail=f"The user with this username already exists in the " f"system. Player is {player}", ) player = crud.player.create(db, obj_in=player_in) player_out.append(player) return player_out @router.get("/", response_model=List[PlayerTeamsMatchdays]) def get_players( db: Session = Depends(deps.get_db), skip: int = 0, limit: int = 100, current_user: User = Depends(deps.get_current_active_superuser), ) -> Any: """ Retrieve all players. """ player = crud.player.get_multi(db, skip=skip, limit=limit) return player @router.post("/{player_id}", response_model=Player) def update_player( *, db: Session = Depends(deps.get_db), player_id: int, player_in: PlayerUpdate, current_user: User = Depends(deps.get_current_active_user), ) -> Any: """ Update player. """ player = crud.player.get(db=db, id=player_id) if not player: raise HTTPException(status_code=404, detail="Player not found") player = crud.player.update(db=db, db_obj=player, obj_in=player_in) return player