feat: calendar display for latest submissions
This commit is contained in:
@@ -8,7 +8,15 @@ from fastapi.responses import JSONResponse
|
||||
from pydantic import BaseModel, Field
|
||||
from sqlmodel import Session, func, select
|
||||
from sqlmodel.sql.expression import SelectOfScalar
|
||||
from cutt.db import Chemistry, MVPRanking, Player, PlayerTeamLink, Team, engine
|
||||
from cutt.db import (
|
||||
Chemistry,
|
||||
MVPRanking,
|
||||
Player,
|
||||
PlayerTeamLink,
|
||||
PlayerType,
|
||||
Team,
|
||||
engine,
|
||||
)
|
||||
import networkx as nx
|
||||
import numpy as np
|
||||
import matplotlib
|
||||
@@ -25,6 +33,7 @@ analysis_router = APIRouter(prefix="/analysis", tags=["analysis"])
|
||||
|
||||
C = Chemistry
|
||||
R = MVPRanking
|
||||
PT = PlayerType
|
||||
P = Player
|
||||
|
||||
|
||||
@@ -297,6 +306,39 @@ async def render_sociogram(params: Params):
|
||||
return {"image": encoded_image}
|
||||
|
||||
|
||||
translate_tablename = {
|
||||
R.__tablename__: "🏆",
|
||||
C.__tablename__: "🧪",
|
||||
PT.__tablename__: "🃏",
|
||||
}
|
||||
|
||||
|
||||
def last_submissions(
|
||||
request: Annotated[TeamScopedRequest, Security(verify_team_scope)],
|
||||
):
|
||||
times = {}
|
||||
with Session(engine) as session:
|
||||
for survey in [C, PT, R]:
|
||||
subquery = (
|
||||
select(survey.user, func.max(survey.time).label("latest"))
|
||||
.where(survey.team == request.team_id)
|
||||
.group_by(survey.user)
|
||||
.subquery()
|
||||
)
|
||||
statement2 = select(survey).join(
|
||||
subquery,
|
||||
(survey.user == subquery.c.user) & (survey.time == subquery.c.latest),
|
||||
)
|
||||
for r in session.exec(statement2):
|
||||
if r.time.date() not in times:
|
||||
times[r.time.date()] = {}
|
||||
times[r.time.date()][r.user] = (
|
||||
times[r.time.date()].get(r.user, "")
|
||||
+ translate_tablename[survey.__tablename__]
|
||||
)
|
||||
return times
|
||||
|
||||
|
||||
def mvp(
|
||||
request: Annotated[TeamScopedRequest, Security(verify_team_scope)],
|
||||
):
|
||||
@@ -430,6 +472,9 @@ analysis_router.add_api_route(
|
||||
description="Request Most Valuable Players stats",
|
||||
)
|
||||
analysis_router.add_api_route("/turnout/{team_id}", endpoint=turnout, methods=["GET"])
|
||||
analysis_router.add_api_route(
|
||||
"/times/{team_id}", endpoint=last_submissions, methods=["GET"]
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
with Session(engine) as session:
|
||||
|
||||
Reference in New Issue
Block a user