Completed
Pull Request — master (#1)
by Tim
65:22
created

ChangeAddressUseCase::buildAddressChange()   A

Complexity

Conditions 3
Paths 3

Size

Total Lines 28
Code Lines 22

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 3
eloc 22
nc 3
nop 1
dl 0
loc 28
rs 9.568
c 0
b 0
f 0
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\AddressChange\UseCases\ChangeAddress;
6
7
use WMDE\Fundraising\AddressChange\Domain\AddressChangeRepository;
8
use WMDE\Fundraising\AddressChange\Domain\Model\Address;
9
use WMDE\Fundraising\AddressChange\Domain\Model\AddressChange;
10
11
class ChangeAddressUseCase {
12
13
	private $addressChangeRepository;
14
15
	public function __construct( AddressChangeRepository $addressChangeRepository ) {
16
		$this->addressChangeRepository = $addressChangeRepository;
17
	}
18
19
	public function changeAddress( ChangeAddressRequest $request ): ChangeAddressResponse {
20
		try {
21
			$addressChange = $this->buildAddressChange( $request );
22
		}
23
		catch ( ChangeAddressValidationException $e ) {
24
			return ChangeAddressResponse::newErrorResponse( [ $e->getMessage() ] );
25
		}
26
		$this->addressChangeRepository->storeAddressChange( $addressChange );
27
		return ChangeAddressResponse::newSuccessResponse();
28
	}
29
30
	private function buildAddressChange( ChangeAddressRequest $request ): AddressChange {
31
		if ( $request->isPersonal() ) {
32
			return AddressChange::createNewPersonAddressChange(
33
				null,
34
				Address::newPersonalAddress(
35
					$request->getSalutation(),
36
					$request->getTitle(),
37
					$request->getFirstName(),
38
					$request->getLastName(),
39
					$request->getAddress(),
40
					$request->getPostcode(),
41
					$request->getCity(),
42
					$request->getCountry()
43
				)
44
			);
45
		} elseif ( $request->isCompany() ) {
46
			AddressChange::createNewCompanyAddressChange(
47
				null,
48
				Address::newCompanyAddress(
49
					$request->getCompany(),
50
					$request->getAddress(),
51
					$request->getPostcode(),
52
					$request->getCity(),
53
					$request->getCountry()
54
				)
55
			);
56
		}
57
		throw new ChangeAddressValidationException( 'Address Type' );
58
	}
59
60
}