RemoveOwnerToOrganizationHandler::__invoke()   A
last analyzed

Complexity

Conditions 3
Paths 3

Size

Total Lines 23
Code Lines 12

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
dl 0
loc 23
rs 9.0856
c 0
b 0
f 0
cc 3
eloc 12
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\TaskManager\Domain\Model\Organization\Organization;
18
use Kreta\TaskManager\Domain\Model\Organization\OrganizationDoesNotExistException;
19
use Kreta\TaskManager\Domain\Model\Organization\OrganizationId;
20
use Kreta\TaskManager\Domain\Model\Organization\OrganizationRepository;
21
use Kreta\TaskManager\Domain\Model\Organization\UnauthorizedOrganizationActionException;
22
use Kreta\TaskManager\Domain\Model\User\UserId;
23
24
class RemoveOwnerToOrganizationHandler
25
{
26
    private $repository;
27
28
    public function __construct(OrganizationRepository $repository)
29
    {
30
        $this->repository = $repository;
31
    }
32
33
    public function __invoke(RemoveOwnerToOrganizationCommand $command)
34
    {
35
        $organization = $this->repository->organizationOfId(
36
            OrganizationId::generate(
37
                $command->organizationId()
38
            )
39
        );
40
        if (!$organization instanceof Organization) {
41
            throw new OrganizationDoesNotExistException();
42
        }
43
44
        if (!$organization->isOwner(UserId::generate($command->removerId()))) {
45
            throw new UnauthorizedOrganizationActionException();
46
        }
47
48
        $organization->removeOwner(
49
            UserId::generate(
50
                $command->userId()
51
            )
52
        );
53
54
        $this->repository->persist($organization);
55
    }
56
}
57