Completed
Pull Request — master (#1936)
by
unknown
317:34 queued 252:33
created

BucketLoggingHandler   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 44
Duplicated Lines 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
eloc 20
c 1
b 0
f 0
dl 0
loc 44
rs 10
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A setConsentGiven() 0 2 1
A onMembershipCreated() 0 8 2
A getSubscribedEvents() 0 4 1
A onDonationCreated() 0 8 2
A __construct() 0 3 1
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\Infrastructure\EventHandling\DomainEventHandler;
6
7
use WMDE\Fundraising\DonationContext\Domain\Event\DonationCreatedEvent;
8
use WMDE\Fundraising\Frontend\BucketTesting\Logging\BucketLogger;
9
use WMDE\Fundraising\Frontend\BucketTesting\Logging\Events\DonationCreated;
10
use WMDE\Fundraising\Frontend\BucketTesting\Logging\Events\MembershipApplicationCreated;
11
use WMDE\Fundraising\Frontend\Infrastructure\EventHandling\EventDispatcher;
12
use WMDE\Fundraising\MembershipContext\Domain\Event\MembershipCreatedEvent;
13
14
/**
15
 * Log the visitors bucket IDs when they donate or apply for membership
16
 */
17
class BucketLoggingHandler {
18
19
	private BucketLogger $bucketLogger;
20
21
	/** @var callable */
22
	private $getSelectedBuckets;
23
24
	private bool $consentGiven = false;
25
26
	public function __construct( BucketLogger $bucketLogger, callable $getSelectedBuckets ) {
27
		$this->bucketLogger = $bucketLogger;
28
		$this->getSelectedBuckets = $getSelectedBuckets;
29
	}
30
31
	public function onDonationCreated( DonationCreatedEvent $event ): void {
32
		if ( !$this->consentGiven ) {
33
			return;
34
		}
35
36
		$this->bucketLogger->writeEvent(
37
			new DonationCreated( $event->getDonationId() ),
38
			...\call_user_func( $this->getSelectedBuckets )
39
		);
40
	}
41
42
	public function onMembershipCreated( MembershipCreatedEvent $event ): void {
43
		if ( !$this->consentGiven ) {
44
			return;
45
		}
46
47
		$this->bucketLogger->writeEvent(
48
			new MembershipApplicationCreated( $event->getMembershipId() ),
49
			...\call_user_func( $this->getSelectedBuckets )
50
		);
51
	}
52
53
	public function setConsentGiven( bool $consentGiven ): void {
54
		$this->consentGiven = $consentGiven;
55
	}
56
57
	public static function getSubscribedEvents() {
58
		return [
59
			DonationCreatedEvent::class => 'onDonationCreated',
60
			MembershipCreatedEvent::class => 'onMembershipCreated',
61
		];
62
	}
63
}
64