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:
2026-05-25 20:45:15 -06:00
parent 4d7eabd607
commit 980b803517
9 changed files with 17 additions and 17 deletions

View File

@@ -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()

View File

@@ -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()

View File

@@ -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()
)

View File

@@ -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"

View File

@@ -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")
)

View File

@@ -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")
)

View File

@@ -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()

View File

@@ -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:

View File

@@ -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")
)