feat: update all query filters to treat AST_CHECK_FAILED as accepted
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -16,7 +16,7 @@ from otpauth import TOTP
|
||||
|
||||
from options.options import SysOptions
|
||||
from problem.models import Problem
|
||||
from submission.models import JudgeStatus, Submission
|
||||
from submission.models import JudgeStatus, Submission, is_accepted
|
||||
from utils.api import APIView, CSRFExemptAPIView, validate_serializer
|
||||
from utils.captcha import Captcha
|
||||
from utils.constants import CacheKey, ContestRuleType
|
||||
@@ -465,7 +465,7 @@ class UserActivityRankAPI(APIView):
|
||||
submissions = Submission.objects.filter(
|
||||
contest_id__isnull=True,
|
||||
create_time__gte=start,
|
||||
result=JudgeStatus.ACCEPTED,
|
||||
result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED],
|
||||
).exclude(username__in=hidden_names)
|
||||
data = list(submissions.values("username").annotate(count=Count("problem_id", distinct=True)).order_by("-count")[:10])
|
||||
cache.set(cache_key, data, 600)
|
||||
@@ -480,7 +480,7 @@ class UserProblemRankAPI(APIView):
|
||||
return self.error("User is not authenticated")
|
||||
|
||||
problem = Problem.objects.get(_id__iexact=problem_id, contest_id__isnull=True, visible=True)
|
||||
submissions = Submission.objects.filter(problem=problem, result=JudgeStatus.ACCEPTED)
|
||||
submissions = Submission.objects.filter(problem=problem, result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])
|
||||
|
||||
all_ac_count = submissions.values("user_id").distinct().count()
|
||||
|
||||
|
||||
@@ -277,7 +277,7 @@ class ClassPKAPI(APIView):
|
||||
create_time__lte=end_time,
|
||||
)
|
||||
recent_ac = (
|
||||
submissions.filter(result=JudgeStatus.ACCEPTED)
|
||||
submissions.filter(result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])
|
||||
.values("user_id", "problem_id")
|
||||
.distinct()
|
||||
.count()
|
||||
@@ -288,7 +288,7 @@ class ClassPKAPI(APIView):
|
||||
recent_user_ac = {}
|
||||
for user_id in user_ids:
|
||||
user_recent_ac = (
|
||||
submissions.filter(user_id=user_id, result=JudgeStatus.ACCEPTED)
|
||||
submissions.filter(user_id=user_id, result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])
|
||||
.values("problem_id")
|
||||
.distinct()
|
||||
.count()
|
||||
|
||||
@@ -28,7 +28,7 @@ class CommentAPI(APIView):
|
||||
.filter(
|
||||
user_id=request.user.id,
|
||||
problem_id=data["problem_id"],
|
||||
result=JudgeStatus.ACCEPTED,
|
||||
result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED],
|
||||
)
|
||||
.first()
|
||||
)
|
||||
|
||||
@@ -217,7 +217,7 @@ class DownloadContestSubmissions(APIView):
|
||||
problem_ids = contest.problem_set.all().values_list("id", "_id")
|
||||
id2display_id = {k[0]: k[1] for k in problem_ids}
|
||||
ac_map = {k[0]: False for k in problem_ids}
|
||||
submissions = Submission.objects.filter(contest=contest, result=JudgeStatus.ACCEPTED).order_by("-create_time")
|
||||
submissions = Submission.objects.filter(contest=contest, result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED]).order_by("-create_time")
|
||||
user_ids = submissions.values_list("user_id", flat=True)
|
||||
users = User.objects.filter(id__in=user_ids)
|
||||
path = f"/tmp/{rand_str()}.zip"
|
||||
|
||||
@@ -527,7 +527,7 @@ class StuckProblemsAPI(APIView):
|
||||
Submission.objects.values("problem_id", "problem___id", "problem__title")
|
||||
.annotate(
|
||||
total=Count("id"),
|
||||
accepted=Count("id", filter=Q(result=JudgeStatus.ACCEPTED)),
|
||||
accepted=Count("id", filter=Q(result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])),
|
||||
failed=Count("id", filter=failed_q),
|
||||
failed_users=Count("user_id", filter=failed_q, distinct=True),
|
||||
)
|
||||
@@ -593,7 +593,7 @@ class TopACTrendAPI(APIView):
|
||||
.values("problem_id", "problem___id", "problem__title", "year")
|
||||
.annotate(
|
||||
total=Count("id"),
|
||||
accepted=Count("id", filter=Q(result=JudgeStatus.ACCEPTED)),
|
||||
accepted=Count("id", filter=Q(result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])),
|
||||
)
|
||||
.order_by("problem_id", "year")
|
||||
)
|
||||
|
||||
@@ -196,7 +196,7 @@ class ProblemSolvedPeopleCount(APIView):
|
||||
submission_count = Submission.objects.filter(
|
||||
user_id=request.user.id,
|
||||
problem_id=problem_id,
|
||||
result=JudgeStatus.ACCEPTED,
|
||||
result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED],
|
||||
).count()
|
||||
if submission_count == 0:
|
||||
return self.success(rate)
|
||||
@@ -207,7 +207,7 @@ class ProblemSolvedPeopleCount(APIView):
|
||||
).count()
|
||||
accepted_count = Submission.objects.filter(
|
||||
problem_id=problem_id,
|
||||
result=JudgeStatus.ACCEPTED,
|
||||
result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED],
|
||||
create_time__gte=years_ago,
|
||||
).aggregate(user_count=Count("user_id", distinct=True))["user_count"]
|
||||
if accepted_count < total_count:
|
||||
@@ -310,7 +310,7 @@ class ProblemYearlyACRateAPI(APIView):
|
||||
.values("year")
|
||||
.annotate(
|
||||
total=Count("id"),
|
||||
accepted=Count("id", filter=Q(result=JudgeStatus.ACCEPTED)),
|
||||
accepted=Count("id", filter=Q(result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])),
|
||||
)
|
||||
.order_by("year")
|
||||
)
|
||||
|
||||
@@ -38,7 +38,7 @@ class Command(BaseCommand):
|
||||
Submission.objects.filter(
|
||||
user_id=progress.user_id,
|
||||
problem_id=psp.problem_id,
|
||||
result=JudgeStatus.ACCEPTED,
|
||||
result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED],
|
||||
)
|
||||
.order_by("create_time")
|
||||
.first()
|
||||
|
||||
@@ -24,7 +24,7 @@ from problemset.serializers import (
|
||||
UpdateProgressSerializer,
|
||||
UserBadgeSerializer,
|
||||
)
|
||||
from submission.models import JudgeStatus, Submission
|
||||
from submission.models import JudgeStatus, Submission, is_accepted
|
||||
from utils.api import APIView, validate_serializer
|
||||
|
||||
|
||||
@@ -187,7 +187,7 @@ class ProblemSetProgressAPI(APIView):
|
||||
except Submission.DoesNotExist:
|
||||
return self.error("提交记录不存在")
|
||||
|
||||
if submission.result != JudgeStatus.ACCEPTED:
|
||||
if not is_accepted(submission.result):
|
||||
return self.error("只有通过的提交才能更新进度")
|
||||
|
||||
try:
|
||||
|
||||
@@ -78,7 +78,7 @@ class SubmissionStatisticsAPI(APIView):
|
||||
# 优化:一次性获取所有统计数据
|
||||
submission_stats = submissions.aggregate(
|
||||
total_count=Count("id"),
|
||||
accepted_count=Count("id", filter=Q(result=JudgeStatus.ACCEPTED)),
|
||||
accepted_count=Count("id", filter=Q(result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])),
|
||||
)
|
||||
submission_count = submission_stats["total_count"]
|
||||
accepted_count = submission_stats["accepted_count"]
|
||||
@@ -91,7 +91,7 @@ class SubmissionStatisticsAPI(APIView):
|
||||
submissions.values("username")
|
||||
.annotate(
|
||||
submission_count=Count("id"),
|
||||
accepted_count=Count("id", filter=Q(result=JudgeStatus.ACCEPTED)),
|
||||
accepted_count=Count("id", filter=Q(result__in=[JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED])),
|
||||
)
|
||||
.order_by("-submission_count")
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user