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

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