add stats

This commit is contained in:
2026-03-18 19:46:27 +08:00
parent e692ddd1f3
commit 0dc8b92dcb
2 changed files with 242 additions and 3 deletions

View File

@@ -121,3 +121,52 @@ class FlagIn(Schema):
flag: Optional[Literal["red", "blue", "green", "yellow"]] = None
class UserTag(Schema):
username: str
classname: str
class TopSubmission(Schema):
submission_id: str # UUID as string
username: str
classname: str
score: float
rating_count: int
class SubmissionCountBucket(Schema):
count_1: int # users with exactly 1 submission
count_2: int # users with exactly 2 submissions
count_3: int # users with exactly 3 submissions
count_4_plus: int # users with 4+ submissions
class ScoreBucket(Schema):
range_1_2: int # [1, 2) ★
range_2_3: int # [2, 3) ★★
range_3_4: int # [3, 4) ★★★
range_4_5: int # [4, 5) ★★★★
range_5: int # [5, 5] ★★★★★
class FlagStats(Schema):
red: int
blue: int
green: int
yellow: int
class TaskStatsOut(Schema):
submitted_count: int
unsubmitted_count: int
average_score: Optional[float]
unrated_count: int
nominated_count: int
unsubmitted_users: list[UserTag]
unrated_users: list[UserTag]
submission_count_distribution: SubmissionCountBucket
score_distribution: ScoreBucket
top_submissions: list[TopSubmission]
flag_stats: FlagStats
classes: list[str]