diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs index bf9c7312a..b5f371186 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs @@ -15,7 +15,6 @@ using MongoDB.Driver; using Squidex.Domain.Apps.Entities.Assets; using Squidex.Domain.Apps.Entities.Assets.Edm; using Squidex.Domain.Apps.Entities.Assets.Repositories; -using Squidex.Domain.Apps.Entities.Assets.State; using Squidex.Domain.Apps.Entities.MongoDb.Assets.Visitors; using Squidex.Infrastructure; using Squidex.Infrastructure.MongoDb; @@ -44,7 +43,6 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets .Ascending(x => x.AppId) .Ascending(x => x.IsDeleted) .Ascending(x => x.FileName) - .Ascending(x => x.MimeType) .Descending(x => x.LastModified)); } @@ -71,10 +69,11 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets .Find(Filter.In(x => x.Id, ids)) .SortByDescending(x => x.LastModified); - var assetEntities = await find.ToListAsync(); - var assetCount = await find.CountAsync(); + var assetEntities = find.ToListAsync(); + var assetCount = find.CountAsync(); + await Task.WhenAll(assetEntities, assetCount); - return ResultList.Create(assetEntities.OfType().ToList(), assetCount); + return ResultList.Create(assetEntities.Result.OfType().ToList(), assetCount.Result); } public async Task FindAssetAsync(Guid id) @@ -90,7 +89,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets { try { - var model = modelBuilder.BuildEdmModel(new AssetState()); + var model = modelBuilder.EdmModel; return model.ParseQuery(query); } diff --git a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/Visitors/ConstantVisitor.cs b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/Visitors/ConstantVisitor.cs index e6978a74d..3984c456e 100644 --- a/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/Visitors/ConstantVisitor.cs +++ b/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/Visitors/ConstantVisitor.cs @@ -1,10 +1,10 @@ // ========================================================================== -// ConstantVisitor.cs // Squidex Headless CMS // ========================================================================== -// Copyright (c) Squidex Group -// All rights reserved. +// Copyright (c) Squidex UG (haftungsbeschränkt) +// All rights reserved. Licensed under the MIT license. // ========================================================================== + using System; using Microsoft.OData.Edm; using Microsoft.OData.UriParser; diff --git a/src/Squidex.Domain.Apps.Entities/Assets/Edm/EdmModelBuilder.cs b/src/Squidex.Domain.Apps.Entities/Assets/Edm/EdmModelBuilder.cs index d637c8e3a..61516c68e 100644 --- a/src/Squidex.Domain.Apps.Entities/Assets/Edm/EdmModelBuilder.cs +++ b/src/Squidex.Domain.Apps.Entities/Assets/Edm/EdmModelBuilder.cs @@ -5,57 +5,51 @@ // Copyright (c) Squidex Group // All rights reserved. // ========================================================================== -using Microsoft.Extensions.Caching.Memory; using Microsoft.OData.Edm; -using Squidex.Infrastructure; +using Squidex.Domain.Apps.Entities.Assets.State; namespace Squidex.Domain.Apps.Entities.Assets.Edm { - public class EdmModelBuilder : CachingProviderBase + public class EdmModelBuilder { - public EdmModelBuilder(IMemoryCache cache) - : base(cache) + private readonly IEdmModel edmModel; + public EdmModelBuilder() { + edmModel = BuildEdmModel(); } - public virtual IEdmModel BuildEdmModel(IAssetEntity asset) + public virtual IEdmModel EdmModel { - Guard.NotNull(asset, nameof(asset)); - - var cacheKey = $"Assets_EdmModel"; - - var result = Cache.GetOrCreate(cacheKey, entry => - { - var model = new EdmModel(); - - var container = new EdmEntityContainer("Squidex", "Container"); - - var entityType = new EdmEntityType("Squidex", "Asset"); - entityType.AddStructuralProperty(nameof(asset.Id), EdmPrimitiveTypeKind.Guid); - entityType.AddStructuralProperty(nameof(asset.AppId), EdmPrimitiveTypeKind.Guid); - entityType.AddStructuralProperty(nameof(asset.Created), EdmPrimitiveTypeKind.DateTimeOffset); - entityType.AddStructuralProperty(nameof(asset.CreatedBy), EdmPrimitiveTypeKind.String); - entityType.AddStructuralProperty(nameof(asset.LastModified), EdmPrimitiveTypeKind.DateTimeOffset); - entityType.AddStructuralProperty(nameof(asset.LastModifiedBy), EdmPrimitiveTypeKind.String); - entityType.AddStructuralProperty(nameof(asset.Version), EdmPrimitiveTypeKind.Int64); - - entityType.AddStructuralProperty(nameof(asset.FileName), EdmPrimitiveTypeKind.String); - entityType.AddStructuralProperty(nameof(asset.FileSize), EdmPrimitiveTypeKind.Int64); - entityType.AddStructuralProperty(nameof(asset.FileVersion), EdmPrimitiveTypeKind.Int64); - entityType.AddStructuralProperty(nameof(asset.IsImage), EdmPrimitiveTypeKind.Boolean); - entityType.AddStructuralProperty(nameof(asset.MimeType), EdmPrimitiveTypeKind.String); - entityType.AddStructuralProperty(nameof(asset.PixelHeight), EdmPrimitiveTypeKind.Int32); - entityType.AddStructuralProperty(nameof(asset.PixelWidth), EdmPrimitiveTypeKind.Int32); - - model.AddElement(container); - model.AddElement(entityType); - - container.AddEntitySet("AssetSet", entityType); - - return model; - }); + get { return edmModel; } + } - return result; + private IEdmModel BuildEdmModel() + { + var model = new EdmModel(); + var container = new EdmEntityContainer("Squidex", "Container"); + var entityType = new EdmEntityType("Squidex", "Asset"); + + entityType.AddStructuralProperty(nameof(AssetState.Id), EdmPrimitiveTypeKind.Guid); + entityType.AddStructuralProperty(nameof(AssetState.AppId), EdmPrimitiveTypeKind.Guid); + entityType.AddStructuralProperty(nameof(AssetState.Created), EdmPrimitiveTypeKind.DateTimeOffset); + entityType.AddStructuralProperty(nameof(AssetState.CreatedBy), EdmPrimitiveTypeKind.String); + entityType.AddStructuralProperty(nameof(AssetState.LastModified), EdmPrimitiveTypeKind.DateTimeOffset); + entityType.AddStructuralProperty(nameof(AssetState.LastModifiedBy), EdmPrimitiveTypeKind.String); + entityType.AddStructuralProperty(nameof(AssetState.Version), EdmPrimitiveTypeKind.Int64); + entityType.AddStructuralProperty(nameof(AssetState.FileName), EdmPrimitiveTypeKind.String); + entityType.AddStructuralProperty(nameof(AssetState.FileSize), EdmPrimitiveTypeKind.Int64); + entityType.AddStructuralProperty(nameof(AssetState.FileVersion), EdmPrimitiveTypeKind.Int64); + entityType.AddStructuralProperty(nameof(AssetState.IsImage), EdmPrimitiveTypeKind.Boolean); + entityType.AddStructuralProperty(nameof(AssetState.MimeType), EdmPrimitiveTypeKind.String); + entityType.AddStructuralProperty(nameof(AssetState.PixelHeight), EdmPrimitiveTypeKind.Int32); + entityType.AddStructuralProperty(nameof(AssetState.PixelWidth), EdmPrimitiveTypeKind.Int32); + + model.AddElement(container); + model.AddElement(entityType); + + container.AddEntitySet("AssetSet", entityType); + + return model; } } } diff --git a/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs b/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs index bfb1a0b03..c0bccc485 100644 --- a/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs +++ b/src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs @@ -107,20 +107,7 @@ namespace Squidex.Domain.Apps.Entities.Contents private async Task> QueryAssetsAsync(Guid appId, IEnumerable assetIds) { - StringBuilder sb = new StringBuilder(); - if (assetIds.Count() > 0) - { - sb.Append("$filter="); - - foreach (var assetId in assetIds) - { - sb.Append($"Id eq {assetId} or"); - } - - sb.Remove(sb.Length - 2, 2); - } - - return await assetRepository.QueryAsync(appId, sb.ToString()); + return await assetRepository.QueryAsync(appId, new HashSet(assetIds)); } private async Task> QueryContentsAsync(Guid appId, Guid schemaId, IEnumerable contentIds)