public async Task <ActionResult <LegacyReleaseViewModel> > UpdateLegacyRelease( Guid id, UpdateLegacyReleaseViewModel legacyRelease) { return(await _legacyReleaseService .UpdateLegacyRelease(id, legacyRelease) .HandleFailuresOrOk()); }
public async Task <Either <ActionResult, LegacyReleaseViewModel> > UpdateLegacyRelease( Guid id, UpdateLegacyReleaseViewModel updateLegacyRelease) { return(await _persistenceHelper .CheckEntityExists <LegacyRelease>( id, release => release.Include(r => r.Publication) .ThenInclude(p => p.LegacyReleases) ) .OnSuccess(_userService.CheckCanUpdateLegacyRelease) .OnSuccess(async legacyRelease => { legacyRelease.Description = updateLegacyRelease.Description; legacyRelease.Url = updateLegacyRelease.Url; legacyRelease.PublicationId = updateLegacyRelease.PublicationId; var publication = legacyRelease.Publication; if (updateLegacyRelease.Order != legacyRelease.Order) { legacyRelease.Order = updateLegacyRelease.Order; // Shift up orders of existing legacy releases // to make space for updated legacy release. publication.LegacyReleases .FindAll(release => release.Order >= updateLegacyRelease.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(); return _mapper.Map <LegacyReleaseViewModel>(legacyRelease); })); }