From c36e6623bdb5eb5a21f4b1c99e0dc0703e1d3296 Mon Sep 17 00:00:00 2001 From: yuetsh <517252939@qq.com> Date: Mon, 25 May 2026 20:37:58 -0600 Subject: [PATCH] feat: add AST_CHECK_FAILED status, is_accepted helper, ast_rules field Co-Authored-By: Claude Sonnet 4.6 --- problem/migrations/0010_problem_ast_rules.py | 18 ++++++++++++++++++ problem/models.py | 3 +++ problem/serializers.py | 5 +++++ .../migrations/0007_alter_submission_result.py | 18 ++++++++++++++++++ submission/models.py | 5 +++++ 5 files changed, 49 insertions(+) create mode 100644 problem/migrations/0010_problem_ast_rules.py create mode 100644 submission/migrations/0007_alter_submission_result.py diff --git a/problem/migrations/0010_problem_ast_rules.py b/problem/migrations/0010_problem_ast_rules.py new file mode 100644 index 0000000..eacd6e7 --- /dev/null +++ b/problem/migrations/0010_problem_ast_rules.py @@ -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), + ), + ] diff --git a/problem/models.py b/problem/models.py index 16f3bf1..829363b 100644 --- a/problem/models.py +++ b/problem/models.py @@ -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 = [ diff --git a/problem/serializers.py b/problem/serializers.py index f57899e..8bc5030 100644 --- a/problem/serializers.py +++ b/problem/serializers.py @@ -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): diff --git a/submission/migrations/0007_alter_submission_result.py b/submission/migrations/0007_alter_submission_result.py new file mode 100644 index 0000000..8a925db --- /dev/null +++ b/submission/migrations/0007_alter_submission_result.py @@ -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), + ), + ] diff --git a/submission/models.py b/submission/models.py index 1e5fdb5..ac925f2 100644 --- a/submission/models.py +++ b/submission/models.py @@ -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):