Passed
Push — develop ( a015ab...6a2a51 )
by Nikita
06:34
created

GdaemonTaskRepository::concatOutput()   A

Complexity

Conditions 4
Paths 3

Size

Total Lines 12
Code Lines 8

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 8
nc 3
nop 2
dl 0
loc 12
rs 10
c 0
b 0
f 0
1
<?php
2
3
namespace Gameap\Repositories;
4
5
use Gameap\Models\Server;
6
use Gameap\Models\GdaemonTask;
7
use Gameap\Models\DedicatedServer;
8
use Gameap\Exceptions\Repositories\RecordExistExceptions;
9
use Illuminate\Support\Facades\DB;
10
use PDO;
11
12
/**
13
 * Class GdaemonTaskRepository
14
*/
15
class GdaemonTaskRepository
16
{
17
    protected $model;
18
19
    public function __construct(GdaemonTask $gdaemonTask)
20
    {
21
        $this->model = $gdaemonTask;
22
    }
23
    
24
    public function getAll($perPage = 20)
25
    {
26
        $gdaemonTasks = GdaemonTask::orderBy('id', 'DESC')->paginate($perPage);
27
        return $gdaemonTasks;
28
    }
29
30
    public function getById(int $id)
0 ignored issues
show
Unused Code introduced by
The parameter $id is not used and could be removed. ( Ignorable by Annotation )

If this is a false-positive, you can also ignore this issue in your code via the ignore-unused  annotation

30
    public function getById(/** @scrutinizer ignore-unused */ int $id)

This check looks for parameters that have been defined for a function or method, but which are not used in the method body.

Loading history...
31
    {
32
33
    }
34
35
    /**
36
     * Create new starting of game server task
37
     *
38
     * @param Server $server
39
     * @param int $runAftId
40
     * @return int Gdaemon Task ID
41
     */
42
    public function addServerStart(Server $server, int $runAftId = 0)
43
    {
44
        $this->workingTaskNotExistOrFail($server->id, GdaemonTask::TASK_SERVER_START, 'Server start task is already exists');
45
        
46
        return GdaemonTask::create([
47
            'run_aft_id' => $runAftId,
48
            'dedicated_server_id' => $server->ds_id,
49
            'server_id' => $server->id,
50
            'task' => GdaemonTask::TASK_SERVER_START,
51
        ])->id;
52
    }
53
54
    /**
55
     * Create new stopping of game server task
56
     *
57
     * @param Server $server
58
     * @param int $runAftId
59
     * @return int Gdaemon Task ID
60
     */
61
    public function addServerStop(Server $server, int $runAftId = 0)
62
    {
63
        $this->workingTaskNotExistOrFail($server->id, GdaemonTask::TASK_SERVER_STOP, 'Server stop task is already exists');
64
65
        return GdaemonTask::create([
66
            'run_aft_id' => $runAftId,
67
            'dedicated_server_id' => $server->ds_id,
68
            'server_id' => $server->id,
69
            'task' => GdaemonTask::TASK_SERVER_STOP,
70
        ])->id;
71
    }
72
73
    /**
74
     * @param Server $server
75
     * @param int    $runAftId
76
     *
77
     * @return int Gdaemon Task ID
78
     */
79
    public function addServerRestart(Server $server, int $runAftId = 0)
80
    {
81
        $this->workingTaskNotExistOrFail($server->id, GdaemonTask::TASK_SERVER_RESTART, 'Server restart task is already exists');
82
        
83
        return GdaemonTask::create([
84
            'run_aft_id' => $runAftId,
85
            'dedicated_server_id' => $server->ds_id,
86
            'server_id' => $server->id,
87
            'task' => GdaemonTask::TASK_SERVER_RESTART,
88
        ])->id;
89
    }
90
91
    /**
92
     * @param Server $server
93
     * @param int    $runAftId
94
     *
95
     * @return int Gdaemon Task ID
96
     */
97
    public function addServerUpdate(Server $server, int $runAftId = 0)
98
    {
99
        $this->workingTaskNotExistOrFail($server->id, GdaemonTask::TASK_SERVER_UPDATE, 'Server update/install task is already exists');
100
        
101
        return GdaemonTask::create([
102
            'run_aft_id' => $runAftId,
103
            'dedicated_server_id' => $server->ds_id,
104
            'server_id' => $server->id,
105
            'task' => GdaemonTask::TASK_SERVER_UPDATE,
106
        ])->id;
107
    }
108
109
    /**
110
     * @param Server $server
111
     * @param int    $runAftId
112
     *
113
     * @return int Gdaemon Task ID
114
     */
115
    public function addServerDelete(Server $server, int $runAftId = 0)
116
    {
117
        $this->workingTaskNotExistOrFail($server->id, GdaemonTask::TASK_SERVER_DELETE, 'Server delete task is already exists');
118
        
119
        return GdaemonTask::create([
120
            'run_aft_id' => $runAftId,
121
            'dedicated_server_id' => $server->ds_id,
122
            'server_id' => $server->id,
123
            'task' => GdaemonTask::TASK_SERVER_DELETE,
124
        ])->id;
125
    }
126
127
    /**
128
     * @param GdaemonTask $gdaemonTask
129
     * @param string $output
130
     */
131
    public function concatOutput(GdaemonTask $gdaemonTask, string $output)
132
    {
133
        $qoutedOutput = DB::connection()->getPdo()->quote($output);
134
135
        $dbDriver = DB::connection()->getPDO()->getAttribute(PDO::ATTR_DRIVER_NAME);
136
137
        if ($dbDriver == 'mysql') {
138
            $gdaemonTask->update(['output' => DB::raw("CONCAT(IFNULL(output,''), {$qoutedOutput})")]);
139
        } else if ($dbDriver == 'sqlite' || $dbDriver == 'pgsql') {
140
            $gdaemonTask->update(['output' => DB::raw("COALESCE(output, '') || {$qoutedOutput}")]);
141
        } else {
142
            $gdaemonTask->update(['output' => $gdaemonTask->output . $output]);
143
        }
144
    }
145
146
    /**
147
     * @param string|array $task task name
148
     * @param string $failMsg Failure message
149
     *
150
     * @throws RecordExistExceptions
151
     */
152
    private function workingTaskNotExistOrFail($serverId, $task, $failMsg = 'Task is already exists')
153
    {
154
        if (is_array($task)) {
155
            $taskQuery = GdaemonTask::whereIn(['task', $task])->where([['server_id', '=', $serverId]]);
156
        } else {
157
            $taskQuery = GdaemonTask::where([
158
                ['task', '=', $task],
159
                ['server_id', '=', $serverId]
160
            ]);
161
        }
162
163
        $taskExist = $taskQuery->whereIn('status', [
164
            GdaemonTask::STATUS_WAITING, 
165
            GdaemonTask::STATUS_WORKING
166
        ])->exists();
167
168
        if ($taskExist) {
169
            throw new RecordExistExceptions($failMsg);
170
        }
171
    }
172
}
173