Compare commits

...

2 Commits

Author SHA1 Message Date
a97eee842e
feat: add player to team 2025-03-21 16:05:48 +01:00
ab3ed9b497
feat: add OpenAPI tags 2025-03-21 15:06:44 +01:00
3 changed files with 57 additions and 12 deletions

View File

@ -17,7 +17,7 @@ matplotlib.use("agg")
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
analysis_router = APIRouter(prefix="/analysis") analysis_router = APIRouter(prefix="/analysis", tags=["analysis"])
C = Chemistry C = Chemistry
@ -264,7 +264,7 @@ def mvp(
analysis_router.add_api_route( analysis_router.add_api_route(
"/graph_json/{team_id}", endpoint=graph_json, methods=["GET"] "/graph_json/{team_id}", endpoint=graph_json, methods=["GET"]
) )
analysis_router.add_api_route("/image", endpoint=render_sociogram, methods=["POST"]) # analysis_router.add_api_route("/image", endpoint=render_sociogram, methods=["POST"])
analysis_router.add_api_route("/mvp/{team_id}", endpoint=mvp, methods=["GET"]) analysis_router.add_api_route("/mvp/{team_id}", endpoint=mvp, methods=["GET"])
if __name__ == "__main__": if __name__ == "__main__":

View File

@ -22,7 +22,9 @@ C = Chemistry
R = MVPRanking R = MVPRanking
P = Player P = Player
app = FastAPI(title="cutt") app = FastAPI(
title="cutt", swagger_ui_parameters={"syntaxHighlight": {"theme": "monokai"}}
)
api_router = APIRouter(prefix="/api") api_router = APIRouter(prefix="/api")
origins = [ origins = [
"https://cutt.0124816.xyz", "https://cutt.0124816.xyz",
@ -53,6 +55,7 @@ def list_teams():
team_router = APIRouter( team_router = APIRouter(
prefix="/team", prefix="/team",
dependencies=[Security(get_current_active_user, scopes=["admin"])], dependencies=[Security(get_current_active_user, scopes=["admin"])],
tags=["team"],
) )
team_router.add_api_route("/list", endpoint=list_teams, methods=["GET"]) team_router.add_api_route("/list", endpoint=list_teams, methods=["GET"])
team_router.add_api_route("/add", endpoint=add_team, methods=["POST"]) team_router.add_api_route("/add", endpoint=add_team, methods=["POST"])
@ -67,7 +70,7 @@ somethings_fishy = HTTPException(
) )
@api_router.put("/mvps") @api_router.put("/mvps", tags=["analysis"])
def submit_mvps( def submit_mvps(
mvps: MVPRanking, mvps: MVPRanking,
user: Annotated[Player, Depends(get_current_active_user)], user: Annotated[Player, Depends(get_current_active_user)],
@ -87,7 +90,7 @@ def submit_mvps(
raise wrong_user_id_exception raise wrong_user_id_exception
@api_router.get("/mvps") @api_router.get("/mvps", tags=["analysis"])
def get_mvps( def get_mvps(
user: Annotated[Player, Depends(get_current_active_user)], user: Annotated[Player, Depends(get_current_active_user)],
): ):
@ -111,7 +114,7 @@ def get_mvps(
) )
@api_router.put("/chemistry") @api_router.put("/chemistry", tags=["analysis"])
def submit_chemistry( def submit_chemistry(
chemistry: Chemistry, user: Annotated[Player, Depends(get_current_active_user)] chemistry: Chemistry, user: Annotated[Player, Depends(get_current_active_user)]
): ):
@ -132,7 +135,7 @@ def submit_chemistry(
raise wrong_user_id_exception raise wrong_user_id_exception
@api_router.get("/chemistry") @api_router.get("/chemistry", tags=["analysis"])
def get_chemistry(user: Annotated[Player, Depends(get_current_active_user)]): def get_chemistry(user: Annotated[Player, Depends(get_current_active_user)]):
with Session(engine) as session: with Session(engine) as session:
subquery = ( subquery = (

View File

@ -1,5 +1,6 @@
from typing import Annotated from typing import Annotated
from fastapi import APIRouter, Depends from fastapi import APIRouter, Depends, Security
from fastapi.responses import PlainTextResponse
from sqlmodel import Session, select from sqlmodel import Session, select
from cutt.db import Player, Team, engine from cutt.db import Player, Team, engine
@ -7,6 +8,8 @@ from cutt.security import change_password, get_current_active_user, read_player_
P = Player P = Player
player_router = APIRouter(prefix="/player", tags=["player"])
def add_player(player: P): def add_player(player: P):
with Session(engine) as session: with Session(engine) as session:
@ -14,6 +17,19 @@ def add_player(player: P):
session.commit() session.commit()
def add_player_to_team(player_id: int, team_id: int):
with Session(engine) as session:
player = session.exec(select(P).where(P.id == player_id)).one()
team = session.exec(select(Team).where(Team.id == team_id)).one()
if player and team:
team.players.append(player)
session.add(team)
session.commit()
return PlainTextResponse(
f"added {player.display_name} ({player.username}) to {team.name}"
)
def add_players(players: list[P]): def add_players(players: list[P]):
with Session(engine) as session: with Session(engine) as session:
for player in players: for player in players:
@ -21,6 +37,11 @@ def add_players(players: list[P]):
session.commit() session.commit()
async def list_all_players():
with Session(engine) as session:
return session.exec(select(P)).all()
async def list_players(team_id: int): async def list_players(team_id: int):
with Session(engine) as session: with Session(engine) as session:
statement = select(Team).where(Team.id == team_id) statement = select(Team).where(Team.id == team_id)
@ -32,14 +53,35 @@ async def list_players(team_id: int):
] ]
async def read_teams_me(user: Annotated[P, Depends(get_current_active_user)]): def read_teams_me(user: Annotated[P, Depends(get_current_active_user)]):
with Session(engine) as session: with Session(engine) as session:
return [p.teams for p in session.exec(select(P).where(P.id == user.id))][0] 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(
player_router.add_api_route("/list/{team_id}", endpoint=list_players, methods=["GET"]) "/add",
player_router.add_api_route("/add", endpoint=add_player, methods=["POST"]) endpoint=add_player,
methods=["POST"],
dependencies=[Security(get_current_active_user, scopes=["admin"])],
)
player_router.add_api_route(
"/list/{team_id}",
endpoint=list_players,
methods=["GET"],
dependencies=[Depends(get_current_active_user)],
)
player_router.add_api_route(
"/list",
endpoint=list_all_players,
methods=["GET"],
dependencies=[Security(get_current_active_user, scopes=["admin"])],
)
player_router.add_api_route(
"/add/{player_id}/{team_id}",
endpoint=add_player_to_team,
methods=["GET"],
dependencies=[Security(get_current_active_user, scopes=["admin"])],
)
player_router.add_api_route("/me", endpoint=read_player_me, methods=["GET"]) 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("/me/teams", endpoint=read_teams_me, methods=["GET"])
player_router.add_api_route( player_router.add_api_route(