public SearchAddressResponse ExecuteAsync(SearchAddressRequest request)
        {
            var validation = _requestValidator.Validate(request);

            if (!validation.IsValid)
            {
                throw new BadRequestException(validation);
            }
            var searchParameters = MapRequestToSearchParameters(request);

            var(results, totalCount) = _addressGateway.SearchAddresses(searchParameters);

            if (results == null)
            {
                return(new SearchAddressResponse());
            }
            var useCaseResponse = new SearchAddressResponse
            {
                Addresses  = results.ToResponse(),
                TotalCount = totalCount,
                PageCount  = totalCount.CalculatePageCount(request.PageSize)
            };

            return(useCaseResponse);
        }
        public async Task <SearchAddressResponse> ExecuteAsync(SearchAddressRequest request)
        {
            var validation = _requestValidator.Validate(request);

            if (!validation.IsValid)
            {
                throw new BadRequestException(validation);
            }
            var searchParameters = MapRequestToSearchParameters(request);

            if (request.CrossRefCode != null && request.CrossRefValue != null)
            {
                searchParameters.CrossReferencedUprns =
                    _addressGateway.GetMatchingCrossReferenceUprns(request.CrossRefCode, request.CrossRefValue);
            }
            var(addressKeys, totalCount) = await _searchAddressesGateway.SearchAddresses(searchParameters);

            var format  = Enum.Parse <GlobalConstants.Format>(request.Format, true);
            var results = _addressGateway.GetAddresses(addressKeys, format);

            if (results == null)
            {
                return(new SearchAddressResponse());
            }
            var useCaseResponse = new SearchAddressResponse
            {
                Addresses  = results.ToResponse(),
                TotalCount = totalCount,
                PageCount  = totalCount.CalculatePageCount(request.PageSize)
            };

            return(useCaseResponse);
        }
        public SearchAddressResponse ExecuteAsync(GetAddressRequest request)
        {
            var validationResponse = _getAddressValidator.Validate(request);

            if (!validationResponse.IsValid)
            {
                throw new BadRequestException(validationResponse);
            }

            var response = _addressGateway.GetSingleAddress(request.addressID);

            if (response == null)
            {
                return(new SearchAddressResponse());
            }
            var useCaseResponse = new SearchAddressResponse
            {
                Addresses = new List <AddressResponse> {
                    response.ToResponse()
                }
            };

            return(useCaseResponse);
        }