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));
        }
Esempio n. 2
0
        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
            }
        }