From 027ab3c63221729fbcd7d031aa0248d251580fbc Mon Sep 17 00:00:00 2001 From: Venix <30481900+venix12@users.noreply.github.com> Date: Fri, 26 Jan 2024 03:57:08 +0100 Subject: [PATCH] entries controller improvements --- .../Controllers/ContestEntriesController.php | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/app/Http/Controllers/ContestEntriesController.php b/app/Http/Controllers/ContestEntriesController.php index 7d720b78f53..0c35b499d3c 100644 --- a/app/Http/Controllers/ContestEntriesController.php +++ b/app/Http/Controllers/ContestEntriesController.php @@ -73,21 +73,22 @@ public function judgeVote($id) 'comment', ]); - $categoryIds = new Set(array_pluck($params['scores'], 'contest_scoring_category_id')); - $categoryIds->intersect(new Set($entry->contest->scoringCategories->pluck('id'))); + $scoresByCategoryId = collect($params['scores']) + ->keyBy('contest_scoring_category_id'); - if ($categoryIds->count() !== $entry->contest->scoringCategories->count()) { + $expectedCategoryIds = new Set($entry->contest->scoringCategories->pluck('id')); + $givenCategoryIds = new Set($scoresByCategoryId->keys()); + + if ($expectedCategoryIds->diff($givenCategoryIds)->count() > 0) { throw new InvariantException(osu_trans('contest.judge.validation.missing_score')); } - DB::transaction(function () use ($entry, $params) { + DB::transaction(function () use ($entry, $params, $scoresByCategoryId) { $vote = $entry->judgeVotes()->firstOrNew(['user_id' => Auth::user()->getKey()]); $vote->fill(['comment' => $params['comment']])->save(); - foreach ($params['scores'] as $score) { - $category = $entry->contest->scoringCategories - ->find($score['contest_scoring_category_id']); - + foreach ($entry->contest->scoringCategories as $category) { + $score = $scoresByCategoryId[$category->getKey()]; $value = clamp($score['value'], 0, $category->max_value); $vote->scores()->firstOrNew([