Completed
Pull Request — master (#1)
by Tim
79:06 queued 13:58
created

ChangeAddressUseCase::__construct()   A

Complexity

Conditions 1
Paths 1

Size

Total Lines 2
Code Lines 1

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 1
eloc 1
nc 1
nop 1
dl 0
loc 2
rs 10
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
10
class ChangeAddressUseCase {
11
12
	private $addressChangeRepository;
13
14
	public function __construct( AddressChangeRepository $addressChangeRepository ) {
15
		$this->addressChangeRepository = $addressChangeRepository;
16
	}
17
18
	public function changeAddress( ChangeAddressRequest $request ): ChangeAddressResponse {
19
		$addressChange = $this->addressChangeRepository->getAddressChangeByUuid( $request->getIdentifier() );
20
		if ( $addressChange === null ) {
21
			return ChangeAddressResponse::newErrorResponse( ['Unknown address.'] );
22
		}
23
		try {
24
			$addressChange->performAddressChange( $this->buildAddress( $request ) );
25
		}
26
		catch ( ChangeAddressValidationException $e ) {
27
			return ChangeAddressResponse::newErrorResponse( [ $e->getMessage() ] );
28
		}
29
		$this->addressChangeRepository->storeAddressChange( $addressChange );
30
		return ChangeAddressResponse::newSuccessResponse();
31
	}
32
33
	private function buildAddress( ChangeAddressRequest $request ): Address {
34
		if ( $request->isPersonal() ) {
35
			return Address::newPersonalAddress(
36
				$request->getSalutation(),
37
				$request->getTitle(),
38
				$request->getFirstName(),
39
				$request->getLastName(),
40
				$request->getAddress(),
41
				$request->getPostcode(),
42
				$request->getCity(),
43
				$request->getCountry()
44
			);
45
		} elseif ( $request->isCompany() ) {
46
			return Address::newCompanyAddress(
47
				$request->getCompany(),
48
				$request->getAddress(),
49
				$request->getPostcode(),
50
				$request->getCity(),
51
				$request->getCountry()
52
			);
53
		}
54
		throw new ChangeAddressValidationException( 'Address Type' );
55
	}
56
57
}