CorePlayerStrategy::getDataRank()   A
last analyzed

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
declare(strict_types=1);
4
5
namespace VideoGamesRecords\DwhBundle\DataProvider\Strategy\Core;
6
7
use DateTime;
8
use Doctrine\DBAL\Exception;
9
use VideoGamesRecords\DwhBundle\Contracts\Strategy\CoreStrategyInterface;
10
11
class CorePlayerStrategy extends AbstractCoreProvider implements CoreStrategyInterface
12
{
13
    public function supports(string $name): bool
14
    {
15
        return $name === self::TYPE_PLAYER;
16
    }
17
18
19
    /**
20
     * @throws Exception
21
     */
22
    public function getData(): array
23
    {
24
        $conn = $this->em->getConnection();
25
        $sql = "SELECT p.id,
26
                   p.chart_rank0,
27
                   p.chart_rank1,
28
                   p.chart_rank2,
29
                   p.chart_rank3,
30
                   p.point_chart,
31
                   p.rank_point_chart,
32
                   p.rank_medal,
33
                   p.nb_chart,
34
                   p.point_game,
35
                   p.rank_point_game                   
36
            FROM vgr_player p
37
            WHERE p.id <> 0";
38
39
        $stmt = $conn->prepare($sql);
40
        $resultSet = $stmt->executeQuery();
41
        return $resultSet->fetchAllAssociative();
42
    }
43
44
    /**
45
     * @return array
46
     */
47
    public function getDataRank(): array
48
    {
49
        $query = $this->em->createQuery("
50
                    SELECT
51
                         p.id,
52
                         CASE WHEN pc.rank > 29 THEN 30 ELSE pc.rank END AS rank,
53
                         COUNT(pc.id) as nb
54
                    FROM VideoGamesRecords\CoreBundle\Entity\PlayerChart pc
55
                    JOIN pc.player p
56
                    WHERE pc.rank > 3            
57
                    GROUP BY p.id, rank");
58
59
        $result = $query->getResult();
60
        $data = array();
61
        foreach ($result as $row) {
62
            $data[$row['id']][$row['rank']] = $row['nb'];
63
        }
64
        return $data;
65
    }
66
67
    /**
68
     * @param DateTime $date1
69
     * @param DateTime $date2
70
     * @return array
71
     */
72
    public function getNbPostDay(DateTime $date1, DateTime $date2): array
73
    {
74
        $query = $this->em->createQuery("
75
            SELECT
76
                 p.id,
77
                 COUNT(pc.chart) as nb
78
            FROM VideoGamesRecords\CoreBundle\Entity\PlayerChart pc
79
            JOIN pc.player p
80
            WHERE pc.lastUpdate BETWEEN :date1 AND :date2
81
            GROUP BY p.id");
82
83
84
        $query->setParameter('date1', $date1);
85
        $query->setParameter('date2', $date2);
86
        $result = $query->getResult();
87
88
        $data = array();
89
        foreach ($result as $row) {
90
            $data[$row['id']] = $row['nb'];
91
        }
92
        return $data;
93
    }
94
}
95