Completed
Push — feature/player-list ( d145f5...9d1e0c )
by Vladimir
02:37
created

PlayerQueryBuilder   A

Complexity

Total Complexity 2

Size/Duplication

Total Lines 33
Duplicated Lines 0 %

Coupling/Cohesion

Components 1
Dependencies 1

Importance

Changes 0
Metric Value
wmc 2
lcom 1
cbo 1
dl 0
loc 33
rs 10
c 0
b 0
f 0

1 Method

Rating   Name   Duplication   Size   Complexity  
B withMatchActivity() 0 30 2
1
<?php
2
3
class PlayerQueryBuilder extends QueryBuilder
4
{
5
    public function withMatchActivity()
6
    {
7
        $type = $this->type;
8
        $columns = explode(',', $type::getEagerColumns());
9
10
        foreach ($columns as &$column) {
11
            $column = 'p.' . $column;
12
        }
13
14
        $this->tableAlias = 'p';
15
        $this->extraColumns = 'SUM(m2.activity) AS activity';
16
        $this->extras .= '
17
          LEFT JOIN
18
            (SELECT
19
              m.id,
20
              m.team_a_players,
21
              m.team_b_players,
22
              TIMESTAMPDIFF(SECOND, timestamp, NOW()) / 86400 AS days_passed,
23
              (0.0116687059537612 * (POW((45 - (SELECT days_passed)), (1/6)) + ATAN(31 - (SELECT days_passed)) / 2)) AS activity
24
            FROM
25
              matches m
26
            WHERE
27
              DATEDIFF(NOW(), timestamp) <= 45
28
            ORDER BY
29
              timestamp DESC) m2 ON FIND_IN_SET(p.id, m2.team_a_players) OR FIND_IN_SET(p.id, m2.team_b_players)
30
        ';
31
        $this->groupQuery = 'GROUP BY ' . implode(',', $columns);
32
33
        return $this;
34
    }
35
}
36