Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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);
        }
Ejemplo n.º 3
0
        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()
            });
        }
Ejemplo n.º 4
0
 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));
     }
 }
Ejemplo n.º 5
0
        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);
        }
Ejemplo n.º 6
0
        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);
        }
Ejemplo n.º 7
0
        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);
        }