public async Task <IActionResult> PartiallyUpdateAlbum([FromRoute] Guid artistId, [FromRoute] Guid albumId, JsonPatchDocument <AlbumForUpdateDto> patchDoc) { var albumFromRepo = await _albumRepository.GetAlbumForArtistAsync(albumId, artistId); // Upserting if (albumFromRepo == null) { var albumForUpdateDto = new AlbumForUpdateDto(); patchDoc.ApplyTo(albumForUpdateDto, ModelState); TryValidateModel(albumForUpdateDto); if (!ModelState.IsValid) { return(new ErrorProcessingEntityObjectResult(ModelState)); } var albumToAdd = Mapper.Map <Album>(albumForUpdateDto); albumToAdd.Id = albumId; albumToAdd.ArtistId = artistId; _albumRepository.Create(albumToAdd); if (!await _albumRepository.SaveChangesAsync()) { throw new Exception($"Upserting album {albumToAdd.Id} failed for artist {artistId}"); } var albumToReturn = Mapper.Map <AlbumDto>(albumToAdd); return(CreatedAtRoute("GetAlbum", new { artistId, albumId = albumToReturn.Id }, albumToReturn)); } var albumToPatch = Mapper.Map <AlbumForUpdateDto>(albumFromRepo); patchDoc.ApplyTo(albumToPatch, ModelState); TryValidateModel(albumToPatch); if (!ModelState.IsValid) { return(new ErrorProcessingEntityObjectResult(ModelState)); } Mapper.Map(albumToPatch, albumFromRepo); _albumRepository.Update(albumFromRepo); if (!await _albumRepository.SaveChangesAsync()) { throw new Exception($"updating album {albumId} for artist {artistId} failed on save"); } return(NoContent()); }
public async Task <IActionResult> UpdateAlbum([FromRoute] Guid artistId, [FromRoute] Guid albumId, [FromBody] AlbumForUpdateDto albumToUpdate) { var albumFromRepo = await _albumRepository.GetAlbumForArtistAsync(albumId, artistId); // Upserting if (albumFromRepo == null) { var albumEntity = Mapper.Map <Album>(albumToUpdate); albumEntity.Id = albumId; albumEntity.ArtistId = artistId; _albumRepository.Create(albumEntity); if (!await _albumRepository.SaveChangesAsync()) { throw new Exception($"Upserting album {albumEntity.Id} for artist {artistId} failed"); } return(CreatedAtRoute("GetAlbum", new { artistId, albumId = albumEntity.Id }, albumToUpdate)); } Mapper.Map(albumToUpdate, albumFromRepo); _albumRepository.Update(albumFromRepo); if (!await _albumRepository.SaveChangesAsync()) { throw new Exception($"Updating album {albumId} for author {artistId} failed on save"); } return(NoContent()); }