feat: who's missing?
This commit is contained in:
parent
a97eee842e
commit
0397725bda
@ -260,12 +260,73 @@ def mvp(
|
|||||||
]
|
]
|
||||||
|
|
||||||
|
|
||||||
|
async def turnout(
|
||||||
|
request: Annotated[
|
||||||
|
TeamScopedRequest, Security(verify_team_scope, scopes=["analysis"])
|
||||||
|
],
|
||||||
|
):
|
||||||
|
player_map = {}
|
||||||
|
with Session(engine) as session:
|
||||||
|
statement = select(Team).where(Team.id == request.team_id)
|
||||||
|
players = [t.players for t in session.exec(statement)][0]
|
||||||
|
if not players:
|
||||||
|
raise HTTPException(status_code=status.HTTP_404_NOT_FOUND)
|
||||||
|
for p in players:
|
||||||
|
player_map[p.id] = p.display_name
|
||||||
|
|
||||||
|
subquery = (
|
||||||
|
select(C.user, func.max(C.time).label("latest"))
|
||||||
|
.where(C.team == request.team_id)
|
||||||
|
.group_by(C.user)
|
||||||
|
.subquery()
|
||||||
|
)
|
||||||
|
statement2 = select(C.user).join(
|
||||||
|
subquery, (C.user == subquery.c.user) & (C.time == subquery.c.latest)
|
||||||
|
)
|
||||||
|
chemistry_turnout = session.exec(statement2).all()
|
||||||
|
chemistry_missing = set(player_map) - set(chemistry_turnout)
|
||||||
|
chemistry_missing = [player_map[i] for i in chemistry_missing]
|
||||||
|
|
||||||
|
subquery = (
|
||||||
|
select(R.user, func.max(R.time).label("latest"))
|
||||||
|
.where(R.team == request.team_id)
|
||||||
|
.group_by(R.user)
|
||||||
|
.subquery()
|
||||||
|
)
|
||||||
|
statement2 = select(R.user).join(
|
||||||
|
subquery, (R.user == subquery.c.user) & (R.time == subquery.c.latest)
|
||||||
|
)
|
||||||
|
mvp_turnout = session.exec(statement2).all()
|
||||||
|
mvp_missing = set(player_map) - set(mvp_turnout)
|
||||||
|
mvp_missing = [player_map[i] for i in mvp_missing]
|
||||||
|
return JSONResponse(
|
||||||
|
{
|
||||||
|
"players": len(player_map),
|
||||||
|
"chemistry": {
|
||||||
|
"turnout": len(chemistry_turnout),
|
||||||
|
"missing": sorted(list(chemistry_missing)),
|
||||||
|
},
|
||||||
|
"MVP": {
|
||||||
|
"turnout": len(mvp_turnout),
|
||||||
|
"missing": sorted(list(mvp_missing)),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
# analysis_router.add_api_route("/json", endpoint=sociogram_json, methods=["GET"])
|
# analysis_router.add_api_route("/json", endpoint=sociogram_json, methods=["GET"])
|
||||||
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"],
|
||||||
|
name="MVPs",
|
||||||
|
description="Request Most Valuable Players stats",
|
||||||
|
)
|
||||||
|
analysis_router.add_api_route("/turnout/{team_id}", endpoint=turnout, methods=["GET"])
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
with Session(engine) as session:
|
with Session(engine) as session:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user