public static IList <RequestBodyEntity> TransformRequestBody(OpenApiOperation openApiOperation, string componentGroupId) { var requestBodies = new List <RequestBodyEntity>(); if (openApiOperation.RequestBody != null) { foreach (var requestContent in openApiOperation.RequestBody.Content) { var requestBodySchemas = new List <RequestBodySchemaEntity> { // todo, if there exist oneof/anyof will add all them to the array. new RequestBodySchemaEntity { Name = "default", Properties = TransformHelper.GetPropertiesFromSchema(requestContent.Value.Schema, componentGroupId) } }; requestBodies.Add(new RequestBodyEntity { MediaType = requestContent.Key, Description = openApiOperation.RequestBody.Description, RequestBodySchemas = requestBodySchemas }); } } return(requestBodies); }
public static IList <ParameterEntity> TransformUriParameters(OpenApiOperation openApiOperation, string componentGroupId) { var parameterEntities = new List <ParameterEntity>(); foreach (var openApiParameter in openApiOperation.Parameters) { var parameterEntity = new ParameterEntity { Name = openApiParameter.Name, Description = openApiParameter.Description, In = openApiParameter.In.ToString().ToLower(), IsRequired = openApiParameter.Required, IsReadOnly = openApiParameter.Schema?.ReadOnly ?? false, Nullable = openApiParameter.Schema?.Nullable ?? true, IsDeprecated = openApiParameter.Deprecated, Pattern = openApiParameter.Schema?.Pattern, Format = openApiParameter.Schema?.Format, Types = new List <PropertyTypeEntity> { TransformHelper.ParseOpenApiSchema(openApiParameter.Schema, componentGroupId) } }; parameterEntities.Add(parameterEntity); } return(parameterEntities); }
public static OperationEntity Transform(TransformModel transformModel) { var componentGroupId = transformModel.ComponentGroupId; var allUriParameters = TransformUriParameters(transformModel.Operation.Value, componentGroupId); var requiredQueryUriParameters = allUriParameters.Where(p => p.IsRequired && p.In == "query").ToList(); var optionalQueryUriParameters = allUriParameters.Where(p => !p.IsRequired && p.In == "query").ToList(); return(new OperationEntity { Id = transformModel.OperationId, Name = transformModel.OperationName, Service = transformModel.ServiceName, GroupName = transformModel.OperationGroupName, Summary = transformModel.Operation.Value.Summary, Description = transformModel.Operation.Value.Description, ApiVersion = transformModel.OpenApiDoc.Info.Version, IsDeprecated = transformModel.Operation.Value.Deprecated, HttpVerb = transformModel.Operation.Key.ToString().ToUpper(), Servers = TransformHelper.GetServerEnities(transformModel.OpenApiDoc.Servers), Paths = TransformPaths(transformModel.OpenApiPath, transformModel.Operation.Value, requiredQueryUriParameters), // remove this for now // OptionalParameters = TransformOptionalParameters(optionalQueryUriParameters), RequestParameters = allUriParameters, Responses = TransformResponses(transformModel, transformModel.Operation.Value, componentGroupId), RequestBodies = TransformRequestBody(transformModel.Operation.Value, componentGroupId), Securities = TransformSecurity(transformModel.Operation.Value.Security.Count != 0 ? transformModel.Operation.Value.Security : transformModel.OpenApiDoc.SecurityRequirements), SeeAlsos = TransformExternalDocs(transformModel.Operation.Value), // for internal IsFunctionOrAction = IsFunctionOrAction(transformModel.Operation.Value), GroupedPaths = GetGroupedPaths(transformModel.OpenApiPath, transformModel.Operation.Value), InternalOpeartionId = transformModel.Operation.Value.OperationId.ToLower() }); }
private static JToken GetComponentExampleCore(IOpenApiAny example) { if (example.AnyType == AnyType.Object) { var exampleObject = (OpenApiObject)example; JObject jObject = new JObject(); foreach (var eo in exampleObject) { var value = GetComponentExampleCore(eo.Value); jObject.Add(new JProperty(eo.Key, value)); } return(jObject); } else if (example.AnyType == AnyType.Array) { var exampleArray = (OpenApiArray)example; JArray jArray = new JArray(); foreach (var ea in exampleArray) { jArray.Add(GetComponentExampleCore(ea)); } return(jArray); } else { return(TransformHelper.GetValueFromPrimitiveType(example)); } }
public static ComponentEntity Transform(TransformModel transformModel) { var properties = TransformHelper.GetPropertiesFromSchema(transformModel.OpenApiSchema, transformModel.ComponentGroupId); var component = new ComponentEntity { Id = transformModel.ComponentId, Name = transformModel.ComponentName, Service = transformModel.ServiceName, GroupName = transformModel.ComponentGroupName, ApiVersion = transformModel.OpenApiDoc.Info.Version, Description = transformModel.OpenApiSchema.Description ?? transformModel.OpenApiSchema.Title, PropertyItems = properties.ToList(), Example = GetComponentExample(transformModel.OpenApiSchema) }; return(component); }
private static IList <ResponseMediaTypeAndBodyEntity> GetResponseMediaTypeAndBodies(OpenApiReference openApiReference, IDictionary <string, OpenApiMediaType> contents, string componentGroupId) { var responseMediaTypeAndBodyEntities = new List <ResponseMediaTypeAndBodyEntity>(); foreach (var content in contents) { var propertyTypeEntities = new List <PropertyTypeEntity>(); var propertyEntities = new List <PropertyEntity>(); if (!string.IsNullOrEmpty(openApiReference?.Id) && openApiReference?.ReferenceV3?.Contains("responses") == false) { propertyTypeEntities.Add(new PropertyTypeEntity { Id = TransformHelper.GetReferenceId(openApiReference, componentGroupId) }); } else { var type = TransformHelper.ParseOpenApiSchema(content.Value.Schema, componentGroupId); if (type.AnonymousChildren != null && type.AnonymousChildren.Count > 0) { propertyEntities.AddRange(type.AnonymousChildren); } else { type.AnonymousChildren = null; propertyTypeEntities.Add(type); } } responseMediaTypeAndBodyEntities.Add(new ResponseMediaTypeAndBodyEntity { MediaType = content.Key, ResponseBodyTypes = propertyTypeEntities.Count > 0 ? propertyTypeEntities : null, ResponseBodySchemas = propertyEntities.Count > 0 ? propertyEntities : null }); } return(responseMediaTypeAndBodyEntities); }
public static IList <ResponseEntity> TransformResponses(TransformModel transformModel, OpenApiOperation openApiOperation, string componentGroupId) { var responseEntities = new List <ResponseEntity>(); if (openApiOperation.Responses?.Count > 0) { foreach (var openApiResponse in openApiOperation.Responses) { var bodies = GetResponseMediaTypeAndBodies(openApiResponse.Value.Reference, openApiResponse.Value.Content, componentGroupId); var links = GetResponseLinks(transformModel, openApiResponse.Value.Links); var responseEntity = new ResponseEntity { Name = TransformHelper.GetStatusCodeString(openApiResponse.Key), StatusCode = openApiResponse.Key, Description = openApiResponse.Value.Description, ResponseMediaTypeAndBodies = bodies.Count > 0 ? bodies : null, ResponseLinks = links.Count > 0 ? links : null, ResponseHeaders = null // todo }; responseEntities.Add(responseEntity); } } return(responseEntities); }