the browser-facing portion of osu!
at master 73 lines 2.6 kB view raw
1<?php 2 3// Copyright (c) ppy Pty Ltd <contact@ppy.sh>. Licensed under the GNU Affero General Public License v3.0. 4// See the LICENCE file in the repository root for full licence text. 5 6namespace App\Transformers; 7 8use App\Models\Contest; 9use Auth; 10use League\Fractal\Resource\Collection; 11use League\Fractal\Resource\Primitive; 12use League\Fractal\Resource\ResourceInterface; 13 14class ContestTransformer extends TransformerAbstract 15{ 16 protected array $availableIncludes = [ 17 'entries', 18 'scoring_categories', 19 'max_judging_score', 20 'max_total_score', 21 'users_voted_count', 22 ]; 23 24 public function transform(Contest $contest) 25 { 26 return [ 27 'best_of' => $contest->isBestOf(), 28 'description' => $contest->description_voting, 29 'entry_ends_at' => json_time($contest->entry_ends_at), 30 'entry_starts_at' => json_time($contest->entry_starts_at), 31 'header_url' => $contest->header_url, 32 'id' => $contest->id, 33 'judged' => $contest->isJudged(), 34 'link_icon' => $contest->link_icon, 35 'max_entries' => $contest->max_entries, 36 'max_votes' => $contest->max_votes, 37 'name' => $contest->name, 38 'show_names' => $contest->show_names, 39 'show_votes' => $contest->show_votes, 40 'submitted_beatmaps' => $contest->isSubmittedBeatmaps(), 41 'thumbnail_shape' => $contest->thumbnail_shape, 42 'type' => $contest->type, 43 'forced_width' => $contest->getForcedWidth(), 44 'forced_height' => $contest->getForcedHeight(), 45 'voting_ends_at' => json_time($contest->voting_ends_at), 46 ]; 47 } 48 49 public function includeEntries(Contest $contest) 50 { 51 return $this->collection($contest->entriesByType(Auth::user()), new ContestEntryTransformer()); 52 } 53 54 public function includeMaxJudgingScore(Contest $contest): Primitive 55 { 56 return $this->primitive((int) $contest->scoring_categories_sum_max_value); 57 } 58 59 public function includeMaxTotalScore(Contest $contest): Primitive 60 { 61 return $this->primitive((int) $contest->scoring_categories_sum_max_value * $contest->judges_count); 62 } 63 64 public function includeScoringCategories(Contest $contest): Collection 65 { 66 return $this->collection($contest->scoringCategories, new ContestScoringCategoryTransformer()); 67 } 68 69 public function includeUsersVotedCount(Contest $contest): ResourceInterface 70 { 71 return $this->primitive($contest->usersVotedCount()); 72 } 73}