Test Failed
Push — develop ( 70fd5a...274caf )
by Nikita
05:55
created

ServersTasksController::update()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 10
Code Lines 5

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 6
CRAP Score 1

Importance

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