id.'-'.$mode.'-'.$sort; return Cache::remember($cacheKey, 10, function () use ($audition, $mode, $sort) { $this->validateAudition($audition); $this->validateMode($mode); $this->validateSort($sort); $sortColumn = match ($sort) { 'tiebreak' => 'tiebreak_order', 'display' => 'display_order', }; $modeColumn = match ($mode) { 'seating' => 'for_seating', 'advancement' => 'for_advance', }; $audition->load('scoringGuide.subscores'); return $audition->scoringGuide->subscores->where($modeColumn, true)->sortBy($sortColumn); }); } public function getSubscoresNEW(Audition $audition, $mode = 'seating', $sort = 'tiebreak') { $this->validateMode($mode); $this->validateSort($sort); $cacheKey = 'auditionSubscores-'.$mode.'-'.$sort; $assignments = Cache::remember($cacheKey, 60, function () use ($audition, $mode, $sort) { $this->validateAudition($audition); $sortColumn = match ($sort) { 'tiebreak' => 'tiebreak_order', 'display' => 'display_order', }; $modeColumn = match ($mode) { 'seating' => 'for_seating', 'advancement' => 'for_advance', }; $allAuditions = Audition::with(['scoringGuide.subscores' => function ($query) use ($modeColumn, $sortColumn) { $query->where($modeColumn, 1)->orderBy($sortColumn); }])->get(); $return = []; foreach ( $allAuditions as $audition) { $return[$audition->id] = $audition->scoringGuide->subscores; } return $return; }); return $assignments[$audition->id]; } public function getJudgesOLD(Audition $audition) { $cacheKey = 'auditionJudges-'.$audition->id; return Cache::remember($cacheKey, 10, function () use ($audition) { $this->validateAudition($audition); return $audition->judges; }); } public function getJudges(Audition $audition) { $cacheKey = 'auditionJudgeAssignments'; $assignments = Cache::remember($cacheKey, 60, function () { $allAuditions = Audition::with('judges')->get(); $return = []; foreach ($allAuditions as $audition) { $return[$audition->id] = $audition->judges; } return $return; }); return $assignments[$audition->id]; } protected function validateAudition($audition) { if (! $audition->exists()) { throw new AuditionServiceException('Invalid audition provided'); } } protected function validateMode($mode) { if ($mode !== 'seating' && $mode !== 'advancement') { throw new AuditionServiceException('Invalid mode requested. Mode must be seating or advancement'); } } protected function validateSort($sort) { if ($sort !== 'tiebreak' && $sort !== 'display') { throw new AuditionServiceException('Invalid sort requested. Sort must be tiebreak or weight'); } } }