Blame view

app/Queries/Predictor/RelevantRounds.php 2.29 KB
e77200db5   nologostudio.ru   Initial commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
  <?php
  
  namespace FootyRoom\Queries\Predictor;
  
  class RelevantRounds
  {
      /** @var \FootyRoom\Queries\Predictor\Round */
      public $previous;
      
      /** @var \FootyRoom\Queries\Predictor\Round */
      public $selected;
      
      /** @var \FootyRoom\Queries\Predictor\Round */
      public $next;
      
      /** @var \FootyRoom\Queries\Predictor\Round */
      public $current;
  
      public function __construct(Round $selected, ?Round $previous, ?Round $next, ?Round $current)
      {
          $currentRoundId = $current ? $current->id : $selected->id;
  
          foreach (['previous', 'selected', 'next', 'current'] as $round) {
              if (!${$round}) continue;
  
              if (${$round}->id > $currentRoundId) {
                  ${$round}->status = 'upcoming';
              } elseif (${$round}->id < $currentRoundId) {
                  ${$round}->status = 'finished';
              } else {
                  ${$round}->status = 'current';
              }
          }
  
          $this->previous = $previous;
          $this->selected = $selected;
          $this->next = $next;
          $this->current = $current;
      }
  
      /**
       * Add player rounds information to each relevant round.
       */
      public function addPlayerRounds(array $playerRounds): void
      {
          foreach ($playerRounds as $playerRound) {
              foreach (['previous', 'selected', 'next', 'current'] as $round) {
                  if ($this->{$round} && $this->{$round}->id === $playerRound->phase) {
                      $this->{$round}->player = $playerRound;
                      break;
                  }
              }
          }
      }
  
      /**
       * Get all relevant rounds ids.
       */
      public function getRoundIds(): array
      {
          $roundIds = [];
          
          foreach (['previous', 'selected', 'next', 'current'] as $round) {
              if ($this->{$round}) {
                  $roundIds[] = $this->{$round}->id;
              }
          }
  
          return $roundIds;
      }
  
      public function forResponse(): array
      {
          return [
              'previous' => $this->previous ? $this->previous->forResponse() : null,
              'selected' => $this->selected ? $this->selected->forResponse(true) : null,
              'next' => $this->next ? $this->next->forResponse() : null,
              'current' => $this->current ? $this->current->forResponse() : null,
          ];
      }
  }