Beispiel #1
0
        public async Task <IActionResult> GetOneShowtimeAsync(
            [FromRoute, SwaggerParameter(Description = "the ID to find showtime by", Required = true)] Guid showtimeId,
            [FromRoute, SwaggerParameter(Description = "the movie ID to find showtime by", Required = true)] Guid movieId,
            [FromQuery, SwaggerParameter(Description = "fields requested for data shaping", Required = false)] string fields,
            [FromHeader(Name = "Accept"), SwaggerParameter(Description = "media type to request betwen json or json+hateoas")] string mediaType)
        {
            if (!await _showtimeRepository.MovieExists(movieId))
            {
                return(NotFound());
            }

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

            var foundShowtime = await _showtimeRepository.GetShowtimeAsync(showtimeId, movieId);

            var showtime = Mapper.Map <ShowtimeDto>(foundShowtime);

            if (foundShowtime == null)
            {
                return(NotFound());
            }

            if (mediaType == "application/vnd.biob.json+hateoas")
            {
                var links = CreateLinksForShowtimes(showtimeId, fields);

                var linkedShowtime = showtime.ShapeData(fields) as IDictionary <string, object>;
                linkedShowtime.Add("links", links);
                return(Ok(linkedShowtime));
            }
            else
            {
                return(Ok(showtime.ShapeData(fields)));
            }
        }