Passed
Push — master ( 6b0e6b...43789e )
by Stephen
03:30
created

TrackActivityQuery   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 64
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 29
c 1
b 0
f 0
dl 0
loc 64
rs 10
wmc 7

1 Method

Rating   Name   Duplication   Size   Complexity  
B execute() 0 34 7
1
<?php
2
3
namespace Sfneal\Tracking\Queries;
4
5
use Illuminate\Http\Request;
6
use Sfneal\Helpers\Time\TimePeriods;
7
use Sfneal\Queries\AbstractQueryStatic;
8
use Sfneal\Queries\Traits\ParamGetter;
9
use Sfneal\Tracking\Builders\TrackActivityBuilder;
10
use Sfneal\Tracking\Models\TrackActivity;
11
12
class TrackActivityQuery extends AbstractQueryStatic
13
{
14
    use ParamGetter;
15
16
    /**
17
     * Relationships that should be eager loaded by default.
18
     */
19
    private const DEFAULT_RELATIONSHIPS = [
20
        'user',
21
        'tracking',
22
        'plan',
23
        'planManagement',
24
        'planManagement.plan',
25
        'project',
26
        'task',
27
        'task.project',
28
        'taskRecord',
29
        'taskRecord.task',
30
        'taskRecord.task.project',
31
    ];
32
33
    /**
34
     * Retrieve a TrackActivity by table query result set.
35
     *
36
     * @param Request|null $request
37
     * @param array        $parameters
38
     * @param array|null   $relationships
39
     *
40
     * @return TrackActivityBuilder
41
     */
42
    public static function execute(Request $request = null, array $parameters = [], array $relationships = null): TrackActivityBuilder
43
    {
44
        $tracking = TrackActivity::query()
45
            ->with($relationships ?? self::DEFAULT_RELATIONSHIPS);
46
47
        // Table
48
        if ($table = self::getParam($request, $parameters, 'table')) {
49
            $tracking->whereModelTable($table);
50
        }
51
52
        // User
53
        if ($user = self::getParam($request, $parameters, 'user')) {
54
            $tracking->whereUser($user);
55
        }
56
57
        // User(s)
58
        if ($users = self::getParam($request, $parameters, 'users')) {
59
            $tracking->whereUserIn($users);
60
        }
61
62
        // Key
63
        if ($model_keys = self::getParam($request, $parameters, 'key')) {
64
            $tracking->whereModelKey($model_keys);
65
        }
66
67
        // Time Period
68
        if ($period = self::getParam($request, $parameters, 'period')) {
69
            if (is_string($period)) {
70
                $period = TimePeriods::timePeriod($period);
71
            }
72
            $tracking->whereBetween('created_at', $period);
73
        }
74
75
        return $tracking;
76
    }
77
}
78