public async Task <Response <UpdateResult> > Handle(ChangeApiVersionStatus request) { var apiVersion = await _context.ApiVersions .Include(x => x.Api) .FirstOrDefaultAsync(x => x.Api.Name.Equals(request.ApiName) && x.MajorVersion == request.MajorVersion && x.MinorVersion == request.MinorVersion); if (apiVersion == null) { return(new Response <UpdateResult>(UpdateResult.NotFound)); } if (!request.CurrentStatus.Equals(apiVersion.Status)) { return(new Response <UpdateResult>(UpdateResult.NotUpdated, "Existing status does not match command")); } var validNextStatuses = StatusTransitions.GetNextValidStatuses(apiVersion.Status); if (!validNextStatuses.Contains(request.NewStatus)) { return(new Response <UpdateResult>(UpdateResult.NotUpdated, $"Not a valid status transition. Valid transitions are: { string.Join(',', validNextStatuses.Select(x => x.ToString())) }")); } apiVersion.Status = request.NewStatus; await _context.SaveChangesAsync(); return(new Response <UpdateResult>(UpdateResult.Updated)); }
public async Task <ActionResult> UpdateVersionStatusAsync([FromRoute] string apiName, [FromRoute] int majorVersion, [FromRoute] int minorVersion, [FromBody] VersionStatusExternal status) { var changeApiVersionStatus = new ChangeApiVersionStatus() { ApiName = apiName, MajorVersion = majorVersion, MinorVersion = minorVersion, NewStatus = (VersionStatus)(int)status }; var response = await _mediator.Send(changeApiVersionStatus); if (response.Result == UpdateResult.NotFound) { return(NotFound()); } else if (response.Result == UpdateResult.NotUpdated) { return(BadRequest(response.Description)); } else if (response.Result == UpdateResult.Updated) { return(Ok()); } else { return(StatusCode(500)); // result not contemplated, which is bad } }