Esempio n. 1
0
        public static JsonSchema4 BuildJsonSchema(this Schema schema, PartitionResolver partitionResolver, Func <string, JsonSchema4, JsonSchema4> schemaResolver)
        {
            Guard.NotNull(schemaResolver, nameof(schemaResolver));
            Guard.NotNull(partitionResolver, nameof(partitionResolver));

            var schemaName = schema.Name.ToPascalCase();

            var jsonTypeVisitor = new JsonTypeVisitor(schemaResolver);
            var jsonSchema      = new JsonSchema4 {
                Type = JsonObjectType.Object
            };

            foreach (var field in schema.Fields.Where(x => !x.IsHidden))
            {
                var partitionProperty = CreateProperty(field);
                var partitionObject   = new JsonSchema4 {
                    Type = JsonObjectType.Object, AllowAdditionalProperties = false
                };
                var partition = partitionResolver(field.Partitioning);

                foreach (var partitionItem in partition)
                {
                    var partitionItemProperty = field.Accept(jsonTypeVisitor);

                    partitionItemProperty.Description = partitionItem.Name;
                    partitionObject.Properties.Add(partitionItem.Key, partitionItemProperty);
                }

                partitionProperty.Reference = schemaResolver($"{schemaName}{field.Name.ToPascalCase()}Property", partitionObject);

                jsonSchema.Properties.Add(field.Name, partitionProperty);
            }

            return(jsonSchema);
        }
Esempio n. 2
0
        public static JsonSchema BuildJsonSchema(this Schema schema, PartitionResolver partitionResolver, SchemaResolver schemaResolver, bool withHidden = false)
        {
            Guard.NotNull(schemaResolver, nameof(schemaResolver));
            Guard.NotNull(partitionResolver, nameof(partitionResolver));

            var schemaName = schema.Name.ToPascalCase();

            var jsonTypeVisitor = new JsonTypeVisitor(schemaResolver, withHidden);
            var jsonSchema      = SchemaBuilder.Object();

            foreach (var field in schema.Fields.ForApi(withHidden))
            {
                var partitionObject = SchemaBuilder.Object();
                var partitioning    = partitionResolver(field.Partitioning);

                foreach (var partitionKey in partitioning.AllKeys)
                {
                    var partitionItemProperty = field.Accept(jsonTypeVisitor);

                    if (partitionItemProperty != null)
                    {
                        var isOptional = partitioning.IsOptional(partitionKey);

                        var name = partitioning.GetName(partitionKey);

                        partitionItemProperty.Description = name;
                        partitionItemProperty.SetRequired(field.RawProperties.IsRequired && !isOptional);

                        partitionObject.Properties.Add(partitionKey, partitionItemProperty);
                    }
                }

                if (partitionObject.Properties.Count > 0)
                {
                    var propertyReference = schemaResolver($"{schemaName}{field.Name.ToPascalCase()}Property", partitionObject);

                    jsonSchema.Properties.Add(field.Name, CreateProperty(field, propertyReference));
                }
            }

            return(jsonSchema);
        }
Esempio n. 3
0
        public static JsonSchema4 BuildJsonSchema(this Schema schema, PartitionResolver partitionResolver, Func <string, JsonSchema4, JsonSchema4> schemaResolver)
        {
            Guard.NotNull(schemaResolver, nameof(schemaResolver));
            Guard.NotNull(partitionResolver, nameof(partitionResolver));

            var schemaName = schema.Name.ToPascalCase();

            var jsonTypeVisitor = new JsonTypeVisitor(schemaResolver);
            var jsonSchema      = new JsonSchema4 {
                Type = JsonObjectType.Object
            };

            foreach (var field in schema.Fields.ForApi())
            {
                var partitionObject = Builder.Object();
                var partition       = partitionResolver(field.Partitioning);

                foreach (var partitionItem in partition)
                {
                    var partitionItemProperty = field.Accept(jsonTypeVisitor);

                    if (partitionItemProperty != null)
                    {
                        partitionItemProperty.Description = partitionItem.Name;
                        partitionItemProperty.IsRequired  = field.RawProperties.IsRequired && !partitionItem.IsOptional;

                        partitionObject.Properties.Add(partitionItem.Key, partitionItemProperty);
                    }
                }

                if (partitionObject.Properties.Count > 0)
                {
                    var propertyReference = schemaResolver($"{schemaName}{field.Name.ToPascalCase()}Property", partitionObject);

                    jsonSchema.Properties.Add(field.Name, CreateProperty(field, propertyReference));
                }
            }

            return(jsonSchema);
        }
Esempio n. 4
0
        public static JsonSchema BuildFlatJsonSchema(this Schema schema, SchemaResolver schemaResolver)
        {
            Guard.NotNull(schemaResolver, nameof(schemaResolver));

            var schemaName = schema.TypeName();

            var jsonSchema = SchemaBuilder.Object();

            foreach (var field in schema.Fields.ForApi())
            {
                var property = JsonTypeVisitor.BuildProperty(field, null, false);

                if (property != null)
                {
                    var propertyReference = schemaResolver($"{schemaName}{field.Name.ToPascalCase()}FlatPropertyDto", () => property);

                    jsonSchema.Properties.Add(field.Name, CreateProperty(field, propertyReference));
                }
            }

            return(jsonSchema);
        }
Esempio n. 5
0
        public static JsonSchema BuildDynamicJsonSchema(this Schema schema, SchemaResolver schemaResolver, bool withHidden = false)
        {
            Guard.NotNull(schemaResolver, nameof(schemaResolver));

            var jsonSchema = SchemaBuilder.Object();

            foreach (var field in schema.Fields.ForApi(withHidden))
            {
                var propertyItem = JsonTypeVisitor.BuildProperty(field, null, withHidden);

                if (propertyItem != null)
                {
                    var property =
                        SchemaBuilder.ObjectProperty(propertyItem)
                        .SetDescription(field)
                        .SetRequired(field.RawProperties.IsRequired);

                    jsonSchema.Properties.Add(field.Name, property);
                }
            }

            return(jsonSchema);
        }
Esempio n. 6
0
        public static JsonSchema BuildJsonSchema(this Schema schema, PartitionResolver partitionResolver, bool withHidden = false)
        {
            Guard.NotNull(partitionResolver, nameof(partitionResolver));

            var jsonSchema = SchemaBuilder.Object();

            foreach (var field in schema.Fields.ForApi(withHidden))
            {
                var propertyObject = SchemaBuilder.Object();

                var partitioning = partitionResolver(field.Partitioning);

                foreach (var partitionKey in partitioning.AllKeys)
                {
                    var propertyItem = JsonTypeVisitor.BuildProperty(field, null, withHidden);

                    if (propertyItem != null)
                    {
                        var isOptional = partitioning.IsOptional(partitionKey);

                        var name = partitioning.GetName(partitionKey);

                        propertyItem.SetDescription(name);
                        propertyItem.SetRequired(field.RawProperties.IsRequired && !isOptional);

                        propertyObject.Properties.Add(partitionKey, propertyItem);
                    }
                }

                if (propertyObject.Properties.Count > 0)
                {
                    jsonSchema.Properties.Add(field.Name, CreateProperty(field, propertyObject));
                }
            }

            return(jsonSchema);
        }