feat: add player type survey
This commit is contained in:
53
cutt/main.py
53
cutt/main.py
@@ -2,7 +2,7 @@ from typing import Annotated
|
||||
from fastapi import APIRouter, Depends, FastAPI, HTTPException, Security, status
|
||||
from fastapi.responses import FileResponse, JSONResponse
|
||||
from fastapi.staticfiles import StaticFiles
|
||||
from cutt.db import Player, Team, Chemistry, MVPRanking, engine
|
||||
from cutt.db import Player, PlayerType, Team, Chemistry, MVPRanking, engine
|
||||
from sqlmodel import (
|
||||
Session,
|
||||
func,
|
||||
@@ -20,6 +20,7 @@ from cutt.security import (
|
||||
from cutt.player import player_router
|
||||
|
||||
C = Chemistry
|
||||
PT = PlayerType
|
||||
R = MVPRanking
|
||||
P = Player
|
||||
|
||||
@@ -167,6 +168,56 @@ def get_chemistry(
|
||||
)
|
||||
|
||||
|
||||
@api_router.put("/playertype", tags=["analysis"])
|
||||
def submit_playertype(
|
||||
playertype: PlayerType, user: Annotated[Player, Depends(get_current_active_user)]
|
||||
):
|
||||
if playertype.team == 42:
|
||||
return JSONResponse("DEMO team, nothing happens")
|
||||
if user.id == playertype.user:
|
||||
with Session(engine) as session:
|
||||
statement = select(Team).where(Team.id == playertype.team)
|
||||
players = [t.players for t in session.exec(statement)][0]
|
||||
if players:
|
||||
player_ids = {p.id for p in players}
|
||||
if player_ids >= (
|
||||
set(playertype.handlers)
|
||||
| set(playertype.combis)
|
||||
| set(playertype.cutters)
|
||||
):
|
||||
session.add(playertype)
|
||||
session.commit()
|
||||
return JSONResponse("success!")
|
||||
raise somethings_fishy
|
||||
else:
|
||||
raise wrong_user_id_exception
|
||||
|
||||
|
||||
@api_router.get("/playertype/{team_id}", tags=["analysis"])
|
||||
def get_playertype(
|
||||
team_id: int, user: Annotated[Player, Depends(get_current_active_user)]
|
||||
):
|
||||
with Session(engine) as session:
|
||||
subquery = (
|
||||
select(PT.user, func.max(PT.time).label("latest"))
|
||||
.where(PT.user == user.id)
|
||||
.where(PT.team == team_id)
|
||||
.group_by(PT.user)
|
||||
.subquery()
|
||||
)
|
||||
statement2 = select(PT).join(
|
||||
subquery, (PT.user == subquery.c.user) & (PT.time == subquery.c.latest)
|
||||
)
|
||||
playertype = session.exec(statement2).one_or_none()
|
||||
if playertype is not None:
|
||||
return playertype
|
||||
else:
|
||||
raise HTTPException(
|
||||
status_code=status.HTTP_400_BAD_REQUEST,
|
||||
detail="no previous state was found",
|
||||
)
|
||||
|
||||
|
||||
class SPAStaticFiles(StaticFiles):
|
||||
async def get_response(self, path: str, scope):
|
||||
response = await super().get_response(path, scope)
|
||||
|
||||
Reference in New Issue
Block a user