Completed
Push — master ( 4de01f...a5870d )
by Tonina
63:16
created

UpdateAddressController   A

Complexity

Total Complexity 7

Size/Duplication

Total Lines 56
Duplicated Lines 0 %

Importance

Changes 0
Metric Value
eloc 33
dl 0
loc 56
rs 10
c 0
b 0
f 0
wmc 7

5 Methods

Rating   Name   Duplication   Size   Complexity  
A addPersonNameParams() 0 6 1
A addPostalParams() 0 5 1
A newAddressChangeRequestFromParams() 0 16 2
A addCompanyNameParams() 0 6 1
A updateAddress() 0 13 2
1
<?php
2
3
declare( strict_types = 1 );
4
5
namespace WMDE\Fundraising\Frontend\App\Controllers;
6
7
use Symfony\Component\HttpFoundation\ParameterBag;
8
use Symfony\Component\HttpFoundation\Request;
9
use Symfony\Component\HttpFoundation\Response;
10
use WMDE\Fundraising\AddressChange\UseCases\ChangeAddress\ChangeAddressRequest;
11
use WMDE\Fundraising\Frontend\Factories\FunFunFactory;
12
13
/**
14
 * @license GNU GPL v2+
15
 */
16
class UpdateAddressController {
17
18
	public function updateAddress( string $addressToken, Request $request, FunFunFactory $ffFactory ): Response {
19
20
		$addressChangeRequest = $this->newAddressChangeRequestFromParams( $addressToken, $request->request );
21
22
		$useCase = $ffFactory->newChangeAddressUseCase();
23
		$response = $useCase->changeAddress( $addressChangeRequest );
24
25
		if ( !$response->isSuccess() ) {
26
			$ffFactory->getLogger()->error( 'Address change failed', [ 'domain_errors' => $response->getErrors() ] );
27
			return new Response( $ffFactory->newErrorPageHtmlPresenter()->present( implode( "\n", $response->getErrors() ) ) );
28
		}
29
30
		return new Response( $ffFactory->getLayoutTemplate( 'AddressUpdateSuccess.html.twig' )->render( $request->request->all() ) );
31
	}
32
33
	private function newAddressChangeRequestFromParams( string $addressToken, ParameterBag $params ): ChangeAddressRequest {
34
		$request = new ChangeAddressRequest();
35
		$request->setIdentifier( $addressToken );
36
37
		if ( $params->get( 'addressType', '' ) === 'person' ) {
38
			$request->setAddressType( 'person' );
39
			$this->addPersonNameParams( $request, $params );
40
		} else {
41
			$request->setAddressType( 'company' );
42
			$this->addCompanyNameParams( $request, $params );
43
		}
44
45
		$this->addPostalParams( $request, $params );
46
47
		$request->assertNoNullFields()->freeze();
48
		return $request;
49
	}
50
51
	private function addPersonNameParams( ChangeAddressRequest $request, ParameterBag $params ): void {
52
		$request->setFirstName( $params->get( 'firstName', '' ) )
53
			->setLastName( $params->get( 'lastName', '' ) )
54
			->setSalutation( $params->get( 'salutation', '' ) )
55
			->setTitle( $params->get( 'title', '' ) )
56
			->setCompany( '' );
57
	}
58
59
	private function addCompanyNameParams( ChangeAddressRequest $request, ParameterBag $params ): void {
60
		$request->setFirstName( '' )
61
			->setLastName( '' )
62
			->setSalutation( '' )
63
			->setTitle( '' )
64
			->setCompany( $params->get( 'company', '' ) );
65
	}
66
67
	private function addPostalParams( ChangeAddressRequest $request, ParameterBag $params ): void {
68
		$request->setAddress( $params->get( 'address', '' ) )
69
			->setPostcode( $params->get( 'postcode', '' ) )
70
			->setCity( $params->get( 'city', '' ) )
71
			->setCountry( $params->get( 'country', 'DE' ) );
72
	}
73
74
}