diff --git a/backend/src/Squidex.Domain.Apps.Core.Model/Contents/GeoJsonValue.cs b/backend/src/Squidex.Domain.Apps.Core.Model/Contents/GeoJsonValue.cs index 55f2434c9..f67fdb192 100644 --- a/backend/src/Squidex.Domain.Apps.Core.Model/Contents/GeoJsonValue.cs +++ b/backend/src/Squidex.Domain.Apps.Core.Model/Contents/GeoJsonValue.cs @@ -17,47 +17,62 @@ namespace Squidex.Domain.Apps.Core.Contents { public static class GeoJsonValue { - public static GeoJsonParseResult TryParse(IJsonValue value, IJsonSerializer serializer, out GeoJSONObject geoJSON) + public static GeoJsonParseResult TryParse(IJsonValue value, IJsonSerializer serializer, out GeoJSONObject? geoJSON) { Guard.NotNull(serializer, nameof(serializer)); Guard.NotNull(value, nameof(value)); geoJSON = null!; - if (value is JsonObject geoObject) + if (value is JsonObject obj) { - try + if (TryParseGeoJson(obj, serializer, out geoJSON)) { - using (var stream = DefaultPools.MemoryStream.GetStream()) - { - serializer.Serialize(value, stream, true); - - stream.Position = 0; + return GeoJsonParseResult.Success; + } - geoJSON = serializer.Deserialize(stream, null, true); + if (!obj.TryGetValue("latitude", out var lat) || !lat.Value.IsBetween(-90, 90)) + { + return GeoJsonParseResult.InvalidLatitude; + } - return GeoJsonParseResult.Success; - } + if (!obj.TryGetValue("longitude", out var lon) || !lon.Value.IsBetween(-180, 180)) + { + return GeoJsonParseResult.InvalidLongitude; } - catch + + geoJSON = new Point(new Position(lat.Value, lon.Value)); + } + + return GeoJsonParseResult.InvalidValue; + } + + private static bool TryParseGeoJson(JsonObject obj, IJsonSerializer serializer, out GeoJSONObject? geoJSON) + { + geoJSON = null; + + if (!obj.TryGetValue("type", out var type) || type is not JsonString) + { + return false; + } + + try + { + using (var stream = DefaultPools.MemoryStream.GetStream()) { - if (!geoObject.TryGetValue("latitude", out var lat) || !lat.Value.IsBetween(-90, 90)) - { - return GeoJsonParseResult.InvalidLatitude; - } + serializer.Serialize(obj, stream, true); - if (!geoObject.TryGetValue("longitude", out var lon) || !lon.Value.IsBetween(-180, 180)) - { - return GeoJsonParseResult.InvalidLongitude; - } + stream.Position = 0; - geoJSON = new Point(new Position(lat.Value, lon.Value)); + geoJSON = serializer.Deserialize(stream, null, true); - return GeoJsonParseResult.Success; + return true; } } - - return GeoJsonParseResult.InvalidValue; + catch + { + return false; + } } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/AssetDomainObject.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/AssetDomainObject.cs index 2f051a7b7..5462541af 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/AssetDomainObject.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/DomainObject/AssetDomainObject.cs @@ -24,12 +24,13 @@ namespace Squidex.Domain.Apps.Entities.Assets.DomainObject { private readonly IServiceProvider serviceProvider; - public AssetDomainObject(IPersistenceFactory factory, ISemanticLog log, + public AssetDomainObject(IPersistenceFactory factory, ISemanticLog log, IServiceProvider serviceProvider) : base(factory, log) { - Capacity = int.MaxValue; this.serviceProvider = serviceProvider; + + Capacity = 2; } protected override bool IsDeleted() diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs index 3c17cbd99..064078c12 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/DomainObject/ContentDomainObject.cs @@ -35,7 +35,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.DomainObject { this.serviceProvider = serviceProvider; - Capacity = int.MaxValue; + Capacity = 5; } protected override bool IsDeleted() diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Extensions.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Extensions.cs index 68065f505..4d8dd7942 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Extensions.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Text/Extensions.cs @@ -27,7 +27,9 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text { foreach (var (key, jsonValue) in value) { - if (GeoJsonValue.TryParse(jsonValue, jsonSerializer, out var geoJson) == GeoJsonParseResult.Success) + GeoJsonValue.TryParse(jsonValue, jsonSerializer, out var geoJson); + + if (geoJson != null) { result ??= new Dictionary(); result[$"{field}.{key}"] = geoJson; diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs index d768427e1..a504dae7a 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/ContentsController.cs @@ -23,7 +23,7 @@ using Squidex.Web.GraphQL; namespace Squidex.Areas.Api.Controllers.Contents { - [SchemaMustBePublishedAttribute] + [SchemaMustBePublished] public sealed class ContentsController : ApiController { private readonly IContentQueryService contentQuery; diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/LoginModel.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/LoginModel.cs index 27301bc70..8e0634cc7 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/LoginModel.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Account/LoginModel.cs @@ -14,7 +14,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Account [LocalizedRequired] public string Email { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string Password { get; set; } } } diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangePasswordModel.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangePasswordModel.cs index 51da9ffa3..9c8e64951 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangePasswordModel.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangePasswordModel.cs @@ -14,7 +14,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [LocalizedRequired] public string OldPassword { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string Password { get; set; } [LocalizedCompare(nameof(Password))] diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangeProfileModel.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangeProfileModel.cs index 62b0234cb..a72b5d624 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangeProfileModel.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/ChangeProfileModel.cs @@ -15,7 +15,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [LocalizedRequired] public string Email { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string DisplayName { get; set; } public bool IsHidden { get; set; } diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/RemoveLoginModel.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/RemoveLoginModel.cs index f08283b7b..e29b6e88a 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/RemoveLoginModel.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/RemoveLoginModel.cs @@ -14,7 +14,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [LocalizedRequired] public string LoginProvider { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string ProviderKey { get; set; } } } diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/SetPasswordModel.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/SetPasswordModel.cs index 7c07e055a..15a5650be 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/SetPasswordModel.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/SetPasswordModel.cs @@ -14,7 +14,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [LocalizedRequired] public string Password { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string PasswordConfirm { get; set; } } } diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/UserProperty.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/UserProperty.cs index e97f26117..62493f72f 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/UserProperty.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Profile/UserProperty.cs @@ -14,7 +14,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Profile [LocalizedRequired] public string Name { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string Value { get; set; } public (string Name, string Value) ToTuple() diff --git a/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/CreateUserModel.cs b/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/CreateUserModel.cs index db1c3c7fb..857b525ac 100644 --- a/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/CreateUserModel.cs +++ b/backend/src/Squidex/Areas/IdentityServer/Controllers/Setup/CreateUserModel.cs @@ -17,7 +17,7 @@ namespace Squidex.Areas.IdentityServer.Controllers.Setup [LocalizedRequired] public string Password { get; set; } - [LocalizedRequiredAttribute] + [LocalizedRequired] public string PasswordConfirm { get; set; } } } diff --git a/frontend/app/shared/components/schema-category.component.scss b/frontend/app/shared/components/schema-category.component.scss index 6ebdf2771..50dd89380 100644 --- a/frontend/app/shared/components/schema-category.component.scss +++ b/frontend/app/shared/components/schema-category.component.scss @@ -77,7 +77,7 @@ $drag-margin: -8px; :host { &:first-child { .nav-light { - margin-top: 1rem; + margin-top: 0; } } }