public async Task <Either <ActionResult, MethodologySummaryViewModel> > UpdateMethodologyAsync(Guid id, UpdateMethodologyRequest request) { return(await _persistenceHelper.CheckEntityExists <Methodology>(id) .OnSuccess(methodology => CheckCanUpdateMethodologyStatus(methodology, request.Status)) .OnSuccess(_userService.CheckCanUpdateMethodology) .OnSuccess(async methodology => { if (methodology.Live) { // Leave slug return methodology; } var slug = SlugFromTitle(request.Title); return (await ValidateMethodologySlugUniqueForUpdate(methodology.Id, slug)).Map(_ => { methodology.Slug = slug; return methodology; }); }) .OnSuccess(async methodology => { methodology.InternalReleaseNote = request.InternalReleaseNote ?? methodology.InternalReleaseNote; methodology.Status = request.Status; methodology.Title = request.Title; methodology.Updated = DateTime.UtcNow; _context.Methodologies.Update(methodology); await _context.SaveChangesAsync(); if (methodology.Status == MethodologyStatus.Approved && methodology.Live) { await _publishingService.MethodologyChanged(methodology.Id); } return await GetSummaryAsync(id); })); }