48 lines
1.5 KiB
Python
48 lines
1.5 KiB
Python
from typing import Annotated
|
|
from fastapi import APIRouter, Depends
|
|
from sqlmodel import Session, select
|
|
|
|
from cutt.db import Player, Team, engine
|
|
from cutt.security import change_password, get_current_active_user, read_player_me
|
|
|
|
P = Player
|
|
|
|
|
|
def add_player(player: P):
|
|
with Session(engine) as session:
|
|
session.add(player)
|
|
session.commit()
|
|
|
|
|
|
def add_players(players: list[P]):
|
|
with Session(engine) as session:
|
|
for player in players:
|
|
session.add(player)
|
|
session.commit()
|
|
|
|
|
|
async def list_players(team_id: int):
|
|
with Session(engine) as session:
|
|
statement = select(Team).where(Team.id == team_id)
|
|
players = [t.players for t in session.exec(statement)][0]
|
|
if players:
|
|
return [
|
|
player.model_dump(include={"id", "display_name", "number"})
|
|
for player in players
|
|
]
|
|
|
|
|
|
async def read_teams_me(user: Annotated[P, Depends(get_current_active_user)]):
|
|
with Session(engine) as session:
|
|
return [p.teams for p in session.exec(select(P).where(P.id == user.id))][0]
|
|
|
|
|
|
player_router = APIRouter(prefix="/player")
|
|
player_router.add_api_route("/list/{team_id}", endpoint=list_players, methods=["GET"])
|
|
player_router.add_api_route("/add", endpoint=add_player, methods=["POST"])
|
|
player_router.add_api_route("/me", endpoint=read_player_me, methods=["GET"])
|
|
player_router.add_api_route("/me/teams", endpoint=read_teams_me, methods=["GET"])
|
|
player_router.add_api_route(
|
|
"/change_password", endpoint=change_password, methods=["POST"]
|
|
)
|