feat: query top 5 by view_count in get_task_stats
This commit is contained in:
@@ -19,6 +19,7 @@ from .schemas import (
|
|||||||
SubmissionOut,
|
SubmissionOut,
|
||||||
RatingScoreIn,
|
RatingScoreIn,
|
||||||
TaskStatsOut,
|
TaskStatsOut,
|
||||||
|
TopViewedItem,
|
||||||
UserTag,
|
UserTag,
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -317,6 +318,23 @@ def get_task_stats(request, task_id: int, classname: Optional[str] = None):
|
|||||||
yellow=flag_counts.get("yellow", 0),
|
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(
|
return TaskStatsOut(
|
||||||
submitted_count=submitted_count,
|
submitted_count=submitted_count,
|
||||||
unsubmitted_count=unsubmitted_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),
|
submission_count_distribution=SubmissionCountBucket(**dist),
|
||||||
flag_stats=flag_stats,
|
flag_stats=flag_stats,
|
||||||
classes=all_classes,
|
classes=all_classes,
|
||||||
|
top_viewed=top_viewed,
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user