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 <noreply@anthropic.com>
This commit is contained in:
@@ -9,6 +9,7 @@ from django.db.models import OuterRef, Subquery, IntegerField
|
|||||||
|
|
||||||
|
|
||||||
from .schemas import (
|
from .schemas import (
|
||||||
|
FlagIn,
|
||||||
SubmissionFilter,
|
SubmissionFilter,
|
||||||
SubmissionIn,
|
SubmissionIn,
|
||||||
SubmissionOut,
|
SubmissionOut,
|
||||||
@@ -18,6 +19,7 @@ from .schemas import (
|
|||||||
|
|
||||||
from .models import Rating, Submission
|
from .models import Rating, Submission
|
||||||
from task.models import Task
|
from task.models import Task
|
||||||
|
from account.models import RoleChoices
|
||||||
|
|
||||||
router = Router()
|
router = Router()
|
||||||
|
|
||||||
@@ -63,6 +65,8 @@ def list_submissions(request, filters: SubmissionFilter = Query(...)):
|
|||||||
submissions = submissions.filter(task__task_type=filters.task_type)
|
submissions = submissions.filter(task__task_type=filters.task_type)
|
||||||
if filters.username:
|
if filters.username:
|
||||||
submissions = submissions.filter(user__username__icontains=filters.username)
|
submissions = submissions.filter(user__username__icontains=filters.username)
|
||||||
|
if filters.flag:
|
||||||
|
submissions = submissions.filter(flag=filters.flag)
|
||||||
|
|
||||||
user_rating_subquery = Subquery(
|
user_rating_subquery = Subquery(
|
||||||
Rating.objects.filter(user=request.user, submission=OuterRef("pk")).values(
|
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": "打分成功"}
|
return {"message": "打分成功"}
|
||||||
else:
|
else:
|
||||||
return {"message": "你已经给这个提交打过分了"}
|
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}
|
||||||
|
|||||||
Reference in New Issue
Block a user