コード例 #1
0
        public async Task <IActionResult> UpdateShowtimeAsync(
            [FromRoute, SwaggerParameter(Description = "Movie id of showtime to update", Required = true)] Guid movieId,
            [FromRoute, SwaggerParameter(Description = "Id of showtime to update", Required = true)] Guid showtimeId,
            [FromBody, SwaggerParameter(Description = "Showtime to update", Required = true)] ShowtimeToUpdateDto showtimeToUpdate,
            [FromHeader(Name = "Accept"), SwaggerParameter(Description = "media type to request betwen json or json+hateoas")] string mediaType)
        {
            if (!await _showtimeRepository.MovieExists(movieId))
            {
                return(NotFound());
            }

            if (showtimeToUpdate == null)
            {
                return(BadRequest());
            }

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

            if (showtimeFromDb == null)
            {
                var showtimeEntity = Mapper.Map <Showtime>(showtimeToUpdate);
                showtimeEntity.Id = showtimeId;
                _showtimeRepository.AddShowtime(movieId, showtimeEntity);

                if (!await _showtimeRepository.SaveChangesAsync())
                {
                    _logger.LogError($"Upserting showtime: {showtimeId} failed on save");
                }

                var showtimeToReturn = Mapper.Map <ShowtimeDto>(showtimeEntity);

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

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

                    linkedShowtime.Add("links", links);

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

            Mapper.Map(showtimeToUpdate, showtimeFromDb);

            _showtimeRepository.UpdateShowtime(showtimeFromDb);

            if (!await _showtimeRepository.SaveChangesAsync())
            {
                _logger.LogError($"Updating showtime: {showtimeId} failed on save");
            }

            return(NoContent());
        }
コード例 #2
0
        public async Task <IActionResult> PartiuallyUpdateShowtimeAsync(
            [FromRoute, SwaggerParameter(Description = "ID of showtime to update", Required = true)] Guid showtimeId,
            [FromRoute, SwaggerParameter(Description = "ID of movie to update showtime", Required = true)] Guid movieId,
            [FromBody, SwaggerParameter(Description = "Jsonpatch operation document to update", Required = true)] JsonPatchDocument <ShowtimeToUpdateDto> patchDoc,
            [FromHeader(Name = "Accept"), SwaggerParameter(Description = "media type to request betwen json or json+hateoas")] string mediaType)
        {
            if (!await _showtimeRepository.MovieExists(movieId))
            {
                return(NotFound());
            }

            if (patchDoc == null)
            {
                return(BadRequest());
            }

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

            if (showtimeFromDb == null)
            {
                var showtimeToCreate = new ShowtimeToUpdateDto();

                patchDoc.ApplyTo(showtimeToCreate, ModelState);

                if (!ModelState.IsValid)
                {
                    new ProccessingEntityObjectResultErrors(ModelState);
                }

                var showtimeToAddToDb = Mapper.Map <Showtime>(showtimeToCreate);
                showtimeToAddToDb.Id = showtimeId;
                _showtimeRepository.AddShowtime(movieId, showtimeToAddToDb);

                if (!await _showtimeRepository.SaveChangesAsync())
                {
                    _logger.LogError($"Upserting showtime: {showtimeId} failed on save");
                }

                var showtimeToReturn = Mapper.Map <ShowtimeDto>(showtimeToAddToDb);

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

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

                    linkedShowtime.Add("links", links);

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

            var showtimeToPatch = Mapper.Map <ShowtimeToUpdateDto>(showtimeFromDb);

            patchDoc.ApplyTo(showtimeToPatch, ModelState);

            if (!ModelState.IsValid)
            {
                new ProccessingEntityObjectResultErrors(ModelState);
            }

            Mapper.Map(showtimeToPatch, showtimeFromDb);

            _showtimeRepository.UpdateShowtime(showtimeFromDb);

            if (!await _showtimeRepository.SaveChangesAsync())
            {
                _logger.LogError($"Partially updating {showtimeId} failed");
            }

            return(NoContent());
        }