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.TypeName(); 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 = JsonTypeVisitor.BuildProperty(field, schemaResolver, withHidden); 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()}PropertyDto", () => partitionObject); jsonSchema.Properties.Add(field.Name, CreateProperty(field, propertyReference)); } } return(jsonSchema); }
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); }
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); }
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); }