public async Task <ActionResult <LegacyReleaseViewModel> > UpdateLegacyRelease(
     Guid id,
     UpdateLegacyReleaseViewModel legacyRelease)
 {
     return(await _legacyReleaseService
            .UpdateLegacyRelease(id, legacyRelease)
            .HandleFailuresOrOk());
 }
示例#2
0
        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);
            }));
        }