예제 #1
0
        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());
        }
예제 #2
0
        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());
        }