add endpoint for flowchart's detail

This commit is contained in:
2025-12-29 22:24:15 +08:00
parent ab9fe71fb0
commit 3cf03fc286
2 changed files with 46 additions and 8 deletions

View File

@@ -3,12 +3,14 @@ from ..views.oj import (
FlowchartSubmissionAPI, FlowchartSubmissionAPI,
FlowchartSubmissionListAPI, FlowchartSubmissionListAPI,
FlowchartSubmissionRetryAPI, FlowchartSubmissionRetryAPI,
FlowchartSubmissionCurrentAPI FlowchartSubmissionCurrentAPI,
FlowchartSubmissionDetailAPI,
) )
urlpatterns = [ urlpatterns = [
path('flowchart/submission', FlowchartSubmissionAPI.as_view()), path('flowchart/submission', FlowchartSubmissionAPI.as_view()),
path('flowchart/submissions', FlowchartSubmissionListAPI.as_view()), path('flowchart/submissions', FlowchartSubmissionListAPI.as_view()),
path('flowchart/submission/retry', FlowchartSubmissionRetryAPI.as_view()), path('flowchart/submission/retry', FlowchartSubmissionRetryAPI.as_view()),
path('flowchart/submission/detail', FlowchartSubmissionDetailAPI.as_view()),
path('flowchart/submission/current', FlowchartSubmissionCurrentAPI.as_view()), path('flowchart/submission/current', FlowchartSubmissionCurrentAPI.as_view()),
] ]

View File

@@ -140,10 +140,10 @@ class FlowchartSubmissionRetryAPI(APIView):
) )
class FlowchartSubmissionCurrentAPI(APIView): class FlowchartSubmissionDetailAPI(APIView):
@login_required @login_required
def get(self, request): def get(self, request):
"""获取当前用户对指定题目的最新流程图提交""" """获取当前用户对指定题目的流程图提交详情"""
problem_id = request.GET.get("problem_id") problem_id = request.GET.get("problem_id")
if not problem_id: if not problem_id:
return self.error("problem_id is required") return self.error("problem_id is required")
@@ -152,12 +152,48 @@ class FlowchartSubmissionCurrentAPI(APIView):
except Problem.DoesNotExist: except Problem.DoesNotExist:
return self.error("Problem doesn't exist") return self.error("Problem doesn't exist")
page = int(request.GET.get("page", 0))
submissions = FlowchartSubmission.objects.filter( submissions = FlowchartSubmission.objects.filter(
user=request.user, problem=problem user=request.user,
problem=problem,
status=FlowchartSubmissionStatus.COMPLETED,
).order_by("-create_time") ).order_by("-create_time")
if page > 0:
submission = submissions[page - 1]
else:
submission = submissions[0]
serializer = FlowchartSubmissionSerializer(submission)
return self.success({"submission": serializer.data})
class FlowchartSubmissionCurrentAPI(APIView):
@login_required
def get(self, request):
"""获取当前用户对指定题目的最新流程图提交,只返回次数和分数"""
problem_id = request.GET.get("problem_id")
if not problem_id:
return self.error("problem_id is required")
try:
problem = Problem.objects.get(id=problem_id)
except Problem.DoesNotExist:
return self.error("Problem doesn't exist")
submissions = (
FlowchartSubmission.objects.filter(
user=request.user,
problem=problem,
status=FlowchartSubmissionStatus.COMPLETED,
)
.values("ai_score", "ai_grade")
.order_by("-create_time")
)
count = submissions.count() count = submissions.count()
if count == 0: if count == 0:
return self.success({"submission": None, "count": 0}) return self.success({"count": 0, "score": 0, "grade": ""})
first_submission = submissions[0] submission = submissions[0]
serializer = FlowchartSubmissionSerializer(first_submission) return self.success(
return self.success({"submission": serializer.data, "count": count}) {
"count": count,
"score": submission["ai_score"],
"grade": submission["ai_grade"],
}
)