Beispiel #1
0
        public async Task <IActionResult> CreateShowtimeAsync(
            [FromRoute, SwaggerParameter(Description = "the movie ID to create showtime by", Required = true)] Guid movieId,
            [FromBody, SwaggerParameter(Description = "Showtimes to create", Required = true)] ShowtimeToCreateDto showtimeToCreate,
            [FromHeader(Name = "Accept"), SwaggerParameter(Description = "media type to request betwen json or json+hateoas")] string mediaType)
        {
            if (!await _showtimeRepository.MovieExists(movieId))
            {
                return(NotFound());
            }

            var showtimeToAdd = Mapper.Map <Showtime>(showtimeToCreate);

            showtimeToAdd.Id = Guid.NewGuid();

            _showtimeRepository.AddShowtime(movieId, showtimeToAdd);

            if (!await _showtimeRepository.SaveChangesAsync())
            {
                _logger.LogError("Saving changes to database while creating a showtime failed");
            }

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

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

                var linkedShowtime = showtime.ShapeData(null) as IDictionary <string, object>;

                linkedShowtime.Add("links", links);

                return(CreatedAtRoute("GetShowtime", new { movieId, showtimeId = showtimeToAdd.Id }, linkedShowtime));
            }
            else
            {
                return(CreatedAtRoute("GetShowtime", new { movieId, showtimeId = showtimeToAdd.Id }, showtime));
            }
        }