public Endpoint GenerateEndpoint(OpenApiEndpointModel inputModel, IObjectsProcessingKeyStore keyStore) { var output = new Endpoint() { Path = inputModel.Path, ShortName = inputModel.ShortName, Method = inputModel.Method, PathParameters = SelectParameterByLocation(inputModel, ParameterIn.path), QueryParameters = SelectParameterByLocation(inputModel, ParameterIn.query), HeaderParameters = SelectParameterByLocation(inputModel, ParameterIn.header), RequestBody = inputModel.RequestBody == null ? null : ConvertContent(inputModel.RequestBody, $"{inputModel.ShortName}Request", keyStore), SuccessResponseBody = inputModel.SuccessStatusResponse == null ? null : ConvertContent(inputModel.SuccessStatusResponse, $"{inputModel.ShortName}Result", keyStore) }; output.SuccessContentExpected = output.SuccessResponseBody != null; return(output); }
private IEnumerable <Parameter> SelectParameterByLocation(OpenApiEndpointModel parentEndpoint, ParameterIn paramIn) { return(parentEndpoint.Parameters? .Where(p => p.In == paramIn) .Select(p => new Parameter() { Name = p.Name, Required = p.Required, Type = _primitiveService.GetType(p.Schema, parentEndpoint.ShortName + p.Name) })); }
public IEnumerable <OpenApiEndpointModel> Parse(IDictionary <string, IDictionary <string, JsonEndpointModel> > paths) { var endpoints = new List <OpenApiEndpointModel>(); foreach (var path in paths) { foreach (var method in path.Value) { var jsonEndpoint = method.Value; var returnedEndpoint = new OpenApiEndpointModel() { Path = path.Key, Method = _enumService.ConvertStringTo <Method>(method.Key.ToUpperInvariant()), Tags = jsonEndpoint.Tags, Description = jsonEndpoint.Description, ShortName = jsonEndpoint.OperationId }; var bodyParameter = jsonEndpoint.Parameters? .FirstOrDefault(p => p.In == JsonParameterIn.body); if (bodyParameter != null) { returnedEndpoint.RequestBody = new OpenApiRequestOrResponseModel() { Type = jsonEndpoint.Consumes != null && jsonEndpoint.Consumes.Any() ? GetContentType(jsonEndpoint.Consumes) : "application/json", Content = _typeParser.Parse(_objectParser, bodyParameter.Schema) }; } if ((jsonEndpoint.Produces != null && jsonEndpoint.Produces.Any()) || jsonEndpoint.Responses.Any()) { var successStatusResponse = jsonEndpoint.Responses .FirstOrDefault(r => Regex.IsMatch(r.Key, "2[0-9]{2}")); if (successStatusResponse.Value != null) { returnedEndpoint.SuccessStatusResponse = new OpenApiRequestOrResponseModel() { Type = GetContentType(jsonEndpoint.Produces), Content = successStatusResponse.Value.Schema != null? _typeParser.Parse(_objectParser, successStatusResponse.Value.Schema) : null }; } } if (jsonEndpoint.Parameters != null && jsonEndpoint.Parameters.Any()) { var parameters = new List <OpenApiParameter>(); foreach (var param in jsonEndpoint.Parameters) { if (param.In != JsonParameterIn.body) { parameters.Add(new OpenApiParameter() { In = _enumService.ConvertStringTo <ParameterIn>(param.In.ToString().ToLower()), Schema = _typeParser.Parse(_objectParser, param) as OpenApiPrimitiveType, Name = param.Name, Required = param.Required }); } } returnedEndpoint.Parameters = parameters; } endpoints.Add(returnedEndpoint); } } return(endpoints); }
private OpenApiEndpointModel ParseIndividualEndpoint(YamlEndpointModel yamlEndpoint, IEnumerable <OpenApiParameter> pathLevelParams, string methodName, string path) { var returnedEndpoint = new OpenApiEndpointModel() { Path = path, Method = _enumService.ConvertStringTo <Method>(methodName.ToUpperInvariant()), Tags = yamlEndpoint.Tags, Description = yamlEndpoint.Description }; var bodySchemaDictEntry = yamlEndpoint.RequestBody? .Content? .FirstOrDefault(); if (bodySchemaDictEntry != null) { returnedEndpoint.RequestBody = new OpenApiRequestOrResponseModel() { Type = bodySchemaDictEntry.Value.Key, Content = _typeParser.Parse(_objectParser, bodySchemaDictEntry.Value .Value .Schema) }; } var responseSchemaDictEntry = yamlEndpoint.Responses? .FirstOrDefault(r => Regex.IsMatch(r.Key, "^2[0-9]{2}$")) .Value? .Content? .FirstOrDefault(); if (responseSchemaDictEntry != null) { returnedEndpoint.SuccessStatusResponse = new OpenApiRequestOrResponseModel() { Type = responseSchemaDictEntry.Value.Key, Content = _typeParser.Parse(_objectParser, responseSchemaDictEntry.Value .Value .Schema) }; } var endpointHasParams = yamlEndpoint.Parameters != null && yamlEndpoint.Parameters.Any(); var pathHasParams = pathLevelParams != null && pathLevelParams.Any(); if (endpointHasParams || pathHasParams) { var parametersOut = new List <OpenApiParameter>(); if (endpointHasParams) { parametersOut.AddRange(ParseParameters(yamlEndpoint.Parameters)); } if (pathHasParams) { parametersOut.AddRange(pathLevelParams); } returnedEndpoint.Parameters = parametersOut; } return(returnedEndpoint); }