public async Task <ActionResult <LegacyReleaseViewModel> > UpdateLegacyRelease( Guid id, LegacyReleaseUpdateViewModel legacyRelease) { return(await _legacyReleaseService .UpdateLegacyRelease(id, legacyRelease) .HandleFailuresOrOk()); }
public async Task <Either <ActionResult, LegacyReleaseViewModel> > UpdateLegacyRelease( Guid id, LegacyReleaseUpdateViewModel legacyReleaseUpdate) { return(await _persistenceHelper .CheckEntityExists <LegacyRelease>( id, release => release.Include(r => r.Publication) .ThenInclude(p => p.LegacyReleases) ) .OnSuccess(_userService.CheckCanUpdateLegacyRelease) .OnSuccess(async legacyRelease => { legacyRelease.Description = legacyReleaseUpdate.Description; legacyRelease.Url = legacyReleaseUpdate.Url; legacyRelease.PublicationId = legacyReleaseUpdate.PublicationId; var publication = legacyRelease.Publication; if (legacyReleaseUpdate.Order != legacyRelease.Order) { legacyRelease.Order = legacyReleaseUpdate.Order; // Shift up orders of existing legacy releases // to make space for updated legacy release. publication.LegacyReleases .FindAll(release => release.Order >= legacyReleaseUpdate.Order && release.Id != id) .ForEach(release => release.Order++); var currentOrder = 0; // Re-order again to make sure orders are // increased incrementally with no gaps. publication.LegacyReleases .OrderBy(release => release.Order) .ToList() .ForEach(release => { currentOrder++; release.Order = currentOrder; }); } _context.Update(legacyRelease); _context.Update(publication); await _context.SaveChangesAsync(); await _publicBlobCacheService.DeleteItem(new PublicationCacheKey(publication.Slug)); return _mapper.Map <LegacyReleaseViewModel>(legacyRelease); })); }