Passed
Branch develop (4ef38d)
by BENARD
03:50
created

CorePlayerStrategy::getDataRank()   A

Complexity

Conditions 2
Paths 2

Size

Total Lines 18
Code Lines 6

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
eloc 6
dl 0
loc 18
rs 10
c 0
b 0
f 0
cc 2
nc 2
nop 0
1
<?php
2
3
namespace VideoGamesRecords\DwhBundle\DataProvider\Strategy\Core;
4
5
use DateTime;
6
use VideoGamesRecords\DwhBundle\Contracts\Strategy\CoreStrategyInterface;
7
8
class CorePlayerStrategy extends AbstractCoreProvider implements CoreStrategyInterface
9
{
10
    public function supports(string $name): bool
11
    {
12
        return $name === self::TYPE_PLAYER;
13
    }
14
15
    /**
16
     * @return array
17
     */
18
    public function getData(): array
19
    {
20
        $conn = $this->em->getConnection();
21
        $sql = "SELECT p.id,
22
                   p.chartRank0,
23
                   p.chartRank1,
24
                   p.chartRank2,
25
                   p.chartRank3,
26
                   p.pointChart,
27
                   p.rankPointChart,
28
                   p.rankMedal,
29
                   p.nbChart,
30
                   p.pointGame,
31
                   p.rankPointGame                   
32
            FROM vgr_player p
33
            WHERE p.id <> 0";
34
35
        $stmt = $conn->prepare($sql);
36
        $resultSet = $stmt->executeQuery();
37
        return $resultSet->fetchAllAssociative();
38
    }
39
40
    /**
41
     * @return array
42
     */
43
    public function getDataRank(): array
44
    {
45
        $query = $this->em->createQuery("
46
                    SELECT
47
                         p.id,
48
                         CASE WHEN pc.rank > 29 THEN 30 ELSE pc.rank END AS rank,
49
                         COUNT(pc.id) as nb
50
                    FROM VideoGamesRecords\CoreBundle\Entity\PlayerChart pc
51
                    JOIN pc.player p
52
                    WHERE pc.rank > 3            
53
                    GROUP BY p.id, rank");
54
55
        $result = $query->getResult();
56
        $data = array();
57
        foreach ($result as $row) {
58
            $data[$row['id']][$row['rank']] = $row['nb'];
59
        }
60
        return $data;
61
    }
62
63
    /**
64
     * @param DateTime $date1
65
     * @param DateTime $date2
66
     * @return array
67
     */
68
    public function getNbPostDay(DateTime $date1, DateTime $date2): array
69
    {
70
        $query = $this->em->createQuery("
71
            SELECT
72
                 p.id,
73
                 COUNT(pc.chart) as nb
74
            FROM VideoGamesRecords\CoreBundle\Entity\PlayerChart pc
75
            JOIN pc.player p
76
            WHERE pc.lastUpdate BETWEEN :date1 AND :date2
77
            GROUP BY p.id");
78
79
80
        $query->setParameter('date1', $date1);
81
        $query->setParameter('date2', $date2);
82
        $result = $query->getResult();
83
84
        $data = array();
85
        foreach ($result as $row) {
86
            $data[$row['id']] = $row['nb'];
87
        }
88
        return $data;
89
    }
90
}
91
92