From 16372bb35d021e1b08bfb53007fd98e97f0a3973 Mon Sep 17 00:00:00 2001 From: Timur Date: Sun, 2 Mar 2025 12:23:27 +0300 Subject: [PATCH] remove task attachments --- services/backend/api/v1/task/schemas.py | 1 - services/backend/apps/review/admin.py | 17 ++++++ services/backend/apps/review/apps.py | 1 + ...options_alter_reviewer_options_and_more.py | 58 +++++++++++++++++++ services/backend/apps/review/models.py | 31 ++++++++-- services/backend/apps/task/admin.py | 1 - ...0003_remove_competitiontask_attachments.py | 17 ++++++ services/backend/apps/task/models.py | 3 - 8 files changed, 118 insertions(+), 11 deletions(-) create mode 100644 services/backend/apps/review/admin.py create mode 100644 services/backend/apps/review/migrations/0003_alter_review_options_alter_reviewer_options_and_more.py create mode 100644 services/backend/apps/task/migrations/0003_remove_competitiontask_attachments.py diff --git a/services/backend/api/v1/task/schemas.py b/services/backend/api/v1/task/schemas.py index 40750d0..5ee967c 100644 --- a/services/backend/api/v1/task/schemas.py +++ b/services/backend/api/v1/task/schemas.py @@ -17,7 +17,6 @@ class TaskOutSchema(ModelSchema): "type", "in_competition_position", "points", - "attachments", ] diff --git a/services/backend/apps/review/admin.py b/services/backend/apps/review/admin.py new file mode 100644 index 0000000..c35598b --- /dev/null +++ b/services/backend/apps/review/admin.py @@ -0,0 +1,17 @@ +from django.contrib import admin + +from apps.review.models import Review, Reviewer + + +@admin.register(Reviewer) +class ReviewAdmin(admin.ModelAdmin): + list_display = ("name", "surname",) + search_fields = ("name", "surname",) + + +@admin.register(Review) +class ReviewAdmin(admin.ModelAdmin): + list_display = ("id", "reviewer", "submission",) + search_fields = ("id", "reviewer__id", "reviewer__name", "reviewer__surname", + "submission__id", "submission__content") + list_filter = ("submission__plagiarism_checked", "submission__status",) diff --git a/services/backend/apps/review/apps.py b/services/backend/apps/review/apps.py index fc4d048..27080a3 100644 --- a/services/backend/apps/review/apps.py +++ b/services/backend/apps/review/apps.py @@ -4,3 +4,4 @@ from django.apps import AppConfig class CoreConfig(AppConfig): name = "apps.review" label = "review" + verbose_name = "Проверка" diff --git a/services/backend/apps/review/migrations/0003_alter_review_options_alter_reviewer_options_and_more.py b/services/backend/apps/review/migrations/0003_alter_review_options_alter_reviewer_options_and_more.py new file mode 100644 index 0000000..15e7736 --- /dev/null +++ b/services/backend/apps/review/migrations/0003_alter_review_options_alter_reviewer_options_and_more.py @@ -0,0 +1,58 @@ +# Generated by Django 5.1.6 on 2025-03-02 08:59 + +import django.db.models.deletion +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('review', '0002_initial'), + ('task', '0002_competitiontask_attachments_and_more'), + ] + + operations = [ + migrations.AlterModelOptions( + name='review', + options={'verbose_name': 'проверка', 'verbose_name_plural': 'проверки'}, + ), + migrations.AlterModelOptions( + name='reviewer', + options={'verbose_name': 'проверяющий', 'verbose_name_plural': 'проверяющие'}, + ), + migrations.AlterField( + model_name='review', + name='evaluation', + field=models.JSONField(blank=True, default=list, null=True, verbose_name='выполнение'), + ), + migrations.AlterField( + model_name='review', + name='reviewer', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, to='review.reviewer', verbose_name='проверяющий'), + ), + migrations.AlterField( + model_name='review', + name='state', + field=models.CharField(choices=[('not_checked', 'Not Checked'), ('checking', 'Checking'), ('checked', 'Checked')], default='not_checked', max_length=11, verbose_name='состояние'), + ), + migrations.AlterField( + model_name='review', + name='submission', + field=models.ForeignKey(on_delete=django.db.models.deletion.CASCADE, related_name='reviews', to='task.competitiontasksubmission', verbose_name='посылка'), + ), + migrations.AlterField( + model_name='reviewer', + name='name', + field=models.CharField(max_length=100, verbose_name='имя'), + ), + migrations.AlterField( + model_name='reviewer', + name='surname', + field=models.CharField(max_length=100, verbose_name='фамилия'), + ), + migrations.AlterField( + model_name='reviewer', + name='token', + field=models.CharField(max_length=100, verbose_name='токен для входа'), + ), + ] diff --git a/services/backend/apps/review/models.py b/services/backend/apps/review/models.py index ba63376..9b99285 100644 --- a/services/backend/apps/review/models.py +++ b/services/backend/apps/review/models.py @@ -1,13 +1,21 @@ from django.db import models from apps.core.models import BaseModel +from apps.task.models import CompetitionTaskSubmission class Reviewer(BaseModel): - name = models.CharField(max_length=100) - surname = models.CharField(max_length=100) + name = models.CharField(max_length=100, verbose_name="имя") + surname = models.CharField(max_length=100, verbose_name="фамилия") - token = models.CharField(max_length=100) + token = models.CharField(max_length=100, verbose_name="токен для входа") + + def __str__(self): + return self.name + " " + self.surname + + class Meta: + verbose_name = "проверяющий" + verbose_name_plural = "проверяющие" class ReviewStatusChoices(models.TextChoices): @@ -17,16 +25,27 @@ class ReviewStatusChoices(models.TextChoices): class Review(BaseModel): - reviewer = models.ForeignKey(Reviewer, on_delete=models.CASCADE) + reviewer = models.ForeignKey(Reviewer, on_delete=models.CASCADE, + verbose_name="проверяющий") submission = models.ForeignKey( - "task.CompetitionTaskSubmission", + CompetitionTaskSubmission, on_delete=models.CASCADE, related_name="reviews", + verbose_name="посылка" ) - evaluation = models.JSONField(default=list, null=True, blank=True) + evaluation = models.JSONField(default=list, null=True, blank=True, + verbose_name="выполнение") state = models.CharField( choices=ReviewStatusChoices.choices, default=ReviewStatusChoices.NOT_CHECKED.value, max_length=11, + verbose_name="состояние" ) + + def __str__(self): + return self.id + + class Meta: + verbose_name = "проверка" + verbose_name_plural = "проверки" diff --git a/services/backend/apps/task/admin.py b/services/backend/apps/task/admin.py index 3749ff3..3766cdf 100644 --- a/services/backend/apps/task/admin.py +++ b/services/backend/apps/task/admin.py @@ -11,7 +11,6 @@ class CompletionAttachmentInline(admin.StackedInline): @admin.register(CompetitionTask) class CompetitionTaskAdmin(admin.ModelAdmin): list_display = ("title", "type", "points") - inlines = [CompletionAttachmentInline] class CompetitionTaskInline(admin.StackedInline): diff --git a/services/backend/apps/task/migrations/0003_remove_competitiontask_attachments.py b/services/backend/apps/task/migrations/0003_remove_competitiontask_attachments.py new file mode 100644 index 0000000..dde46cd --- /dev/null +++ b/services/backend/apps/task/migrations/0003_remove_competitiontask_attachments.py @@ -0,0 +1,17 @@ +# Generated by Django 5.1.6 on 2025-03-02 09:22 + +from django.db import migrations + + +class Migration(migrations.Migration): + + dependencies = [ + ('task', '0002_competitiontask_attachments_and_more'), + ] + + operations = [ + migrations.RemoveField( + model_name='competitiontask', + name='attachments', + ), + ] diff --git a/services/backend/apps/task/models.py b/services/backend/apps/task/models.py index 2a7bc49..3124db9 100644 --- a/services/backend/apps/task/models.py +++ b/services/backend/apps/task/models.py @@ -49,9 +49,6 @@ class CompetitionTask(BaseModel): default="stdout", ) - attachments = models.ManyToManyField("CompetitionTaskAttachment", blank=True, - related_name="tasks_attachments") - def __str__(self): return self.title