feat: add AST_CHECK_FAILED status, is_accepted helper, ast_rules field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-25 20:37:58 -06:00
parent 3b4dfe2fe2
commit c36e6623bd
5 changed files with 49 additions and 0 deletions

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.4 on 2026-05-26 02:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('problem', '0009_alter_problem_accepted_number_and_more'),
]
operations = [
migrations.AddField(
model_name='problem',
name='ast_rules',
field=models.JSONField(blank=True, default=None, null=True),
),
]

View File

@@ -83,6 +83,9 @@ class Problem(models.Model):
flowchart_hint = models.TextField(null=True, blank=True)
show_flowchart = models.BooleanField(default=False, db_default=False)
# AST 代码结构检查规则
ast_rules = models.JSONField(null=True, blank=True, default=None)
class Meta:
db_table = "problem"
constraints = [

View File

@@ -86,6 +86,9 @@ class CreateOrEditProblemSerializer(serializers.Serializer):
flowchart_hint = serializers.CharField(allow_blank=True, allow_null=True, required=False)
# AST 规则
ast_rules = serializers.JSONField(required=False, allow_null=True, default=None)
class CreateProblemSerializer(CreateOrEditProblemSerializer):
pass
@@ -146,6 +149,7 @@ class ProblemSerializer(BaseProblemSerializer):
"visible",
"is_public",
"answers",
"ast_rules",
)
def get_mermaid_code(self, obj):
@@ -196,6 +200,7 @@ class ProblemSafeSerializer(BaseProblemSerializer):
"accepted_number",
"statistic_info",
"answers",
"ast_rules",
)
def get_mermaid_code(self, obj):

View File

@@ -0,0 +1,18 @@
# Generated by Django 6.0.4 on 2026-05-26 02:36
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('submission', '0006_alter_submission_info_alter_submission_result_and_more'),
]
operations = [
migrations.AlterField(
model_name='submission',
name='result',
field=models.IntegerField(choices=[(-2, 'Compile Error'), (-1, 'Wrong Answer'), (0, 'Accepted'), (1, 'CPU Time Limit Exceeded'), (2, 'Real Time Limit Exceeded'), (3, 'Memory Limit Exceeded'), (4, 'Runtime Error'), (5, 'System Error'), (6, 'Pending'), (7, 'Judging'), (8, 'Partially Accepted'), (10, 'AST Check Failed')], db_default=6, db_index=True, default=6),
),
]

View File

@@ -19,6 +19,11 @@ class JudgeStatus(models.IntegerChoices):
PENDING = 6, "Pending"
JUDGING = 7, "Judging"
PARTIALLY_ACCEPTED = 8, "Partially Accepted"
AST_CHECK_FAILED = 10, "AST Check Failed"
def is_accepted(result):
return result in (JudgeStatus.ACCEPTED, JudgeStatus.AST_CHECK_FAILED)
class Submission(models.Model):