mirror of
https://gitlab.com/megazordpobeda/DataRush.git
synced 2026-05-23 03:57:09 +00:00
super aboba
This commit is contained in:
@@ -1,3 +1,4 @@
|
|||||||
|
from random import choice
|
||||||
from uuid import uuid4
|
from uuid import uuid4
|
||||||
|
|
||||||
from django.db import models
|
from django.db import models
|
||||||
@@ -5,6 +6,9 @@ from django.db import models
|
|||||||
from apps.task.validators import ContestTaskCriteriesValidator
|
from apps.task.validators import ContestTaskCriteriesValidator
|
||||||
from apps.competition.models import Competition
|
from apps.competition.models import Competition
|
||||||
from apps.core.models import BaseModel
|
from apps.core.models import BaseModel
|
||||||
|
from apps.user.models import User
|
||||||
|
from apps.task.models import CompetitionTask
|
||||||
|
|
||||||
|
|
||||||
class CompetitionTask(BaseModel):
|
class CompetitionTask(BaseModel):
|
||||||
class CompetitionTaskType(models.TextChoices):
|
class CompetitionTaskType(models.TextChoices):
|
||||||
@@ -13,7 +17,7 @@ class CompetitionTask(BaseModel):
|
|||||||
REVIEW = "review"
|
REVIEW = "review"
|
||||||
|
|
||||||
def answer_file_upload_to(instance, filename) -> str:
|
def answer_file_upload_to(instance, filename) -> str:
|
||||||
return f"/tasks/{instance.id}/answer/{uuid4}"
|
return f"/tasks/{instance.id}/answer/{uuid4()}/filename"
|
||||||
|
|
||||||
competition = models.ForeignKey(Competition, on_delete=models.CASCADE)
|
competition = models.ForeignKey(Competition, on_delete=models.CASCADE)
|
||||||
title = models.TextField(verbose_name="заголовок", max_length=50)
|
title = models.TextField(verbose_name="заголовок", max_length=50)
|
||||||
@@ -21,13 +25,41 @@ class CompetitionTask(BaseModel):
|
|||||||
type = models.CharField(choices=CompetitionTaskType, max_length=8)
|
type = models.CharField(choices=CompetitionTaskType, max_length=8)
|
||||||
|
|
||||||
# only when "input" or "checker" type
|
# only when "input" or "checker" type
|
||||||
correct_answer_file = models.FileField(upload_to=answer_file_upload_to)
|
correct_answer_file = models.FileField(
|
||||||
|
upload_to=answer_file_upload_to, null=True, blank=True
|
||||||
|
)
|
||||||
|
points = models.IntegerField(null=True, blank=True)
|
||||||
|
|
||||||
# only when "checker" type
|
# only when "checker" type
|
||||||
answer_file_path = models.TextField()
|
answer_file_path = models.TextField(null=True, blank=True)
|
||||||
|
|
||||||
# only when "review" type
|
# only when "review" type
|
||||||
criteries = models.JSONField(blank=True, null=True)
|
criteries = models.JSONField(blank=True, null=True)
|
||||||
|
|
||||||
def clean(self):
|
def clean(self):
|
||||||
ContestTaskCriteriesValidator()(self)
|
ContestTaskCriteriesValidator()(self)
|
||||||
|
|
||||||
|
|
||||||
|
class CompetetionTaskSumbission(BaseModel):
|
||||||
|
class StatusChoices(models.TextChoices):
|
||||||
|
SENT = "sent"
|
||||||
|
CHECKING = "checking"
|
||||||
|
CHECKED = "checked"
|
||||||
|
|
||||||
|
def submission_content_upload_to(instance, filename) -> str:
|
||||||
|
return f"/submissions/{instance.id}/content"
|
||||||
|
|
||||||
|
def submission_stdout_upload_to(instance, filename) -> str:
|
||||||
|
return f"/submissions/{instance.id}/stdout"
|
||||||
|
|
||||||
|
status = models.CharField(
|
||||||
|
choices=StatusChoices.choices, default=StatusChoices.SENT, max_length=2
|
||||||
|
)
|
||||||
|
user = models.ForeignKey(User, on_delete=models.CASCADE)
|
||||||
|
task = models.ForeignKey(CompetitionTask, on_delete=models.CASCADE)
|
||||||
|
content = models.FileField(upload_to=submission_content_upload_to)
|
||||||
|
stdout = models.FileField(
|
||||||
|
upload_to=submission_stdout_upload_to, null=True, blank=True
|
||||||
|
)
|
||||||
|
result = models.JSONField(default=None, null=True, blank=True)
|
||||||
|
timestamp = models.DateTimeField(auto_now_add=True)
|
||||||
|
|||||||
Reference in New Issue
Block a user