Completed
Push — master ( 93d505...55670f )
by
unknown
03:20
created

UserPastGames::get()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 40

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
nc 3
nop 1
dl 0
loc 40
rs 9.28
c 0
b 0
f 0
1
<?php
2
3
namespace App\GameBetting\Business\Games;
4
5
use App\GameBetting\Business\GamePoints\PointsInterface;
6
use App\GameBetting\Persistence\DataProvider\Result;
7
use Doctrine\ORM\EntityManagerInterface;
8
use Symfony\Component\Security\Core\User\UserInterface;
9
use App\GameBetting\Persistence\Entity\UserBetting as UserBettingEntity;
10
use App\GameCore\Persistence\Entity\Game;
11
use App\GameBetting\Persistence\DataProvider\GamePastBetting;
12
13
class UserPastGames implements UserPastGamesInterface
14
{
15
    /**
16
     * @var EntityManagerInterface
17
     */
18
    private $entityManager;
19
20
    /**
21
     * @var PointsInterface
22
     */
23
    private $points;
24
25
    /**
26
     * @param EntityManagerInterface $entityManager
27
     * @param PointsInterface $points
28
     */
29
    public function __construct(EntityManagerInterface $entityManager, PointsInterface $points)
30
    {
31
        $this->entityManager = $entityManager;
32
        $this->points = $points;
33
    }
34
35
    /**
36
     * @param UserInterface $user
37
     * @return GamePastBetting[]
38
     */
39
    public function get(UserInterface $user): array
40
    {
41
        $pastGamesForm = [];
42
43
        /** @var Game[] $pastGames */
44
        $pastGames = $this->entityManager
45
            ->getRepository(Game::class)
46
            ->findPastGames();
47
48
        $gameId2UserBets = $this->getGameIdForUserBets($user, $pastGames);
49
50
        foreach ($pastGames as $pastGame) {
51
52
            $firstTeamUserResult = null;
53
            $secondTeamUserResult = null;
54
            if (isset($gameId2UserBets[$pastGame->getId()])) {
55
                $firstTeamUserResult = $gameId2UserBets[$pastGame->getId()]->getFirstTeamResult();
56
                $secondTeamUserResult = $gameId2UserBets[$pastGame->getId()]->getSecondTeamResult();
57
            }
58
59
            $gameResult = new Result(
60
                (int)$pastGame->getFirstTeamResult(),
61
                (int)$pastGame->getSecondTeamResult(),
62
                $firstTeamUserResult,
63
                $secondTeamUserResult
64
            );
65
66
            $pastGamesForm[$pastGame->getId()] = new GamePastBetting(
67
                $pastGame->getTeamFirst()->getName(),
68
                $pastGame->getTeamSecond()->getName(),
69
                $pastGame->getDate(),
70
                $gameResult->getFirstTeamResult(),
71
                $gameResult->getSecondTeamResult(),
72
                $gameResult->getFirstTeamUserResult(),
73
                $gameResult->getSecondTeamUserResult(),
74
                $this->points->get($gameResult)
75
            );
76
        }
77
78
        return $pastGamesForm;
79
    }
80
81
82
    /**
83
     * @param UserInterface $user
84
     * @param Game[] $pastGames
85
     * @return UserBettingEntity[]
86
     */
87
    private function getGameIdForUserBets(UserInterface $user, array $pastGames): array
88
    {
89
        /** @var UserBettingEntity[] $userBets */
90
        $userBets = $this->entityManager
91
            ->getRepository(UserBettingEntity::class)
92
            ->findUserBettingByUserId($user, $pastGames);
93
94
        /** @var UserBettingEntity[] $gameId2UserBets */
95
        $gameId2UserBets = [];
96
        foreach ($userBets as $userBet) {
97
            $gameId2UserBets[$userBet->getGame()->getId()] = $userBet;
98
        }
99
        return $gameId2UserBets;
100
    }
101
}