Code Duplication    Length = 79-85 lines in 2 locations

src/Event/ReadModel/Permission/Projector.php 1 location

@@ 17-95 (lines=79) @@
14
use CultuurNet\UDB3\Offer\ReadModel\Permission\PermissionRepositoryInterface;
15
use ValueObjects\StringLiteral\StringLiteral;
16
17
class Projector implements EventListenerInterface
18
{
19
    use DelegateEventHandlingToSpecificMethodTrait;
20
21
    /**
22
     * @var CreatedByToUserIdResolverInterface
23
     */
24
    private $userIdResolver;
25
26
    /**
27
     * @var PermissionRepositoryInterface
28
     */
29
    private $permissionRepository;
30
31
    public function __construct(
32
        PermissionRepositoryInterface $permissionRepository,
33
        CreatedByToUserIdResolverInterface $createdByToUserIdResolver
34
    ) {
35
        $this->userIdResolver = $createdByToUserIdResolver;
36
        $this->permissionRepository = $permissionRepository;
37
    }
38
39
    protected function applyEventImportedFromUDB2(
40
        EventImportedFromUDB2 $eventImportedFromUDB2
41
    ) {
42
        $cdbEvent = EventItemFactory::createEventFromCdbXml(
43
            $eventImportedFromUDB2->getCdbXmlNamespaceUri(),
44
            $eventImportedFromUDB2->getCdbXml()
45
        );
46
47
        $createdByIdentifier = $cdbEvent->getCreatedBy();
48
49
        if ($createdByIdentifier) {
50
            $ownerId = $this->userIdResolver->resolveCreatedByToUserId(
51
                new StringLiteral($createdByIdentifier)
52
            );
53
54
            if (!$ownerId) {
55
                return;
56
            }
57
58
            $this->permissionRepository->markOfferEditableByUser(
59
                new StringLiteral($eventImportedFromUDB2->getEventId()),
60
                $ownerId
61
            );
62
        }
63
    }
64
65
    protected function applyEventCreated(
66
        EventCreated $eventCreated,
67
        DomainMessage $domainMessage
68
    ) {
69
        $this->makeOfferEditableByUser($eventCreated->getEventId(), $domainMessage);
70
    }
71
72
    protected function applyEventCopied(
73
        EventCopied $eventCopied,
74
        DomainMessage $domainMessage
75
    ) {
76
        $this->makeOfferEditableByUser($eventCopied->getItemId(), $domainMessage);
77
    }
78
79
    /**
80
     * @param string $offerId
81
     * @param DomainMessage $domainMessage
82
     */
83
    private function makeOfferEditableByUser(
84
        $offerId,
85
        DomainMessage $domainMessage
86
    ) {
87
        $metadata = $domainMessage->getMetadata()->serialize();
88
        $ownerId = new StringLiteral($metadata['user_id']);
89
90
        $this->permissionRepository->markOfferEditableByUser(
91
            new StringLiteral($offerId),
92
            $ownerId
93
        );
94
    }
95
}
96

src/Organizer/ReadModel/Permission/Projector.php 1 location

@@ 15-99 (lines=85) @@
12
use CultuurNet\UDB3\Organizer\Events\OrganizerCreatedWithUniqueWebsite;
13
use ValueObjects\StringLiteral\StringLiteral;
14
15
class Projector implements EventListenerInterface
16
{
17
    use DelegateEventHandlingToSpecificMethodTrait;
18
19
    /**
20
     * @var CreatedByToUserIdResolverInterface
21
     */
22
    private $userIdResolver;
23
24
    /**
25
     * @var PermissionRepositoryInterface
26
     */
27
    private $permissionRepository;
28
29
    public function __construct(
30
        PermissionRepositoryInterface $permissionRepository,
31
        CreatedByToUserIdResolverInterface $createdByToUserIdResolver
32
    ) {
33
        $this->userIdResolver = $createdByToUserIdResolver;
34
        $this->permissionRepository = $permissionRepository;
35
    }
36
37
    protected function applyOrganizerImportedFromUDB2(
38
        OrganizerImportedFromUDB2 $organizerImportedFromUDB2
39
    ) {
40
        $cdbEvent = ActorItemFactory::createActorFromCdbXml(
41
            $organizerImportedFromUDB2->getCdbXmlNamespaceUri(),
42
            $organizerImportedFromUDB2->getCdbXml()
43
        );
44
45
        $createdByIdentifier = $cdbEvent->getCreatedBy();
46
47
        if ($createdByIdentifier) {
48
            $ownerId = $this->userIdResolver->resolveCreatedByToUserId(
49
                new StringLiteral($createdByIdentifier)
50
            );
51
52
            if (!$ownerId) {
53
                return;
54
            }
55
56
            $this->permissionRepository->markOfferEditableByUser(
57
                new StringLiteral($organizerImportedFromUDB2->getEventId()),
58
                $ownerId
59
            );
60
        }
61
    }
62
63
    protected function applyOrganizerCreated(
64
        OrganizerCreated $organizerCreated,
65
        DomainMessage $domainMessage
66
    ) {
67
        $this->makeOrganizerEditableByUser(
68
            $organizerCreated->getOrganizerId(),
69
            $domainMessage
70
        );
71
    }
72
73
    protected function applyOrganizerCreatedWithUniqueWebsite(
74
        OrganizerCreatedWithUniqueWebsite $organizerCreatedWithUniqueWebsite,
75
        DomainMessage $domainMessage
76
    ) {
77
        $this->makeOrganizerEditableByUser(
78
            $organizerCreatedWithUniqueWebsite->getOrganizerId(),
79
            $domainMessage
80
        );
81
    }
82
83
    /**
84
     * @param string $organizerId
85
     * @param DomainMessage $domainMessage
86
     */
87
    private function makeOrganizerEditableByUser(
88
        string $organizerId,
89
        DomainMessage $domainMessage
90
    ) {
91
        $metadata = $domainMessage->getMetadata()->serialize();
92
        $ownerId = new StringLiteral($metadata['user_id']);
93
94
        $this->permissionRepository->markOfferEditableByUser(
95
            new StringLiteral($organizerId),
96
            $ownerId
97
        );
98
    }
99
}
100