mirror of
https://gitlab.com/megazordpobeda/DataRush.git
synced 2026-05-23 19:07:10 +00:00
feat: added multiple reviewers support
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
from datetime import datetime
|
||||
from http import HTTPStatus as status
|
||||
from statistics import median
|
||||
from uuid import UUID
|
||||
|
||||
from django.http import HttpRequest
|
||||
@@ -84,15 +85,22 @@ def evaluate_submission(
|
||||
review.evaluation = evaluation
|
||||
review.state = ReviewStatusChoices.CHECKED.value
|
||||
review.submission.checked_at = datetime.now()
|
||||
|
||||
points = 0
|
||||
for criterea in evaluation:
|
||||
points += criterea["mark"]
|
||||
review.submission.earned_points = (
|
||||
points # TODO: оценка не от последнего проверяющего а средняя по всем
|
||||
)
|
||||
review.save()
|
||||
|
||||
submission_evaluations = Review.objects.filter(submission=submission).values_list('evaluation', flat=True)
|
||||
|
||||
marks = []
|
||||
for evaluation in submission_evaluations:
|
||||
mark = 0
|
||||
for criterea in evaluation:
|
||||
mark += criterea["mark"]
|
||||
marks.append(mark)
|
||||
earned_points = median(marks)
|
||||
|
||||
review.submission.earned_points = (
|
||||
earned_points
|
||||
)
|
||||
|
||||
all_checked = not submission.reviews.exclude(
|
||||
state=ReviewStatusChoices.CHECKED
|
||||
).exists()
|
||||
@@ -100,5 +108,6 @@ def evaluate_submission(
|
||||
review.submission.status = (
|
||||
CompetitionTaskSubmission.StatusChoices.CHECKED.value
|
||||
)
|
||||
review.submission.save()
|
||||
review.submission.save()
|
||||
|
||||
return status.OK, review.submission
|
||||
|
||||
@@ -57,6 +57,7 @@ class CompetitionTask(BaseModel):
|
||||
verbose_name="ревьюверы",
|
||||
help_text="Справа отображаются действующие проверяющие, слева - доступные для выбора. Для перемещения можно кликнуть 2 раза по проверяющему"
|
||||
)
|
||||
submission_reviewers_count = models.PositiveSmallIntegerField(default=1, null=True, blank=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.title
|
||||
@@ -152,8 +153,8 @@ class CompetitionTaskSubmission(BaseModel):
|
||||
if not self.task.reviewers.exists():
|
||||
return
|
||||
|
||||
reviewer = (
|
||||
self.task.reviewers.annotate(
|
||||
reviewers_count = self.task.submission_reviewers_count
|
||||
reviewers = self.task.reviewers.annotate(
|
||||
pending_count=Count(
|
||||
"review",
|
||||
filter=Q(
|
||||
@@ -163,11 +164,10 @@ class CompetitionTaskSubmission(BaseModel):
|
||||
]
|
||||
),
|
||||
)
|
||||
).order_by("pending_count")[:reviewers_count] # да это медленно работает и чо
|
||||
|
||||
for reviewer in reviewers:
|
||||
Review.objects.create(
|
||||
reviewer=reviewer,
|
||||
submission=self,
|
||||
)
|
||||
.order_by("pending_count")
|
||||
.first()
|
||||
)
|
||||
review = Review.objects.create(
|
||||
reviewer=reviewer,
|
||||
submission=self,
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user