Test Failed
Push — develop ( 122787...70fd5a )
by Nikita
05:52
created

ServersTasksController::commandAuthorize()   A

Complexity

Conditions 6
Paths 6

Size

Total Lines 19
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 42

Importance

Changes 0
Metric Value
eloc 14
c 0
b 0
f 0
dl 0
loc 19
ccs 0
cts 0
cp 0
rs 9.2222
cc 6
nc 6
nop 2
crap 42
1
<?php
2
3
namespace Gameap\Http\Controllers\API;
4
5
use Gameap\Exceptions\Repositories\RepositoryValidationException;
6
use Gameap\Http\Controllers\AuthController;
7
use Gameap\Http\Requests\API\ServerTaskCreateRequest;
8
use Gameap\Http\Requests\API\ServerTaskUpdateRequest;
9
use Gameap\Models\Server;
10
use Gameap\Models\ServerTask;
11
use Gameap\Repositories\ServersTasksRepository;
12
use Illuminate\Http\JsonResponse;
13
use Illuminate\Http\Response;
14
15
class ServersTasksController extends AuthController
16
{
17
    /** @var ServersTasksRepository */
18
    protected $repository;
19
20 12
    public function __construct(ServersTasksRepository $serversTasksRepository)
21
    {
22 12
        parent::__construct();
23 12
        $this->repository = $serversTasksRepository;
24 12
    }
25
26
    /**
27
     * @param Server $server
28
     * @return array
29
     */
30 3
    public function getList(Server $server)
31
    {
32 3
        $this->authorize('server-tasks', $server);
33
34
        return $this->repository->getTasks($server->id);
35
    }
36
37
    /**
38
     * @param ServerTaskCreateRequest $request
39
     * @return JsonResponse
40 3
     * @throws RepositoryValidationException
41
     */
42 3
    public function store(ServerTaskCreateRequest $request)
43
    {
44 3
        $fields = $request->all();
45 3
46 3
        $server = Server::findOrFail($fields['server_id']);
47 3
        $this->authorize('server-tasks', $server);
48
49
        $this->commandAuthorize($fields['command'], $server);
50
51
        $serverTaskId = $this->repository->store($request->all());
52
53
        return response()->json([
54
            'message' => 'success',
55
            'serverTaskId' => $serverTaskId,
56
        ], Response::HTTP_CREATED);
57
    }
58 3
59
    /**
60 3
     * @param ServerTaskUpdateRequest $request
61
     * @param Server $server
62 3
     * @param ServerTask $serverTask
63
     * @return JsonResponse
64
     * @throws RepositoryValidationException
65
     * @noinspection PhpUnusedParameterInspection
66
     */
67
    public function update(ServerTaskUpdateRequest $request, Server $server, ServerTask $serverTask)
68
    {
69
        $fields = $request->all();
70
71
        $server = Server::findOrFail($fields['server_id']);
72 3
73
        $this->authorize('server-tasks', $server);
74 3
        $this->commandAuthorize($fields['command'], $server);
75 3
76
        $this->repository->update($serverTask->id, $fields);
77
78
        return response()->json(['message' => 'success'], Response::HTTP_OK);
79
    }
80
81
    /**
82
     * @param Server $server
83
     * @param ServerTask $serverTask
84
     * @return JsonResponse
85
     * @throws \Exception
86
     * @noinspection PhpUnusedParameterInspection
87
     */
88
    public function destroy(Server $server, ServerTask $serverTask)
89
    {
90
        $this->authorize('server-tasks', $server);
91
92
        $serverTask->delete();
93
        return response()->json(['message' => 'success'], Response::HTTP_OK);
94
    }
95
96
    /**
97
     * @param string $command
98
     * @param Server $server
99
     * @throws \Illuminate\Auth\Access\AuthorizationException
100
     */
101
    private function commandAuthorize(string $command, Server $server): void
102
    {
103
        switch ($command) {
104
            case 'start':
105
                $this->authorize('server-start', $server);
106
                break;
107
108
            case 'stop':
109
                $this->authorize('server-stop', $server);
110
                break;
111
112
            case 'restart':
113
                $this->authorize('server-restart', $server);
114
                break;
115
116
            case 'update':
117
            case 'reinstall':
118
                $this->authorize('server-update', $server);
119
                break;
120
        }
121
    }
122
}