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 }); }
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); }
private List <FilterObject> formatAndAddToFilter(AddressesQueryParams queryParams) { queryParams = _formatter.FormatAddressesQueryParams(queryParams); List <FilterObject> filterObjects = _fob.ProcessQueryParamsToFilterObjects(queryParams, _queryBuilder.GetColumnMappings()); return(filterObjects); }
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); }
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; } }
//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); }