예제 #1
0
        public IActionResult GetTanks(Guid terminalId, Guid dispenserId, Guid fuelTypeId,
                                      [FromQuery] TankResourceParameters tankResourceParameters)
        {
            if (!_propertyMappingService.ValidTankMappingExistsFor <TankDto, Entities.Tank>
                    (tankResourceParameters.OrderBy))
            {
                return(BadRequest());
            }

            tankResourceParameters.TermimalId  = terminalId;
            tankResourceParameters.DispenserId = dispenserId;
            tankResourceParameters.FuelTypeId  = fuelTypeId;

            var tanksFromRepo = _tankRepository.GetTanks(tankResourceParameters);

            var paginationMetadata = new
            {
                totalCount  = tanksFromRepo.TotalCount,
                pageSize    = tanksFromRepo.PageSize,
                currentPage = tanksFromRepo.CurrentPage,
                totalPages  = tanksFromRepo.TotalPages
            };

            Response.Headers.Add("X-Pagination",
                                 JsonSerializer.Serialize(paginationMetadata));

            var links = CreateLinksForTank(tankResourceParameters,
                                           tanksFromRepo.HasNext,
                                           tanksFromRepo.HasPrevious);

            var shapedTank = _mapper.Map <IEnumerable <TankDto> >(tanksFromRepo)
                             .ShapeData(tankResourceParameters.Fields);

            var shapedTankWithLinks = shapedTank.Select(tanks =>
            {
                var tankAsDictionary = tanks as IDictionary <string, object>;
                var tankLinks        = CreateLinksForTank(terminalId.ToString(), dispenserId.ToString(), fuelTypeId.ToString(), (string)tankAsDictionary["Id"], null);
                tankAsDictionary.Add("links", tankLinks);
                return(tankAsDictionary);
            });

            var linkedCollectionResource = new
            {
                value = shapedTankWithLinks,
                links
            };

            return(Ok(linkedCollectionResource));
        }