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();
 }
Example #8
0
 public CoinServiceTests()
 {
     _coinService       = new CoinService(_unitOfWork);
     resourceParameters = new CurrenciesResourceParameters();
 }