Passed
Branch master (aecce8)
by Brice
05:03
created

AddTask::handle()   D

Complexity

Conditions 9
Paths 12

Size

Total Lines 29
Code Lines 16

Duplication

Lines 0
Ratio 0 %

Code Coverage

Tests 0
CRAP Score 90

Importance

Changes 0
Metric Value
dl 0
loc 29
rs 4.909
c 0
b 0
f 0
ccs 0
cts 17
cp 0
cc 9
eloc 16
nc 12
nop 1
crap 90
1
<?php
2
3
namespace JobQueue\Application\Http;
4
5
use JobQueue\Domain\Task\Profile;
6
use JobQueue\Domain\Task\Task;
7
use JobQueue\Infrastructure\ServiceContainer;
8
use Psr\Http\Message\ResponseInterface;
9
use Psr\Http\Message\ServerRequestInterface;
10
use Psr\Http\Server\RequestHandlerInterface;
11
use Zend\Diactoros\Response\JsonResponse;
12
13
class AddTask implements RequestHandlerInterface
14
{
15
    /**
16
     *
17
     * @param ServerRequestInterface $request
18
     * @return ResponseInterface
19
     */
20
    public function handle(ServerRequestInterface $request): ResponseInterface
21
    {
22
        $body = $request->getParsedBody();
23
24
        if (!isset($body['profile']) or !$profile = new Profile($body['profile'])) {
25
            throw new \RuntimeException('Missing profile');
26
        }
27
28
        if (!isset($body['job']) or !$job = new $body['job']) {
29
            throw new \RuntimeException('Missing job');
30
        }
31
32
        $parameters = isset($body['parameters']) ? $body['parameters'] : [];
33
        if (!is_array($parameters)) {
34
            throw new \RuntimeException('Malformed parameters');
35
        }
36
37
        $tags = isset($body['tags']) ? $body['tags'] : [];
38
        if (!is_array($tags)) {
39
            throw new \RuntimeException('Malformed tags');
40
        }
41
42
        $task = new Task($profile, $job, $parameters, $tags);
43
44
        ServiceContainer::getInstance()
45
            ->queue
46
            ->add($task);
47
48
        return new JsonResponse($task);
49
    }
50
}
51