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

AddTask   A

Complexity

Total Complexity 9

Size/Duplication

Total Lines 36
Duplicated Lines 0 %

Test Coverage

Coverage 0%

Importance

Changes 0
Metric Value
wmc 9
dl 0
loc 36
rs 10
c 0
b 0
f 0
ccs 0
cts 17
cp 0

1 Method

Rating   Name   Duplication   Size   Complexity  
D handle() 0 29 9
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