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', }; if (! isset($auditionSubscores[$mode][$sort])) { $auditionSubscores[$mode][$sort] = $audition->scoringGuide->subscores->where($modeColumn, true)->sortBy($sortColumn); } else { Log::debug('Using cached subscores'); } return $auditionSubscores[$mode][$sort]; } 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'); } } }