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()); }
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()); }