Browse Source

Nullable fixes.

pull/487/head
Sebastian 7 years ago
parent
commit
e4f33dc752
  1. 18
      backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/ContentSchemaBuilder.cs
  2. 8
      backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/JsonSchemaExtensions.cs
  3. 53
      backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/JsonTypeVisitor.cs
  4. 16
      backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/SchemaBuilder.cs
  5. 10
      backend/src/Squidex/Areas/Api/Controllers/Contents/Generator/SchemaOpenApiGenerator.cs
  6. 4
      backend/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs
  7. 2
      backend/src/Squidex/Areas/Api/Views/Shared/Docs.cshtml
  8. 2
      frontend/app/shared/services/auth.service.ts
  9. 2
      frontend/app/shared/state/asset-uploader.state.spec.ts

18
backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/ContentSchemaBuilder.cs

@ -24,15 +24,15 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
{
Properties =
{
["id"] = Builder.GuidProperty($"The id of the {schemaName} content.", true),
["data"] = Builder.ObjectProperty(dataSchema, $"The data of the {schemaName}.", true),
["dataDraft"] = Builder.ObjectProperty(dataSchema, $"The draft data of the {schemaName}."),
["version"] = Builder.NumberProperty($"The version of the {schemaName}.", true),
["created"] = Builder.DateTimeProperty($"The date and time when the {schemaName} content has been created.", true),
["createdBy"] = Builder.StringProperty($"The user that has created the {schemaName} content.", true),
["lastModified"] = Builder.DateTimeProperty($"The date and time when the {schemaName} content has been modified last.", true),
["lastModifiedBy"] = Builder.StringProperty($"The user that has updated the {schemaName} content last.", true),
["status"] = Builder.StringProperty($"The status of the content.", true)
["id"] = SchemaBuilder.GuidProperty($"The id of the {schemaName} content.", true),
["data"] = SchemaBuilder.ObjectProperty(dataSchema, $"The data of the {schemaName}.", true),
["dataDraft"] = SchemaBuilder.ObjectProperty(dataSchema, $"The draft data of the {schemaName}."),
["version"] = SchemaBuilder.NumberProperty($"The version of the {schemaName}.", true),
["created"] = SchemaBuilder.DateTimeProperty($"The date and time when the {schemaName} content has been created.", true),
["createdBy"] = SchemaBuilder.StringProperty($"The user that has created the {schemaName} content.", true),
["lastModified"] = SchemaBuilder.DateTimeProperty($"The date and time when the {schemaName} content has been modified last.", true),
["lastModifiedBy"] = SchemaBuilder.StringProperty($"The user that has updated the {schemaName} content last.", true),
["status"] = SchemaBuilder.StringProperty($"The status of the content.", true)
},
Type = JsonObjectType.Object
};

8
backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/JsonSchemaExtensions.cs

@ -21,11 +21,11 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
var schemaName = schema.Name.ToPascalCase();
var jsonTypeVisitor = new JsonTypeVisitor(schemaResolver, withHidden);
var jsonSchema = Builder.Object();
var jsonSchema = SchemaBuilder.Object();
foreach (var field in schema.Fields.ForApi(withHidden))
{
var partitionObject = Builder.Object();
var partitionObject = SchemaBuilder.Object();
var partitioning = partitionResolver(field.Partitioning);
foreach (var partitionKey in partitioning.AllKeys)
@ -39,7 +39,7 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
var name = partitioning.GetName(partitionKey);
partitionItemProperty.Description = name;
partitionItemProperty.IsRequired = field.RawProperties.IsRequired && !isOptional;
partitionItemProperty.SetRequired(field.RawProperties.IsRequired && !isOptional);
partitionObject.Properties.Add(partitionKey, partitionItemProperty);
}
@ -58,7 +58,7 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
public static JsonSchemaProperty CreateProperty(IField field, JsonSchema reference)
{
var jsonProperty = Builder.ObjectProperty(reference);
var jsonProperty = SchemaBuilder.ObjectProperty(reference);
if (!string.IsNullOrWhiteSpace(field.RawProperties.Hints))
{

53
backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/JsonTypeVisitor.cs

@ -27,74 +27,76 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
public JsonSchemaProperty? Visit(IArrayField field)
{
var item = Builder.Object();
var itemSchema = SchemaBuilder.Object();
foreach (var nestedField in field.Fields.ForApi(withHiddenFields))
{
var childProperty = nestedField.Accept(this);
var nestedProperty = nestedField.Accept(this);
if (childProperty != null)
if (nestedProperty != null)
{
childProperty.Description = nestedField.RawProperties.Hints;
childProperty.IsRequired = nestedField.RawProperties.IsRequired;
nestedProperty.Description = nestedField.RawProperties.Hints;
nestedProperty.SetRequired(nestedField.RawProperties.IsRequired);
item.Properties.Add(nestedField.Name, childProperty);
itemSchema.Properties.Add(nestedField.Name, nestedProperty);
}
}
return Builder.ArrayProperty(item);
return SchemaBuilder.ArrayProperty(itemSchema);
}
public JsonSchemaProperty? Visit(IField<AssetsFieldProperties> field)
{
var item = schemaResolver("AssetItem", Builder.Guid());
var itemSchema = schemaResolver("AssetItem", SchemaBuilder.Guid());
return Builder.ArrayProperty(item);
return SchemaBuilder.ArrayProperty(itemSchema);
}
public JsonSchemaProperty? Visit(IField<BooleanFieldProperties> field)
{
return Builder.BooleanProperty();
return SchemaBuilder.BooleanProperty();
}
public JsonSchemaProperty? Visit(IField<DateTimeFieldProperties> field)
{
return Builder.DateTimeProperty();
return SchemaBuilder.DateTimeProperty();
}
public JsonSchemaProperty? Visit(IField<GeolocationFieldProperties> field)
{
var geolocationSchema = Builder.Object();
var geolocationSchema = SchemaBuilder.Object();
geolocationSchema.Properties.Add("latitude", new JsonSchemaProperty
{
Type = JsonObjectType.Number,
Minimum = -90,
IsNullableRaw = false,
IsRequired = true,
Maximum = 90,
IsRequired = true
Minimum = -90
});
geolocationSchema.Properties.Add("longitude", new JsonSchemaProperty
{
Type = JsonObjectType.Number,
Minimum = -180,
IsNullableRaw = false,
IsRequired = true,
Maximum = 180,
IsRequired = true
Minimum = -180
});
var reference = schemaResolver("GeolocationDto", geolocationSchema);
return Builder.ObjectProperty(reference);
return SchemaBuilder.ObjectProperty(reference);
}
public JsonSchemaProperty? Visit(IField<JsonFieldProperties> field)
{
return Builder.JsonProperty();
return SchemaBuilder.JsonProperty();
}
public JsonSchemaProperty? Visit(IField<NumberFieldProperties> field)
{
var property = Builder.NumberProperty();
var property = SchemaBuilder.NumberProperty();
if (field.Properties.MinValue.HasValue)
{
@ -111,17 +113,18 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
public JsonSchemaProperty? Visit(IField<ReferencesFieldProperties> field)
{
var item = schemaResolver("ReferenceItem", Builder.Guid());
var itemSchema = schemaResolver("ReferenceItem", SchemaBuilder.Guid());
return Builder.ArrayProperty(item);
return SchemaBuilder.ArrayProperty(itemSchema);
}
public JsonSchemaProperty? Visit(IField<StringFieldProperties> field)
{
var property = Builder.StringProperty();
var property = SchemaBuilder.StringProperty();
property.MinLength = field.Properties.MinLength;
property.MaxLength = field.Properties.MaxLength;
property.MinLength = field.Properties.MinLength;
property.Pattern = field.Properties.Pattern;
if (field.Properties.AllowedValues != null)
{
@ -138,9 +141,9 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
public JsonSchemaProperty? Visit(IField<TagsFieldProperties> field)
{
var item = schemaResolver("ReferenceItem", Builder.String());
var itemSchema = schemaResolver("ReferenceItem", SchemaBuilder.String());
return Builder.ArrayProperty(item);
return SchemaBuilder.ArrayProperty(itemSchema);
}
public JsonSchemaProperty? Visit(IField<UIFieldProperties> field)

16
backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/Builder.cs → backend/src/Squidex.Domain.Apps.Core.Operations/GenerateJsonSchema/SchemaBuilder.cs

@ -9,7 +9,7 @@ using NJsonSchema;
namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
{
public static class Builder
public static class SchemaBuilder
{
public static JsonSchema Object()
{
@ -69,9 +69,21 @@ namespace Squidex.Domain.Apps.Core.GenerateJsonSchema
private static JsonSchemaProperty Enrich(JsonSchemaProperty property, string? description = null, bool isRequired = false)
{
property.Description = description;
property.IsRequired = isRequired;
property.SetRequired(isRequired);
return property;
}
public static void SetRequired(this JsonSchemaProperty property, bool isRequired)
{
if (isRequired)
{
property.IsRequired = true;
}
else
{
property.IsNullableRaw = true;
}
}
}
}

10
backend/src/Squidex/Areas/Api/Controllers/Contents/Generator/SchemaOpenApiGenerator.cs

@ -244,14 +244,8 @@ namespace Squidex.Areas.Api.Controllers.Contents.Generator
{
Properties =
{
["total"] = new JsonSchemaProperty
{
Type = JsonObjectType.Number, IsRequired = true, Description = $"The total number of {schemaName} contents."
},
["items"] = new JsonSchemaProperty
{
Type = JsonObjectType.Array, IsRequired = true, Description = $"The {schemaName} contents.", Item = contentSchema
}
["total"] = SchemaBuilder.NumberProperty($"The total number of {schemaName} contents.", true),
["items"] = SchemaBuilder.ArrayProperty(contentSchema, $"The {schemaName} contents.", true)
},
Type = JsonObjectType.Object
};

4
backend/src/Squidex/Areas/Api/Controllers/Rules/Models/RuleActionProcessor.cs

@ -43,7 +43,9 @@ namespace Squidex.Areas.Api.Controllers.Rules.Models
schema.Properties["actionType"] = new JsonSchemaProperty
{
Type = JsonObjectType.String, IsRequired = true
Type = JsonObjectType.String,
IsRequired = true,
IsNullableRaw = null
};
foreach (var (key, value) in ruleRegistry.Actions)

2
backend/src/Squidex/Areas/Api/Views/Shared/Docs.cshtml

@ -19,7 +19,7 @@
<body>
<div id="redoc-container"></div>
<script src="https://cdn.jsdelivr.net/npm/redoc@next/bundles/redoc.standalone.js"></script>
<script src="https://cdn.jsdelivr.net/npm/redoc@2.0.0-rc.22/bundles/redoc.standalone.js"></script>
<script>
Redoc.init('@Url.Content(Model.Specification)', {
theme: {

2
frontend/app/shared/services/auth.service.ts

@ -24,7 +24,7 @@ export class Profile {
}
public get email(): string {
return this.user.profile['email'];
return this.user.profile['email']!;
}
public get displayName(): string {

2
frontend/app/shared/state/asset-uploader.state.spec.ts

@ -12,6 +12,7 @@ import { IMock, Mock } from 'typemoq';
import {
AssetDto,
AssetsService,
AssetsState,
AssetUploaderState,
DialogService,
ofForever,
@ -21,7 +22,6 @@ import {
import { createAsset } from './../services/assets.service.spec';
import { TestValues } from './_test-helpers';
import { AssetsState } from './assets.state';
describe('AssetUploaderState', () => {
const {

Loading…
Cancel
Save