示例#1
0
        public JsonSchemaProperty?Visit(IField <ReferencesFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.ArrayProperty(JsonTypeBuilder.String());

            property.Default = field.Properties.DefaultValue;

            if (field.Properties.MinItems != null)
            {
                property.MinItems = field.Properties.MinItems.Value;
            }

            if (field.Properties.MaxItems != null)
            {
                property.MaxItems = field.Properties.MaxItems.Value;
            }

            property.ExtensionData = new Dictionary <string, object>
            {
                ["schemaIds"] = field.Properties.SchemaIds ?? ReadonlyList.Empty <DomainId>()
            };

            property.UniqueItems = !field.Properties.AllowDuplicates;

            return(property);
        }
示例#2
0
        public JsonSchemaProperty?Visit(IArrayField field, Args args)
        {
            // Create a reference to give it a nice name in code generation.
            var(reference, actual) = args.Factory($"{args.Schema.TypeName()}{field.Name.ToPascalCase()}ItemDto");

            if (actual != null)
            {
                var nestedArgs = args with {
                    Level = args.Level + 1
                };

                foreach (var nestedField in field.Fields.ForApi(args.WithHidden))
                {
                    var nestedProperty = Accept(nestedArgs, nestedField);

                    if (nestedProperty != null)
                    {
                        nestedProperty.Description = nestedField.RawProperties.Hints;
                        nestedProperty.SetRequired(nestedField.RawProperties.IsRequired);

                        actual.Properties.Add(nestedField.Name, nestedProperty);
                    }
                }
            }

            return(JsonTypeBuilder.ArrayProperty(reference));
        }
示例#3
0
        public JsonSchemaProperty?Visit(IField <DateTimeFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.DateTimeProperty();

            property.Default = field.Properties.DefaultValue?.ToString();

            return(property);
        }
示例#4
0
        public JsonSchemaProperty?Visit(IField <GeolocationFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.ObjectProperty();

            property.Format = GeoJson.Format;

            return(property);
        }
示例#5
0
        public JsonSchemaProperty?Visit(IField <ComponentFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.ObjectProperty();

            BuildComponent(property, field.Properties.SchemaIds, args);

            return(property);
        }
示例#6
0
        public JsonSchemaProperty?Visit(IField <BooleanFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.BooleanProperty();

            property.Default = field.Properties.DefaultValue;

            return(property);
        }
示例#7
0
        public JsonSchemaProperty?Visit(IField <ComponentsFieldProperties> field, Args args)
        {
            var itemSchema = JsonTypeBuilder.Object();

            BuildComponent(itemSchema, field.Properties.SchemaIds, args);

            return(JsonTypeBuilder.ArrayProperty(itemSchema));
        }
示例#8
0
        private static void BuildComponent(JsonSchema jsonSchema, ReadonlyList <DomainId>?schemaIds, Args args)
        {
            if (args.WithComponents)
            {
                var discriminator = new OpenApiDiscriminator
                {
                    PropertyName = Component.Discriminator
                };

                foreach (var schema in args.Components.Resolve(schemaIds).Values)
                {
                    // Create a reference to give it a nice name in code generation.
                    var(reference, actual) = args.Factory($"{schema.TypeName()}ComponentDto");

                    if (actual != null)
                    {
                        foreach (var field in schema.Fields.ForApi(args.WithHidden))
                        {
                            var property =
                                BuildProperty(
                                    field,
                                    args.Components,
                                    schema,
                                    args.Factory,
                                    args.WithHidden,
                                    args.WithComponents);

                            if (property != null)
                            {
                                property.SetRequired(field.RawProperties.IsRequired);
                                property.SetDescription(field);

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

                    jsonSchema.OneOf.Add(reference);

                    discriminator.Mapping[schema.Name] = reference;
                }

                jsonSchema.DiscriminatorObject = discriminator;

                if (discriminator.Mapping.Count > 0)
                {
                    jsonSchema.Properties.Add(Component.Discriminator, JsonTypeBuilder.StringProperty(isRequired: true));
                }
            }
            else
            {
                jsonSchema.AllowAdditionalProperties = true;
            }
        }
示例#9
0
        public JsonSchemaProperty?Visit(IField <ReferencesFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.ArrayProperty(JsonTypeBuilder.String());

            property.Format = GeoJson.Format;

            property.ExtensionData = new Dictionary <string, object>
            {
                ["schemaIds"] = field.Properties.SchemaIds ?? ReadonlyList.Empty <DomainId>()
            };

            return(property);
        }
示例#10
0
        public JsonSchemaProperty?Visit(IField <NumberFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.NumberProperty();

            if (field.Properties.MinValue != null)
            {
                property.Minimum = (decimal)field.Properties.MinValue.Value;
            }

            if (field.Properties.MaxValue != null)
            {
                property.Maximum = (decimal)field.Properties.MaxValue.Value;
            }

            return(property);
        }
示例#11
0
        public JsonSchemaProperty?Visit(IField <AssetsFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.ArrayProperty(JsonTypeBuilder.String());

            property.Default = field.Properties.DefaultValue;

            if (field.Properties.MinItems != null)
            {
                property.MinItems = field.Properties.MinItems.Value;
            }

            if (field.Properties.MaxItems != null)
            {
                property.MaxItems = field.Properties.MaxItems.Value;
            }

            return(property);
        }
示例#12
0
        public JsonSchemaProperty?Visit(IField <ComponentsFieldProperties> field, Args args)
        {
            var itemSchema = JsonTypeBuilder.Object();

            BuildComponent(itemSchema, field.Properties.SchemaIds, args);

            var property = JsonTypeBuilder.ArrayProperty(itemSchema);

            if (field.Properties.MinItems != null)
            {
                property.MinItems = field.Properties.MinItems.Value;
            }

            if (field.Properties.MaxItems != null)
            {
                property.MaxItems = field.Properties.MaxItems.Value;
            }

            return(property);
        }
示例#13
0
        public JsonSchemaProperty?Visit(IField <StringFieldProperties> field, Args args)
        {
            var property = JsonTypeBuilder.StringProperty();

            property.MaxLength = field.Properties.MaxLength;
            property.MinLength = field.Properties.MinLength;

            property.Pattern = field.Properties.Pattern;

            if (field.Properties.AllowedValues != null)
            {
                var names = property.EnumerationNames ??= new Collection <string>();

                foreach (var value in field.Properties.AllowedValues)
                {
                    names.Add(value);
                }
            }

            return(property);
        }
示例#14
0
        public static JsonSchema Build(JsonSchema?dataSchema, bool extended = false, bool withDeleted = false)
        {
            var jsonSchema = new JsonSchema
            {
                AllowAdditionalProperties = false,
                Properties =
                {
                    ["id"]             = JsonTypeBuilder.StringProperty(FieldDescriptions.EntityId,             true),
                    ["created"]        = JsonTypeBuilder.DateTimeProperty(FieldDescriptions.EntityCreated,      true),
                    ["createdBy"]      = JsonTypeBuilder.StringProperty(FieldDescriptions.EntityCreatedBy,      true),
                    ["lastModified"]   = JsonTypeBuilder.DateTimeProperty(FieldDescriptions.EntityLastModified, true),
                    ["lastModifiedBy"] = JsonTypeBuilder.StringProperty(FieldDescriptions.EntityLastModifiedBy, true),
                    ["newStatus"]      = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentNewStatus),
                    ["status"]         = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentStatus,        true)
                },
                Type = JsonObjectType.Object
            };

            if (withDeleted)
            {
                jsonSchema.Properties["isDeleted"] = JsonTypeBuilder.BooleanProperty(FieldDescriptions.EntityIsDeleted, false);
            }

            if (extended)
            {
                jsonSchema.Properties["newStatusColor"]    = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentNewStatusColor, false);
                jsonSchema.Properties["schemaId"]          = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentSchemaId, true);
                jsonSchema.Properties["schemaName"]        = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentSchemaName, true);
                jsonSchema.Properties["schemaDisplayName"] = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentSchemaDisplayName, true);
                jsonSchema.Properties["statusColor"]       = JsonTypeBuilder.StringProperty(FieldDescriptions.ContentStatusColor, true);
            }

            if (dataSchema != null)
            {
                jsonSchema.Properties["data"] = JsonTypeBuilder.ReferenceProperty(dataSchema, FieldDescriptions.ContentData, true);
            }

            return(jsonSchema);
        }
示例#15
0
 public JsonSchemaProperty?Visit(IField <BooleanFieldProperties> field, Args args)
 {
     return(JsonTypeBuilder.BooleanProperty());
 }
示例#16
0
 public JsonSchemaProperty?Visit(IField <AssetsFieldProperties> field, Args args)
 {
     return(JsonTypeBuilder.ArrayProperty(JsonTypeBuilder.String()));
 }
示例#17
0
 public JsonSchemaProperty?Visit(IField <DateTimeFieldProperties> field, Args args)
 {
     return(JsonTypeBuilder.DateTimeProperty());
 }