Completed
Pull Request — master (#6)
by Rafal
07:50 queued 03:16
created

UserBetting::list()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 7

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 10
rs 9.4285
c 0
b 0
f 0
cc 1
eloc 7
nc 1
nop 0
1
<?php
2
3
namespace App\GameBetting\Communication\Controller;
4
5
6
use App\GameBetting\Business\Form\UserBettingType;
7
use App\GameBetting\Business\Games\UserFutureGamesInterface;
8
use App\GameBetting\Business\Games\UserPastGamesInterface;
9
use App\GameBetting\Persistence\Entity\UserBetting as UserBettingEntity;
10
use App\GameCore\Persistence\Entity\Game;
11
use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
12
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
13
use Symfony\Component\HttpFoundation\Request;
14
use Symfony\Component\Routing\Annotation\Route;
15
16
class UserBetting extends Controller
17
{
18
    /**
19
     * @var UserFutureGamesInterface
20
     */
21
    private $userFutureGames;
22
23
    /**
24
     * @var UserPastGamesInterface
25
     */
26
    private $userPastGames;
27
28
    /**
29
     * @param UserFutureGamesInterface $userFutureGames
30
     * @param UserPastGamesInterface $userPastGames
31
     */
32
    public function __construct(UserFutureGamesInterface $userFutureGames, UserPastGamesInterface $userPastGames)
33
    {
34
        $this->userFutureGames = $userFutureGames;
35
        $this->userPastGames = $userPastGames;
36
    }
37
38
    /**
39
     * @Route("/gamebet/", name="game_bet_list")
40
     */
41
    public function list()
42
    {
43
        $futureGamesFormBuilder = $this->getFutureGamesFormBuilder();
44
        $pastGamesForm = $this->userPastGames->get($this->getUser());
45
46
        return $this->render(
47
            'gamebetting/betting/betting.html.twig',
48
            [
49
                'futureGamesForm' => $futureGamesFormBuilder,
50
                'pastGamesForm'   => $pastGamesForm
51
            ]
52
        );
53
    }
54
55
    /**
56
     * @Route("/savebet", name="save_bet")
57
     * @Method({"POST"})
58
     */
59
    public function saveBet(Request $request)
60
    {
61
        $params = $request->get('user_betting');
62
        $userBetting = new UserBettingEntity();
63
        $form = $this->createForm(UserBettingType::class, $userBetting);
64
        $form->handleRequest($request);
65
        if (!$form->isSubmitted() && !$form->isValid()) {
66
            return $this->json(['status' => false]);
67
        }
68
        if(!isset($params['firstTeamResult'])  || $params['firstTeamResult'] < 0) {
69
            return $this->json(['status' => false]);
70
        }
71
        if(!isset($params['secondTeamResult'])  || $params['secondTeamResult'] < 0) {
72
            return $this->json(['status' => false]);
73
        }
74
        
75
        $entityManager = $this->getDoctrine()->getManager();
76
77
        $userBetting = $entityManager->getRepository(UserBettingEntity::class)
78
                                     ->findByGameIdAndUserId($params['gameId'], $this->getUser()->getId())
79
        ;
80
        if (!$userBetting instanceof UserBettingEntity) {
81
            $userBetting = new UserBettingEntity();
82
            $game = $entityManager->getRepository(Game::class)
83
                                  ->find($params['gameId']);
84
            $userBetting->setGame($game);
85
            $userBetting->setUser($this->getUser());
86
        }
87
88
89
        $userBetting->setFirstTeamResult($params['firstTeamResult']);
90
        $userBetting->setSecondTeamResult($params['secondTeamResult']);
91
92
        if($userBetting->getGame()->getDate()->getTimestamp() < time() ) {
93
            return $this->json(['status' => false]);
94
        }
95
96
        $entityManager->persist($userBetting);
97
        $entityManager->flush();
98
99
        return $this->json(['status' => true]);
100
    }
101
102
    /**
103
     * @return array
104
     */
105
    private function getFutureGamesFormBuilder(): array
106
    {
107
        $userFurureGames = $this->userFutureGames->get(
108
            $this->getUser()
109
        );
110
        $gamesFormBuilder = [];
111
        foreach ($userFurureGames as $gameId => $futureGameInfo) {
112
            $gamesFormBuilder[$gameId] = $this->createForm(
113
                UserBettingType::class, null, $futureGameInfo
114
            )->createView();
115
        }
116
        return $gamesFormBuilder;
117
    }
118
}