From d4727b1538b59c75b2a2f9c1ca0a891fc8c97589 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Mon, 9 Mar 2026 17:23:17 +0800 Subject: [PATCH] Add flag API endpoint and filter logic Adds PUT /{submission_id}/flag endpoint (admin/super only) and flag filter support in list_submissions. Co-Authored-By: Claude Opus 4.6 --- submission/api.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/submission/api.py b/submission/api.py index ef65c22..517c22a 100644 --- a/submission/api.py +++ b/submission/api.py @@ -9,6 +9,7 @@ from django.db.models import OuterRef, Subquery, IntegerField from .schemas import ( + FlagIn, SubmissionFilter, SubmissionIn, SubmissionOut, @@ -18,6 +19,7 @@ from .schemas import ( from .models import Rating, Submission from task.models import Task +from account.models import RoleChoices router = Router() @@ -63,6 +65,8 @@ def list_submissions(request, filters: SubmissionFilter = Query(...)): submissions = submissions.filter(task__task_type=filters.task_type) if filters.username: submissions = submissions.filter(user__username__icontains=filters.username) + if filters.flag: + submissions = submissions.filter(flag=filters.flag) user_rating_subquery = Subquery( Rating.objects.filter(user=request.user, submission=OuterRef("pk")).values( @@ -116,3 +120,18 @@ def update_score(request, submission_id: UUID, payload: RatingScoreIn): return {"message": "打分成功"} else: return {"message": "你已经给这个提交打过分了"} + + +@router.put("/{submission_id}/flag") +@login_required +def update_flag(request, submission_id: UUID, payload: FlagIn): + """ + 设置或清除提交的标记(仅管理员和超级管理员可操作) + """ + if request.user.role not in (RoleChoices.SUPER, RoleChoices.ADMIN): + raise HttpError(403, "没有权限") + + submission = get_object_or_404(Submission, id=submission_id) + submission.flag = payload.flag + submission.save(update_fields=["flag"]) + return {"flag": submission.flag}