Beispiel #1
0
        public async Task <IActionResult> GetAllShowtimesAsync([FromRoute] Guid movieId, [FromQuery] RequestParameters requestParameters, [FromHeader(Name = "Accept")] string mediaType)
        {
            if (!await _showtimeRepository.MovieExists(movieId))
            {
                return(NotFound());
            }

            if (string.IsNullOrWhiteSpace(requestParameters.OrderBy))
            {
                //  TODO: change to order by when playing
                requestParameters.OrderBy = "Id";
            }

            if (!_propertyMappingService.ValidMappingExistsFor <ShowtimeDto, Showtime>(requestParameters.Fields))
            {
                return(BadRequest());
            }

            if (!_typeHelperService.TypeHasProperties <ShowtimeDto>(requestParameters.Fields))
            {
                return(BadRequest());
            }

            var showtimesPagedList = await _showtimeRepository.GetAllShowtimesAsync(movieId, requestParameters.OrderBy, requestParameters.PageNumber, requestParameters.PageSize);

            var showtimes = Mapper.Map <IEnumerable <ShowtimeDto> >(showtimesPagedList);

            if (mediaType == "application/vnd.biob.json+hateoas")
            {
                return(Ok(CreateHateoasResponse(showtimesPagedList, requestParameters)));
            }
            else
            {
                var previousPageLink   = showtimesPagedList.HasPrevious ? CreateUrlForResource(requestParameters, PageType.PreviousPage) : null;
                var nextPageLink       = showtimesPagedList.HasNext ? CreateUrlForResource(requestParameters, PageType.NextPage) : null;
                var paginationMetadata = new PaginationMetadata()
                {
                    TotalCount       = showtimesPagedList.TotalCount,
                    PageSize         = showtimesPagedList.PageSize,
                    CurrentPage      = showtimesPagedList.CurrentPage,
                    TotalPages       = showtimesPagedList.TotalPages,
                    PreviousPageLink = previousPageLink,
                    NextPageLink     = nextPageLink
                };

                Response.Headers.Add("X-Pagination", Newtonsoft.Json.JsonConvert.SerializeObject(paginationMetadata));

                if (requestParameters.IncludeMetadata)
                {
                    var showtimesWithMetadata = new EntityWithPaginationMetadataDto <ShowtimeDto>(paginationMetadata, showtimes);
                    return(Ok(showtimesWithMetadata));
                }

                return(Ok(showtimes));
            }
        }