Completed
Pull Request — master (#180)
by Gorka
05:29
created

EditOrganizationHandler::__invoke()   B

Complexity

Conditions 4
Paths 3

Size

Total Lines 23
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
c 0
b 0
f 0
rs 8.7972
cc 4
eloc 14
nc 3
nop 1
1
<?php
2
3
/*
4
 * This file is part of the Kreta package.
5
 *
6
 * (c) Beñat Espiña <[email protected]>
7
 * (c) Gorka Laucirica <[email protected]>
8
 *
9
 * For the full copyright and license information, please view the LICENSE
10
 * file that was distributed with this source code.
11
 */
12
13
declare(strict_types=1);
14
15
namespace Kreta\TaskManager\Application\Command\Organization;
16
17
use Kreta\SharedKernel\Domain\Model\Identity\Slug;
18
use Kreta\TaskManager\Domain\Model\Organization\Organization;
19
use Kreta\TaskManager\Domain\Model\Organization\OrganizationDoesNotExistException;
20
use Kreta\TaskManager\Domain\Model\Organization\OrganizationId;
21
use Kreta\TaskManager\Domain\Model\Organization\OrganizationName;
22
use Kreta\TaskManager\Domain\Model\Organization\OrganizationRepository;
23
use Kreta\TaskManager\Domain\Model\Organization\UnauthorizedEditOrganizationException;
24
use Kreta\TaskManager\Domain\Model\User\UserId;
25
26
class EditOrganizationHandler
27
{
28
    private $repository;
29
30
    public function __construct(OrganizationRepository $repository)
31
    {
32
        $this->repository = $repository;
33
    }
34
35
    public function __invoke(EditOrganizationCommand $command)
36
    {
37
        $organization = $this->repository->organizationOfId(
38
            OrganizationId::generate(
39
                $command->id()
40
            )
41
        );
42
        if (!$organization instanceof Organization) {
43
            throw new OrganizationDoesNotExistException();
44
        }
45
        if (!$organization->isOwner(UserId::generate($command->userId()))) {
46
            throw new UnauthorizedEditOrganizationException();
47
        }
48
        $organization->edit(
49
            new OrganizationName(
50
                $command->name()
51
            ),
52
            new Slug(
53
                null === $command->slug() ? $command->name() : $command->slug()
54
            )
55
        );
56
        $this->repository->persist($organization);
57
    }
58
}
59