Passed
Push — dev ( db0fad...e5307e )
by Mattia
04:25
created

AccountStats   A

Complexity

Total Complexity 4

Size/Duplication

Total Lines 83
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 28
c 0
b 0
f 0
dl 0
loc 83
rs 10
wmc 4

4 Methods

Rating   Name   Duplication   Size   Complexity  
A getLastUsers() 0 4 1
A getMostWanted() 0 9 1
A incrementRequestStats() 0 6 1
A incrementSearchStats() 0 6 1
1
<?php
2
3
declare(strict_types=1);
4
5
namespace App\Models;
6
7
use Illuminate\Database\Eloquent\Model as Model;
8
use Illuminate\Support\Facades\DB;
9
10
/**
11
 * Class AccountsStats.
12
 *
13
 * @property string $uuid
14
 * @property int    $count_request
15
 * @property int    $count_search
16
 * @property int    $time_request
17
 * @property int    $time_search
18
 */
19
class AccountStats extends Model
20
{
21
    /**
22
     * Table name.
23
     *
24
     * @var string
25
     */
26
    protected $table = 'accounts_stats';
27
28
    /**
29
     * Primary key.
30
     *
31
     * @var string
32
     */
33
    protected $primaryKey = 'uuid';
34
35
    /**
36
     * No primary key.
37
     *
38
     * @var bool
39
     */
40
    public $incrementing = false;
41
42
    /**
43
     * @var bool
44
     */
45
    public $timestamps = false;
46
47
    /**
48
     * Increment request counter.
49
     */
50
    public function incrementRequestStats(string $uuid = '')
51
    {
52
        $this->where('uuid', $uuid)
53
            ->update([
54
                'count_request' => app('db')->raw('count_request + 1'),
55
                'time_request' => \time(),
56
            ]);
57
    }
58
59
    /**
60
     * Increment search counter.
61
     */
62
    public function incrementSearchStats(string $uuid = '')
63
    {
64
        $this->where('uuid', $uuid)
65
            ->update([
66
                'count_search' => app('db')->raw('count_search + 1'),
67
                'time_search' => \time(),
68
            ]);
69
    }
70
71
    /**
72
     * Get most wanted users.
73
     *
74
     * @return mixed
75
     */
76
    public static function getMostWanted()
77
    {
78
        $default_uuid = env('DEFAULT_UUID');
79
80
        return DB::select(
81
            "SELECT a.`uuid`, a.`username`, s.`count_request`
82
             FROM (
83
              SELECT `uuid`, `count_request` FROM `accounts_stats`
84
              WHERE `uuid` != '{$default_uuid}'
85
              ORDER BY `count_request` DESC
86
              LIMIT 14
87
            ) s
88
            INNER JOIN `accounts` AS a USING(`uuid`)
89
            ORDER BY s.`count_request` DESC"
90
        );
91
    }
92
93
    /**
94
     * Get last users.
95
     *
96
     * @return mixed
97
     */
98
    public static function getLastUsers()
99
    {
100
        return DB::select(
101
            'SELECT a.`uuid`, a.`username`, s.`count_request`
102
              FROM (
103
                SELECT `uuid`, `count_request` FROM `accounts_stats`
104
                ORDER BY `time_request` DESC
105
                LIMIT 9
106
              ) s
107
            INNER JOIN `accounts` a USING(`uuid`)
108
            ORDER BY s.`count_request` DESC'
109
        );
110
    }
111
}
112