diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs index 70faa0ef4..e1e6308e6 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetCommandMiddleware.cs @@ -58,7 +58,7 @@ namespace Squidex.Domain.Apps.Entities.Assets try { - var ctx = contextProvider.Context.Clone().WithNoAssetEnrichment(); + var ctx = contextProvider.Context.Clone().WithoutAssetEnrichment(); var existings = await assetQuery.QueryByHashAsync(ctx, createAsset.AppId.Id, createAsset.FileHash); diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetExtensions.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetExtensions.cs index cef6c4ca1..1f4137b04 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetExtensions.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/AssetExtensions.cs @@ -11,12 +11,12 @@ namespace Squidex.Domain.Apps.Entities.Assets { private const string HeaderNoEnrichment = "X-NoAssetEnrichment"; - public static bool IsNoAssetEnrichment(this Context context) + public static bool ShouldEnrichAsset(this Context context) { - return context.Headers.ContainsKey(HeaderNoEnrichment); + return !context.Headers.ContainsKey(HeaderNoEnrichment); } - public static Context WithNoAssetEnrichment(this Context context, bool value = true) + public static Context WithoutAssetEnrichment(this Context context, bool value = true) { if (value) { diff --git a/backend/src/Squidex.Domain.Apps.Entities/Assets/Queries/AssetEnricher.cs b/backend/src/Squidex.Domain.Apps.Entities/Assets/Queries/AssetEnricher.cs index ab7ad8d6f..61b60a9d3 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Assets/Queries/AssetEnricher.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Assets/Queries/AssetEnricher.cs @@ -128,7 +128,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries private static bool ShouldEnrich(Context context) { - return !context.IsNoAssetEnrichment(); + return context.ShouldEnrichAsset(); } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/ContextExtensions.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/ContextExtensions.cs index 7ffaadf48..8d6c3b1f3 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/ContextExtensions.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/ContextExtensions.cs @@ -21,101 +21,67 @@ namespace Squidex.Domain.Apps.Entities.Contents private const string HeaderResolveAssetUrls = "X-Resolve-Urls"; private const string HeaderNoResolveLanguages = "X-NoResolveLanguages"; private const string HeaderNoEnrichment = "X-NoEnrichment"; + private const string HeaderNoCleanup = "X-NoCleanup"; private static readonly char[] Separators = { ',', ';' }; - public static bool IsNoEnrichment(this Context context) + public static bool ShouldCleanup(this Context context) { - return context.Headers.ContainsKey(HeaderNoEnrichment); + return !context.Headers.ContainsKey(HeaderNoCleanup); } - public static Context WithoutContentEnrichment(this Context context, bool value = true) + public static Context WithoutCleanup(this Context context, bool value = true) { - if (value) - { - context.Headers[HeaderNoEnrichment] = "1"; - } - else - { - context.Headers.Remove(HeaderNoEnrichment); - } + return SetBoolean(context, HeaderNoCleanup, value); + } - return context; + public static bool ShouldEnrichContent(this Context context) + { + return !context.Headers.ContainsKey(HeaderNoEnrichment); } - public static bool IsUnpublished(this Context context) + public static Context WithoutContentEnrichment(this Context context, bool value = true) + { + return SetBoolean(context, HeaderNoEnrichment, value); + } + + public static bool ShouldProvideUnpublished(this Context context) { return context.Headers.ContainsKey(HeaderUnpublished); } public static Context WithUnpublished(this Context context, bool value = true) { - if (value) - { - context.Headers[HeaderUnpublished] = "1"; - } - else - { - context.Headers.Remove(HeaderUnpublished); - } - - return context; + return SetBoolean(context, HeaderUnpublished, value); } - public static bool IsFlatten(this Context context) + public static bool ShouldFlatten(this Context context) { return context.Headers.ContainsKey(HeaderFlatten); } public static Context WithFlatten(this Context context, bool value = true) { - if (value) - { - context.Headers[HeaderFlatten] = "1"; - } - else - { - context.Headers.Remove(HeaderFlatten); - } - - return context; + return SetBoolean(context, HeaderFlatten, value); } - public static bool IsResolveFlow(this Context context) + public static bool ShouldResolveFlow(this Context context) { return context.Headers.ContainsKey(HeaderResolveFlow); } public static Context WithResolveFlow(this Context context, bool value = true) { - if (value) - { - context.Headers[HeaderResolveFlow] = "1"; - } - else - { - context.Headers.Remove(HeaderResolveFlow); - } - - return context; + return SetBoolean(context, HeaderResolveFlow, value); } - public static bool IsNoResolveLanguages(this Context context) + public static bool ShouldResolveLanguages(this Context context) { - return context.Headers.ContainsKey(HeaderNoResolveLanguages); + return !context.Headers.ContainsKey(HeaderNoResolveLanguages); } public static Context WithoutResolveLanguages(this Context context, bool value = true) { - if (value) - { - context.Headers[HeaderNoResolveLanguages] = "1"; - } - else - { - context.Headers.Remove(HeaderNoResolveLanguages); - } - - return context; + return SetBoolean(context, HeaderNoResolveLanguages, value); } public static IEnumerable AssetUrls(this Context context) @@ -175,5 +141,19 @@ namespace Squidex.Domain.Apps.Entities.Contents return context; } + + private static Context SetBoolean(Context context, string key, bool value) + { + if (value) + { + context.Headers[key] = "1"; + } + else + { + context.Headers.Remove(key); + } + + return context; + } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentQueryService.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentQueryService.cs index b6fc2faf3..371e2baa6 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentQueryService.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/ContentQueryService.cs @@ -229,7 +229,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries private static Status[]? GetStatus(Context context) { - if (context.IsFrontendClient || context.IsUnpublished()) + if (context.IsFrontendClient || context.ShouldProvideUnpublished()) { return null; } @@ -280,7 +280,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries private static bool WithDraft(Context context) { - return context.IsUnpublished() || context.IsFrontendClient; + return context.ShouldProvideUnpublished() || context.IsFrontendClient; } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ConvertData.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ConvertData.cs index 50c685475..3ed6b485b 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ConvertData.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ConvertData.cs @@ -36,7 +36,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps public async Task EnrichAsync(Context context, IEnumerable contents, ProvideSchema schemas) { - var resolveDataDraft = context.IsUnpublished() || context.IsFrontendClient; + var resolveDataDraft = context.ShouldProvideUnpublished() || context.IsFrontendClient; var referenceCleaner = await CleanReferencesAsync(context, contents, schemas); @@ -67,29 +67,32 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps private async Task CleanReferencesAsync(Context context, IEnumerable contents, ProvideSchema schemas) { - var ids = new HashSet(); - - foreach (var group in contents.GroupBy(x => x.SchemaId.Id)) + if (context.ShouldCleanup()) { - var schema = await schemas(group.Key); + var ids = new HashSet(); - foreach (var content in group) + foreach (var group in contents.GroupBy(x => x.SchemaId.Id)) { - content.Data?.AddReferencedIds(schema.SchemaDef, ids); - content.DataDraft?.AddReferencedIds(schema.SchemaDef, ids); + var schema = await schemas(group.Key); + + foreach (var content in group) + { + content.Data?.AddReferencedIds(schema.SchemaDef, ids); + content.DataDraft?.AddReferencedIds(schema.SchemaDef, ids); + } } - } - if (ids.Count > 0) - { - var taskForAssets = QueryAssetIdsAsync(context, ids); - var taskForContents = QueryContentIdsAsync(context, ids); + if (ids.Count > 0) + { + var taskForAssets = QueryAssetIdsAsync(context, ids); + var taskForContents = QueryContentIdsAsync(context, ids); - await Task.WhenAll(taskForAssets, taskForContents); + await Task.WhenAll(taskForAssets, taskForContents); - var foundIds = new HashSet(taskForAssets.Result.Union(taskForContents.Result)); + var foundIds = new HashSet(taskForAssets.Result.Union(taskForContents.Result)); - return ValueReferencesConverter.CleanReferences(foundIds); + return ValueReferencesConverter.CleanReferences(foundIds); + } } return null; @@ -131,7 +134,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps if (!context.IsFrontendClient) { - if (!context.IsNoResolveLanguages()) + if (context.ShouldResolveLanguages()) { yield return FieldConverters.ResolveFallbackLanguages(context.App.LanguagesConfig); } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/EnrichWithWorkflows.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/EnrichWithWorkflows.cs index a89071812..befc2b142 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/EnrichWithWorkflows.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/EnrichWithWorkflows.cs @@ -76,7 +76,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps private static bool ShouldEnrichWithStatuses(Context context) { - return context.IsFrontendClient || context.IsResolveFlow(); + return context.IsFrontendClient || context.ShouldResolveFlow(); } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs index 4b1b84f04..134e0185e 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveAssets.cs @@ -110,7 +110,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps return EmptyAssets; } - var assets = await assetQuery.QueryAsync(context.Clone().WithNoAssetEnrichment(true), null, Q.Empty.WithIds(ids)); + var assets = await assetQuery.QueryAsync(context.Clone().WithoutAssetEnrichment(true), null, Q.Empty.WithIds(ids)); return assets.ToLookup(x => x.Id); } @@ -125,7 +125,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps private static bool ShouldEnrich(Context context) { - return context.IsFrontendClient && !context.IsNoEnrichment(); + return context.IsFrontendClient && context.ShouldEnrichContent(); } } } diff --git a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveReferences.cs b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveReferences.cs index 03a1ab81b..28fe8ce7e 100644 --- a/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveReferences.cs +++ b/backend/src/Squidex.Domain.Apps.Entities/Contents/Queries/Steps/ResolveReferences.cs @@ -161,7 +161,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries.Steps private static bool ShouldEnrich(Context context) { - return context.IsFrontendClient && !context.IsNoEnrichment(); + return context.IsFrontendClient && context.ShouldEnrichContent(); } } } diff --git a/backend/src/Squidex/Areas/Api/Controllers/Contents/Models/ContentDto.cs b/backend/src/Squidex/Areas/Api/Controllers/Contents/Models/ContentDto.cs index 946f6686e..d80b6f0ce 100644 --- a/backend/src/Squidex/Areas/Api/Controllers/Contents/Models/ContentDto.cs +++ b/backend/src/Squidex/Areas/Api/Controllers/Contents/Models/ContentDto.cs @@ -110,7 +110,7 @@ namespace Squidex.Areas.Api.Controllers.Contents.Models { var response = SimpleMapper.Map(content, new ContentDto()); - if (context.IsFlatten()) + if (context.ShouldFlatten()) { response.Data = content.Data?.ToFlatten(); response.DataDraft = content.DataDraft?.ToFlatten(); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs index 752838dab..90d9951eb 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/AssetCommandMiddlewareTests.cs @@ -69,7 +69,7 @@ namespace Squidex.Domain.Apps.Entities.Assets A.CallTo(() => assetEnricher.EnrichAsync(A.Ignored, requestContext)) .ReturnsLazily(() => SimpleMapper.Map(asset.Snapshot, new AssetEntity())); - A.CallTo(() => assetQuery.QueryByHashAsync(A.That.Matches(x => x.IsNoAssetEnrichment()), AppId, A.Ignored)) + A.CallTo(() => assetQuery.QueryByHashAsync(A.That.Matches(x => x.ShouldEnrichAsset()), AppId, A.Ignored)) .Returns(new List()); A.CallTo(() => grainFactory.GetGrain(Id, null)) @@ -301,7 +301,7 @@ namespace Squidex.Domain.Apps.Entities.Assets FileSize = fileSize }; - A.CallTo(() => assetQuery.QueryByHashAsync(A.That.Matches(x => x.IsNoAssetEnrichment()), A.Ignored, A.Ignored)) + A.CallTo(() => assetQuery.QueryByHashAsync(A.That.Matches(x => x.ShouldEnrichAsset()), A.Ignored, A.Ignored)) .Returns(new List { duplicate }); } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/Queries/AssetEnricherTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/Queries/AssetEnricherTests.cs index d6c1340dd..895dd6041 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/Queries/AssetEnricherTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Assets/Queries/AssetEnricherTests.cs @@ -84,7 +84,7 @@ namespace Squidex.Domain.Apps.Entities.Assets.Queries AppId = appId }; - var result = await sut.EnrichAsync(source, requestContext.Clone().WithNoAssetEnrichment()); + var result = await sut.EnrichAsync(source, requestContext.Clone().WithoutAssetEnrichment()); Assert.Null(result.TagNames); } diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs index 6956424a9..d0b75065f 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveAssetsTests.cs @@ -93,7 +93,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries new[] { document2.Id, image2.Id }) }; - A.CallTo(() => assetQuery.QueryAsync(A.That.Matches(x => x.IsNoAssetEnrichment()), null, A.That.Matches(x => x.Ids.Count == 4))) + A.CallTo(() => assetQuery.QueryAsync(A.That.Matches(x => x.ShouldEnrichAsset()), null, A.That.Matches(x => x.Ids.Count == 4))) .Returns(ResultList.CreateFrom(4, image1, image2, document1, document2)); await sut.EnrichAsync(requestContext, source, schemaProvider); @@ -128,7 +128,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries new[] { document2.Id, image2.Id }) }; - A.CallTo(() => assetQuery.QueryAsync(A.That.Matches(x => x.IsNoAssetEnrichment()), null, A.That.Matches(x => x.Ids.Count == 4))) + A.CallTo(() => assetQuery.QueryAsync(A.That.Matches(x => x.ShouldEnrichAsset()), null, A.That.Matches(x => x.Ids.Count == 4))) .Returns(ResultList.CreateFrom(4, image1, image2, document1, document2)); await sut.EnrichAsync(requestContext, source, schemaProvider); diff --git a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveReferencesTests.cs b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveReferencesTests.cs index 90e5e3235..857251480 100644 --- a/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveReferencesTests.cs +++ b/backend/tests/Squidex.Domain.Apps.Entities.Tests/Contents/Queries/ResolveReferencesTests.cs @@ -142,7 +142,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries CreateContent(new[] { ref1_2.Id }, new[] { ref2_2.Id }) }; - A.CallTo(() => contentQuery.QueryAsync(A.That.Matches(x => x.IsNoEnrichment()), A>.That.Matches(x => x.Count == 4))) + A.CallTo(() => contentQuery.QueryAsync(A.That.Matches(x => x.ShouldEnrichContent()), A>.That.Matches(x => x.Count == 4))) .Returns(ResultList.CreateFrom(4, ref1_1, ref1_2, ref2_1, ref2_2)); await sut.EnrichAsync(requestContext, source, schemaProvider); @@ -194,7 +194,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Queries CreateContent(new[] { ref1_2.Id }, new[] { ref2_1.Id, ref2_2.Id }) }; - A.CallTo(() => contentQuery.QueryAsync(A.That.Matches(x => x.IsNoEnrichment()), A>.That.Matches(x => x.Count == 4))) + A.CallTo(() => contentQuery.QueryAsync(A.That.Matches(x => x.ShouldEnrichContent()), A>.That.Matches(x => x.Count == 4))) .Returns(ResultList.CreateFrom(4, ref1_1, ref1_2, ref2_1, ref2_2)); await sut.EnrichAsync(requestContext, source, schemaProvider);