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