for testing and deploying your application
for finding and fixing issues
for empowering human code reviews
<?php
declare( strict_types = 1 );
namespace WMDE\Fundraising\AddressChange\UseCases\ChangeAddress;
use WMDE\Fundraising\AddressChange\Domain\AddressChangeRepository;
use WMDE\Fundraising\AddressChange\Domain\Model\Address;
use WMDE\Fundraising\AddressChange\Domain\Model\AddressChange;
class ChangeAddressUseCase {
private $addressChangeRepository;
public function __construct( AddressChangeRepository $addressChangeRepository ) {
$this->addressChangeRepository = $addressChangeRepository;
}
public function changeAddress( ChangeAddressRequest $request ): ChangeAddressResponse {
try {
$addressChange = $this->buildAddressChange( $request );
catch ( ChangeAddressValidationException $e ) {
return ChangeAddressResponse::newErrorResponse( [ $e->getMessage() ] );
$this->addressChangeRepository->storeAddressChange( $addressChange );
return ChangeAddressResponse::newSuccessResponse();
private function buildAddressChange( ChangeAddressRequest $request ): AddressChange {
if ( $request->isPersonal() ) {
return AddressChange::createNewPersonAddressChange(
null,
Address::newPersonalAddress(
$request->getSalutation(),
$request->getTitle(),
$request->getFirstName(),
$request->getLastName(),
$request->getAddress(),
$request->getPostcode(),
$request->getCity(),
$request->getCountry()
)
);
} elseif ( $request->isCompany() ) {
AddressChange::createNewCompanyAddressChange(
Address::newCompanyAddress(
$request->getCompany(),
throw new ChangeAddressValidationException( 'Address Type' );