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}