feat: query top 5 by view_count in get_task_stats

This commit is contained in:
2026-03-31 23:58:03 -06:00
parent 3e9d73c2f9
commit 9ff5cac2ed

View File

@@ -19,6 +19,7 @@ from .schemas import (
SubmissionOut,
RatingScoreIn,
TaskStatsOut,
TopViewedItem,
UserTag,
)
@@ -317,6 +318,23 @@ def get_task_stats(request, task_id: int, classname: Optional[str] = None):
yellow=flag_counts.get("yellow", 0),
)
# Top 5 submissions by view_count (within filtered student_ids)
top_viewed_qs = (
Submission.objects
.filter(task=task, user_id__in=student_ids)
.select_related("user")
.order_by("-view_count")[:5]
)
top_viewed = [
TopViewedItem(
username=s.user.username,
classname=s.user.classname,
view_count=s.view_count,
submission_id=s.id,
)
for s in top_viewed_qs
]
return TaskStatsOut(
submitted_count=submitted_count,
unsubmitted_count=unsubmitted_count,
@@ -327,6 +345,7 @@ def get_task_stats(request, task_id: int, classname: Optional[str] = None):
submission_count_distribution=SubmissionCountBucket(**dist),
flag_stats=flag_stats,
classes=all_classes,
top_viewed=top_viewed,
)