floorball_stas/app/api/api_v1/endpoints/team.py

85 lines
2.3 KiB
Python

from typing import Any, List
from fastapi import APIRouter, Depends, HTTPException
from sqlalchemy.orm import Session
from app import crud, models, schemas
from app.api import deps
router = APIRouter()
@router.get("/{id}", response_model=schemas.Team)
def get_team(
*,
db: Session = Depends(deps.get_db),
id: int,
current_user: models.User = Depends(deps.get_current_active_user),
) -> Any:
"""
Get team by id.
"""
team = crud.team.get_team(db=db, team_id=id)
if not team:
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 team
@router.get("/", response_model=List[schemas.Team])
def get_teams(
db: Session = Depends(deps.get_db),
skip: int = 0,
limit: int = 100,
current_user: models.User = Depends(deps.get_current_active_superuser),
) -> Any:
"""
Retrieve teams.
"""
team = crud.team.get_teams(db, skip=skip, limit=limit)
return team
@router.post("/", response_model=schemas.Team)
def create_team(
*,
db: Session = Depends(deps.get_db),
team_in: schemas.TeamCreate,
current_user: models.User = Depends(deps.get_current_active_superuser),
) -> Any:
"""
Create team.
"""
team = crud.team.create(db, obj_in=team_in)
return team
@router.put("/players/{team_id}", response_model=schemas.Team)
def add_player_team(
*,
db: Session = Depends(deps.get_db),
player_id: int,
team_id: int,
current_user: models.User = Depends(deps.get_current_active_superuser),
) -> Any:
"""
Add player to team.
"""
if crud.player.get_player(db, player_id=player_id) is None:
raise HTTPException(status_code=404, detail="Player not found")
if crud.team.get_team(db=db, team_id=team_id) is None:
raise HTTPException(status_code=404, detail="Team not found")
if crud.team.is_player_in_team(
db=db, player_id=player_id, team_id=team_id
):
raise HTTPException(
status_code=404, detail="Player is already in team"
)
team = crud.team.add_player_in_team(db, team_id, player_id)
return team