private string CreateBanknotesResourceUri(CurrenciesResourceParameters resourceParameters, ResourceUriType type) { switch (type) { case ResourceUriType.PreviousPage: return(Url.Link("GetBanknotes", new { type = resourceParameters.Type, country = resourceParameters.Country, search = resourceParameters.Search, orderBy = resourceParameters.OrderBy, fields = resourceParameters.Fields, page = resourceParameters.Page - 1, pageSize = resourceParameters.PageSize })); case ResourceUriType.NextPage: return(Url.Link("GetBanknotes", new { type = resourceParameters.Type, country = resourceParameters.Country, search = resourceParameters.Search, orderBy = resourceParameters.OrderBy, fields = resourceParameters.Fields, page = resourceParameters.Page + 1, pageSize = resourceParameters.PageSize })); default: return(Url.Link("GetBanknotes", new { type = resourceParameters.Type, country = resourceParameters.Country, search = resourceParameters.Search, orderBy = resourceParameters.OrderBy, fields = resourceParameters.Fields, page = resourceParameters.Page, pageSize = resourceParameters.PageSize })); } }
public BanknotesControllerTests() { _mockBanknoteService = new Mock <IBanknoteService>(); _mockCountryService = new Mock <ICountryService>(); _mockCollectorValueService = new Mock <ICollectorValueService>(); _mockBanknoteService.Setup(b => b.Save()).ReturnsAsync(true); _mockCountryService.Setup(c => c.CountryExists(It.IsAny <Guid>())).ReturnsAsync(true); _mockCollectorValueService .Setup(c => c.FindCollectorValueByValues(It.IsAny <CollectorValue>())) .ReturnsAsync(new CollectorValue()); _controller = new BanknotesController(_mockBanknoteService.Object, _mockCountryService.Object, _mockCollectorValueService.Object, _mapper); SetupTestController(_controller); _builder = new BanknoteTestBuilder(); resourceParameters = new CurrenciesResourceParameters(); resourceParameters.Fields = "Id, Type"; }
public async Task <PagedList <Coin> > FindCoins(CurrenciesResourceParameters resourceParameters) { var coins = await _unitOfWork.Coins.GetAll(); if (!string.IsNullOrEmpty(resourceParameters.Type) || !string.IsNullOrEmpty(resourceParameters.Country)) { coins = await _unitOfWork.Coins.GetAll(new CoinByType(resourceParameters.Type) || new CoinByCountry(resourceParameters.Country)); } if (!string.IsNullOrEmpty(resourceParameters.Search)) { coins = await _unitOfWork.Coins .GetAll(new CoinByType(resourceParameters.Type) || new CoinByCountry(resourceParameters.Country) || new CoinBySearch(resourceParameters.Search)); } coins = coins.OrderBy(resourceParameters.OrderBy, PropertyMappingService.CurrencyPropertyMapping); return(PagedList <Coin> .Create(coins.ToList(), resourceParameters.Page, resourceParameters.PageSize)); }
public async Task <PagedList <Banknote> > FindBanknotes(CurrenciesResourceParameters resourceParameters) { var banknotes = await _unitOfWork.Banknotes.GetAll(); if (!string.IsNullOrEmpty(resourceParameters.Type) || !string.IsNullOrEmpty(resourceParameters.Country)) { banknotes = await _unitOfWork.Banknotes .GetAll(new BanknoteByType(resourceParameters.Type) || new BanknoteByCountry(resourceParameters.Country)); } if (!string.IsNullOrEmpty(resourceParameters.Search)) { banknotes = await _unitOfWork.Banknotes .GetAll(new BanknoteByType(resourceParameters.Type) || new BanknoteByCountry(resourceParameters.Country) || new BanknoteBySearch(resourceParameters.Search)); } banknotes = banknotes.OrderBy(resourceParameters.OrderBy, PropertyMappingService.CurrencyPropertyMapping); return(PagedList <Banknote> .Create(banknotes.ToList(), resourceParameters.Page, resourceParameters.PageSize)); }
private IEnumerable <LinkDto> CreateBanknotesLinks (CurrenciesResourceParameters resourceParameters, bool hasNext, bool hasPrevious) { var links = new List <LinkDto> { new LinkDto(CreateBanknotesResourceUri(resourceParameters, ResourceUriType.Current), "self", "GET") }; if (hasNext) { links.Add(new LinkDto(CreateBanknotesResourceUri(resourceParameters, ResourceUriType.NextPage), "nextPage", "GET")); } if (hasPrevious) { links.Add(new LinkDto(CreateBanknotesResourceUri(resourceParameters, ResourceUriType.PreviousPage), "previousPage", "GET")); } return(links); }
public async Task <IActionResult> GetBanknotes(CurrenciesResourceParameters resourceParameters, [FromHeader(Name = "Accept")] string mediaType) { if (!PropertyMappingService.ValidMappingExistsFor <Banknote>(resourceParameters.OrderBy)) { return(BadRequest()); } if (!TypeHelper.TypeHasProperties <BanknoteDto>(resourceParameters.Fields)) { return(BadRequest()); } var retrievedBanknotes = await _banknoteService.FindBanknotes(resourceParameters); var banknotes = _mapper.Map <IEnumerable <BanknoteDto> >(retrievedBanknotes); var shapedBanknotes = banknotes.ShapeData(resourceParameters.Fields); if (mediaType == "application/json+hateoas") { if (!string.IsNullOrEmpty(resourceParameters.Fields) && !resourceParameters.Fields.ToLowerInvariant().Contains("id")) { return(BadRequest("Field parameter 'id' is required")); } var paginationMetadata = new { totalCount = retrievedBanknotes.TotalCount, pageSize = retrievedBanknotes.PageSize, currentPage = retrievedBanknotes.CurrentPage, totalPages = retrievedBanknotes.TotalPages }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); var links = CreateBanknotesLinks(resourceParameters, retrievedBanknotes.HasNext, retrievedBanknotes.HasPrevious); var linkedBanknotes = shapedBanknotes.Select(banknote => { var banknoteAsDictionary = banknote as IDictionary <string, object>; var banknoteLinks = CreateBanknoteLinks((Guid)banknoteAsDictionary["Id"], resourceParameters.Fields); banknoteAsDictionary.Add("links", banknoteLinks); return(banknoteAsDictionary); }); var linkedCollectionResource = new LinkedCollectionResource { Value = linkedBanknotes, Links = links }; return(Ok(linkedCollectionResource)); } else { var previousPageLink = retrievedBanknotes.HasPrevious ? CreateBanknotesResourceUri(resourceParameters, ResourceUriType.PreviousPage) : null; var nextPageLink = retrievedBanknotes.HasNext ? CreateBanknotesResourceUri(resourceParameters, ResourceUriType.NextPage) : null; var paginationMetadata = new { totalCount = retrievedBanknotes.TotalCount, pageSize = retrievedBanknotes.PageSize, currentPage = retrievedBanknotes.CurrentPage, totalPages = retrievedBanknotes.TotalPages, previousPageLink, nextPageLink, }; Response.Headers.Add("X-Pagination", JsonConvert.SerializeObject(paginationMetadata)); return(Ok(shapedBanknotes)); } }
public BanknoteServiceTests() { _banknoteService = new BanknoteService(_unitOfWork); resourceParameters = new CurrenciesResourceParameters(); }
public CoinServiceTests() { _coinService = new CoinService(_unitOfWork); resourceParameters = new CurrenciesResourceParameters(); }