public IHttpActionResult GetTradingPartners([FromUri] TradingPartnerResourceParameters parameters) { try { var pagedList = _tpReadRepository.ToPagedList(parameters, _propertyMappingService); var previousPageLink = pagedList.HasPrevious ? CreateResourceUri(parameters, ResourceUriType.PreviousPage) : null; var nextPageLink = pagedList.HasNext ? CreateResourceUri(parameters, ResourceUriType.NextPage) : null; _log.Information("Received Record {0}"); var tpDto = AutoMapper.Mapper.Map <IEnumerable <TradingPartnerDetailDto> >(pagedList); var response = Request.CreateResponse(HttpStatusCode.OK, tpDto); response.Headers.Add("X-Pagination-PageNumber", pagedList.CurrentPage.ToString()); response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(pagedList.MetaData(previousPageLink, nextPageLink))); return(ResponseMessage(response)); } catch (Exception ex) { //LOG //return StatusCode(HttpStatusCode.InternalServerError); return(InternalServerError(new Exception("An unexpected error occured! Please try again later!"))); } }
private string CreateResourceUri( TradingPartnerResourceParameters parameters, ResourceUriType type) { var _urlHelper = new UrlHelper(Request); int pageAdjustment = type.GetPageAdjustment(); return(Url.Link("GetTradingPartners", new { searchQuery = parameters.SearchQuery, name = parameters.Name, pageNumber = parameters.PageNumber + pageAdjustment, pageSize = parameters.PageSize, orderBy = parameters.OrderBy, description = parameters.Description, identifier = parameters.Identifier, propertyName = parameters.PropertyName, propertyValue = parameters.PropertyValue, qualifier = parameters.Qualifier })); }
public static PagedList <TradingPartner> ToPagedList(this IReadRepository <TradingPartner> repo, TradingPartnerResourceParameters parameters, IPropertyMappingService propertyMappingService) { parameters = parameters ?? new TradingPartnerResourceParameters(); if (!propertyMappingService.ValidMappingExistsFor <TradingPartnerDetailDto, TradingPartner>(parameters.OrderBy)) { throw new Exception("Invalid OrderBy!"); //return BadRequest("Invalid OrderBy!!!"); //TODO => throw exception and return Bad Request to client } var tp = repo.List() .ApplySort(parameters.OrderBy, propertyMappingService.GetPropertyMapping <TradingPartnerDetailDto, TradingPartner>()); if (!string.IsNullOrEmpty(parameters.Name)) { tp = tp.Where(t => t.Name.ToLower() == parameters.Name.ToLower()); } if (!string.IsNullOrEmpty(parameters.Description)) { tp = tp.Where(t => t.Description.ToLower() == parameters.Description.ToLower()); } if (!string.IsNullOrEmpty(parameters.Qualifier)) { tp = tp.Where(t => t.Identifiers.Any(i => i.Qualifier == parameters.Qualifier.ToLower())); } if (!string.IsNullOrEmpty(parameters.Identifier)) { tp = tp.Where(t => t.Identifiers.Any(i => i.Identifier == parameters.Identifier.ToLower())); } if (!string.IsNullOrEmpty(parameters.PropertyName)) { tp = tp.Where(t => t.Properties.Any(i => i.Name == parameters.PropertyName.ToLower())); } if (!string.IsNullOrEmpty(parameters.PropertyValue)) { tp = tp.Where(t => t.Properties.Any(i => i.Value == parameters.PropertyValue.ToLower())); } if (!string.IsNullOrEmpty(parameters.SearchQuery)) { var searchQuery = parameters.SearchQuery.ToLower(); tp = tp.Where(t => t.Name.ToLower().Contains(searchQuery) || t.Description.ToLower().Contains(searchQuery) || t.Identifiers.Any(i => i.Qualifier.Contains(searchQuery)) || t.Identifiers.Any(i => i.Identifier.Contains(searchQuery)) || t.Properties.Any(i => i.Name.Contains(searchQuery)) || t.Properties.Any(i => i.Value.Contains(searchQuery)) ); } return(PagedList <TradingPartner> .Create(tp, parameters.PageNumber, parameters.PageSize)); }