from typing import Any, List from fastapi import APIRouter, Body, Depends, HTTPException from fastapi.encoders import jsonable_encoder from pydantic.networks import EmailStr from sqlalchemy.orm import Session from app import crud, models, schemas from app.api import deps from app.core.config import settings from app.schemas.player import PlayerUpdate router = APIRouter() @router.get("/{id}", response_model=schemas.Player) def read_player( *, db: Session = Depends(deps.get_db), firstname: str, lastname: str, current_user: models.User = Depends(deps.get_current_active_user), ) -> Any: """ Get player by firstname and lastname. """ player = crud.player.get_player_by_name( db=db, firstname=firstname, lastname=lastname ) 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=schemas.Player) def create_player( *, db: Session = Depends(deps.get_db), player_in: schemas.PlayerCreate, current_user: models.User = Depends(deps.get_current_active_superuser), ) -> Any: """ Create new user. """ player = crud.player.get_player_by_name( db, firstname=player_in.firstname, lastname=player_in.lastname ) if player: raise HTTPException( status_code=400, detail="The user with this username already exists in the system.", ) player = crud.player.create(db, obj_in=player_in) return player @router.get("/", response_model=List[schemas.Player]) def get_players( db: Session = Depends(deps.get_db), skip: int = 0, limit: int = 100, current_user: models.User = Depends(deps.get_current_active_superuser), ) -> Any: """ Retrieve all players. """ player = crud.player.get_players(db, skip=skip, limit=limit) return player @router.post("/{id}", response_model=schemas.Player) def update_player( *, db: Session = Depends(deps.get_db), id: int, player_in: PlayerUpdate, current_user: models.User = Depends(deps.get_current_active_user), ) -> Any: """ Update player. """ player = crud.player.get(db=db, id=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