Exemplo n.º 1
0
        public async Task <object> GetAddresses(AddressesQueryParams queryParams, Pagination pagination)
        {
            List <FilterObject> filterObjects = formatAndAddToFilter(queryParams);

            string connString = llpgConnString;

            if (queryParams.Gazetteer == "National")
            {
                connString = nlpgOnlyConnString;
            }
            else if (queryParams.Gazetteer == "Both")
            {
                connString = nlpgBothConnString;
            }

            pagination = await callDatabaseAsyncPagination(filterObjects, pagination, connString);

            DataTable dataTable = await callDatabaseAsync(filterObjects, pagination, connString);

            var resultset = new { resultset = pagination };
            IEnumerable <IAddressTypes> result;

            if (queryParams.Format == "Detailed")
            {
                result = _detailsMapper.MapAddressDetailsGIS(dataTable);
            }
            else
            {
                result = _detailsMapper.MapAddressDetailsSimple(dataTable);
            }

            return(new { Addresses = result, metadata = resultset });
        }
Exemplo n.º 2
0
        public void returns_processed_filter_objects_from_query_params()
        {
            //--Arrange--

            //Input Data
            IFilterObjectBuilder fob         = new FilterObjectBuilder();
            AddressesQueryParams queryParams = new AddressesQueryParams();

            queryParams.AddressStatus     = "Approved Preferred";
            queryParams.Format            = "Simple";
            queryParams.Postcode          = "E8 1HH";
            queryParams.PropertyClass     = "Residential";
            queryParams.PropertyClassCode = "RD07";
            queryParams.UPRN = "123456789";
            queryParams.USRN = "987654321";

            Dictionary <string, string> paramColumnNameMappings = new Dictionary <string, string>();

            paramColumnNameMappings.Add("UPRN", "UPRN");
            paramColumnNameMappings.Add("POSTCODE", "POSTCODE_NOSPACE");
            paramColumnNameMappings.Add("USRN", "USRN");

            paramColumnNameMappings.Add("PROPERTYCLASSCODE", "BLPU_CLASS");
            paramColumnNameMappings.Add("PROPERTYCLASSPRIMARY", "USAGE_PRIMARY");
            paramColumnNameMappings.Add("ADDRESSSTATUS", "LPI_LOGICAL_STATUS");

            //Result Data to compare to
            List <FilterObject> expectedResults = new List <FilterObject>();

            expectedResults.Add(new FilterObject {
                Name = "POSTCODE", ColumnName = "POSTCODE_NOSPACE", isWildCard = true, Value = "E8 1HH"
            });
            expectedResults.Add(new FilterObject {
                Name = "UPRN", ColumnName = "UPRN", isWildCard = false, Value = "123456789"
            });
            expectedResults.Add(new FilterObject {
                Name = "USRN", ColumnName = "USRN", isWildCard = false, Value = "987654321"
            });

            expectedResults.Add(new FilterObject {
                Name = "PROPERTYCLASSCODE", ColumnName = "BLPU_CLASS", isWildCard = true, Value = "RD07"
            });
            expectedResults.Add(new FilterObject {
                Name = "PROPERTYCLASSPRIMARY", ColumnName = "USAGE_PRIMARY", isWildCard = false, Value = "Residential"
            });
            expectedResults.Add(new FilterObject {
                Name = "ADDRESSSTATUS", ColumnName = "LPI_LOGICAL_STATUS", isWildCard = false, Value = "Approved Preferred"
            });

            expectedResults = expectedResults.OrderBy(o => o.Name).ToList();

            //--Act--
            var results = fob.ProcessQueryParamsToFilterObjects(queryParams, paramColumnNameMappings);

            results = results.OrderBy(o => o.Name).ToList();

            //--Assert--
            Assert.Equal(expectedResults, results);
        }
Exemplo n.º 3
0
        private List <FilterObject> formatAndAddToFilter(AddressesQueryParams queryParams)
        {
            queryParams = _formatter.FormatAddressesQueryParams(queryParams);

            List <FilterObject> filterObjects = _fob.ProcessQueryParamsToFilterObjects(queryParams, _queryBuilder.GetColumnMappings());

            return(filterObjects);
        }
Exemplo n.º 4
0
        public AddressesQueryParams FormatAddressesQueryParams(AddressesQueryParams queryParams)
        {
            queryParams.Postcode = String.IsNullOrWhiteSpace(queryParams.Postcode) ? null : FormatPostcode(queryParams.Postcode);
            queryParams.UPRN     = String.IsNullOrWhiteSpace(queryParams.UPRN) ? null : FormatUPRN(queryParams.UPRN);
            queryParams.USRN     = String.IsNullOrWhiteSpace(queryParams.USRN) ? null : FormatUSRN(queryParams.USRN);

            queryParams.PropertyClassCode = String.IsNullOrWhiteSpace(queryParams.PropertyClassCode) ? null : FormatUsageClassCode(queryParams.PropertyClassCode);
            queryParams.PropertyClass     = String.IsNullOrWhiteSpace(queryParams.PropertyClass) ? null : FormatUsageClassPrimary(queryParams.PropertyClass);
            queryParams.AddressStatus     = String.IsNullOrWhiteSpace(queryParams.AddressStatus) ? null : FormatAddressStatus(queryParams.AddressStatus);

            return(queryParams);
        }
Exemplo n.º 5
0
        public async Task<JsonResult> GetAddresses([FromQuery]string Postcode = null,
            [FromQuery]string USRN = null,
            [FromQuery]string UPRN = null,
            [FromQuery]GlobalConstants.PropertyClassPrimary? PropertyClass = null,
            [FromQuery]string PropertyClassCode = null,
            [FromQuery]GlobalConstants.AddressStatus AddressStatus = GlobalConstants.AddressStatus.ApprovedPreferred,
            [FromQuery]GlobalConstants.Format Format = GlobalConstants.Format.Simple,
            [FromQuery]GlobalConstants.Gazetteer Gazetteer = GlobalConstants.Gazetteer.Local,
            [FromQuery]int? Limit = GlobalConstants.LIMIT,
            [FromQuery]int? Offset = GlobalConstants.OFFSET)
        {
            try
            {
                AddressesQueryParams queryParams = new AddressesQueryParams();
                
                queryParams.Postcode = WebUtility.UrlDecode(Postcode);
                queryParams.UPRN = WebUtility.UrlDecode(UPRN);
                queryParams.USRN = WebUtility.UrlDecode(USRN);
                queryParams.PropertyClassCode = WebUtility.UrlDecode(PropertyClassCode);
                queryParams.PropertyClass = WebUtility.UrlDecode(PropertyClass.ToString());
                queryParams.AddressStatus = WebUtility.UrlDecode(AddressStatus.ToString());
                queryParams.Gazetteer = WebUtility.UrlDecode(Gazetteer.ToString());
                queryParams.Format = WebUtility.UrlDecode(Format.ToString());

                ValidationResult validatorFilterErrors = _validator.ValidateAddressesQueryParams(queryParams);

                if (!validatorFilterErrors.ErrorOccurred)
                {
                    Pagination pagination = new Pagination();
                    pagination.limit = Limit ?? default(int);
                    pagination.offset = Offset ?? default(int);

                    var result = await _addressesActions.GetAddresses(
                        queryParams,
                        pagination);

                    var json = Json(new { result, ErrorCode = "0", ErrorMessage = "" });
                    json.StatusCode = 200;
                    json.ContentType = "application/json";

                    return json;
                }
                else
                {
                    var errors = validatorFilterErrors.ErrorMessages;

                    var json = Json(errors);
                    json.StatusCode = 400;
                    json.ContentType = "application/json";
                    return json;
                }
            }
            catch (Exception ex)
            {
                var errors = new List<ApiErrorMessage>
                {
                    new ApiErrorMessage
                    {
                        developerMessage = ex.Message,
                        userMessage = "We had some problems processing your request"
                    }
                };
                _logger.LogError(ex.Message);
                var json = Json(errors);
                json.StatusCode = 500;
                json.ContentType = "application/json";
                return json;
            }
        }
Exemplo n.º 6
0
        //List of errors returned make object wrapper with boolean & list of errors
        public ValidationResult ValidateAddressesQueryParams(AddressesQueryParams filtersToValidate)
        {
            List <ApiErrorMessage> myErrors = new List <ApiErrorMessage>();

            bool hasError = false;

            //Postcode
            if (!string.IsNullOrWhiteSpace(filtersToValidate.Postcode))
            {
                var error = ValidatePostcode(filtersToValidate.Postcode);
                if (error != null)
                {
                    myErrors.Add(error);
                    hasError = true;
                }
            }

            //UPRN
            if (!string.IsNullOrWhiteSpace(filtersToValidate.UPRN))
            {
                var error = ValidateUPRN(filtersToValidate.UPRN);
                if (error != null)
                {
                    myErrors.Add(error);
                    hasError = true;
                }
            }

            //USRN
            if (!string.IsNullOrWhiteSpace(filtersToValidate.USRN))
            {
                var error = ValidateUSRN(filtersToValidate.USRN);
                if (error != null)
                {
                    myErrors.Add(error);
                    hasError = true;
                }
            }

            //Property Class Code
            if (!string.IsNullOrWhiteSpace(filtersToValidate.PropertyClassCode))
            {
                var error = UsageClassCodeChecker(filtersToValidate.PropertyClassCode);
                if (error != null)
                {
                    myErrors.Add(error);
                    hasError = true;
                }
            }

            //Property Class Primary
            if (!string.IsNullOrWhiteSpace(filtersToValidate.PropertyClass))
            {
                var error = UsageClassPrimaryChecker(filtersToValidate.PropertyClass);
                if (error != null)
                {
                    myErrors.Add(error);
                    hasError = true;
                }
            }

            //Address Status
            if (!string.IsNullOrWhiteSpace(filtersToValidate.AddressStatus))
            {
                var error = AddressStatusChecker(filtersToValidate.AddressStatus);
                if (error != null)
                {
                    myErrors.Add(error);
                    hasError = true;
                }
            }

            //Format
            if (!string.IsNullOrWhiteSpace(filtersToValidate.Format))
            {
                //?#? To Implement
            }

            //Gazetteer
            if (!string.IsNullOrWhiteSpace(filtersToValidate.Gazetteer))
            {
                //?#? To Implement
            }

            ValidationResult validationObject = new ValidationResult();

            validationObject.ErrorOccurred = hasError;
            validationObject.ErrorMessages = myErrors;

            return(validationObject);
        }