Browse Source

Remove Edm Builder using cache.

pull/235/head
Derek Begnoche 8 years ago
parent
commit
5c592b63b7
  1. 11
      src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs
  2. 6
      src/Squidex.Domain.Apps.Entities.MongoDb/Assets/Visitors/ConstantVisitor.cs
  3. 76
      src/Squidex.Domain.Apps.Entities/Assets/Edm/EdmModelBuilder.cs
  4. 15
      src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs

11
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;
using Squidex.Domain.Apps.Entities.Assets.Edm; using Squidex.Domain.Apps.Entities.Assets.Edm;
using Squidex.Domain.Apps.Entities.Assets.Repositories; using Squidex.Domain.Apps.Entities.Assets.Repositories;
using Squidex.Domain.Apps.Entities.Assets.State;
using Squidex.Domain.Apps.Entities.MongoDb.Assets.Visitors; using Squidex.Domain.Apps.Entities.MongoDb.Assets.Visitors;
using Squidex.Infrastructure; using Squidex.Infrastructure;
using Squidex.Infrastructure.MongoDb; using Squidex.Infrastructure.MongoDb;
@ -44,7 +43,6 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets
.Ascending(x => x.AppId) .Ascending(x => x.AppId)
.Ascending(x => x.IsDeleted) .Ascending(x => x.IsDeleted)
.Ascending(x => x.FileName) .Ascending(x => x.FileName)
.Ascending(x => x.MimeType)
.Descending(x => x.LastModified)); .Descending(x => x.LastModified));
} }
@ -71,10 +69,11 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets
.Find(Filter.In(x => x.Id, ids)) .Find(Filter.In(x => x.Id, ids))
.SortByDescending(x => x.LastModified); .SortByDescending(x => x.LastModified);
var assetEntities = await find.ToListAsync(); var assetEntities = find.ToListAsync();
var assetCount = await find.CountAsync(); var assetCount = find.CountAsync();
await Task.WhenAll(assetEntities, assetCount);
return ResultList.Create(assetEntities.OfType<IAssetEntity>().ToList(), assetCount); return ResultList.Create(assetEntities.Result.OfType<IAssetEntity>().ToList(), assetCount.Result);
} }
public async Task<IAssetEntity> FindAssetAsync(Guid id) public async Task<IAssetEntity> FindAssetAsync(Guid id)
@ -90,7 +89,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets
{ {
try try
{ {
var model = modelBuilder.BuildEdmModel(new AssetState()); var model = modelBuilder.EdmModel;
return model.ParseQuery(query); return model.ParseQuery(query);
} }

6
src/Squidex.Domain.Apps.Entities.MongoDb/Assets/Visitors/ConstantVisitor.cs

@ -1,10 +1,10 @@
// ========================================================================== // ==========================================================================
// ConstantVisitor.cs
// Squidex Headless CMS // Squidex Headless CMS
// ========================================================================== // ==========================================================================
// Copyright (c) Squidex Group // Copyright (c) Squidex UG (haftungsbeschränkt)
// All rights reserved. // All rights reserved. Licensed under the MIT license.
// ========================================================================== // ==========================================================================
using System; using System;
using Microsoft.OData.Edm; using Microsoft.OData.Edm;
using Microsoft.OData.UriParser; using Microsoft.OData.UriParser;

76
src/Squidex.Domain.Apps.Entities/Assets/Edm/EdmModelBuilder.cs

@ -5,57 +5,51 @@
// Copyright (c) Squidex Group // Copyright (c) Squidex Group
// All rights reserved. // All rights reserved.
// ========================================================================== // ==========================================================================
using Microsoft.Extensions.Caching.Memory;
using Microsoft.OData.Edm; using Microsoft.OData.Edm;
using Squidex.Infrastructure; using Squidex.Domain.Apps.Entities.Assets.State;
namespace Squidex.Domain.Apps.Entities.Assets.Edm namespace Squidex.Domain.Apps.Entities.Assets.Edm
{ {
public class EdmModelBuilder : CachingProviderBase public class EdmModelBuilder
{ {
public EdmModelBuilder(IMemoryCache cache) private readonly IEdmModel edmModel;
: base(cache) public EdmModelBuilder()
{ {
edmModel = BuildEdmModel();
} }
public virtual IEdmModel BuildEdmModel(IAssetEntity asset) public virtual IEdmModel EdmModel
{ {
Guard.NotNull(asset, nameof(asset)); get { return edmModel; }
}
var cacheKey = $"Assets_EdmModel";
var result = Cache.GetOrCreate<IEdmModel>(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;
});
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;
} }
} }
} }

15
src/Squidex.Domain.Apps.Entities/Contents/ContentOperationContext.cs

@ -107,20 +107,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
private async Task<IReadOnlyList<IAssetInfo>> QueryAssetsAsync(Guid appId, IEnumerable<Guid> assetIds) private async Task<IReadOnlyList<IAssetInfo>> QueryAssetsAsync(Guid appId, IEnumerable<Guid> assetIds)
{ {
StringBuilder sb = new StringBuilder(); return await assetRepository.QueryAsync(appId, new HashSet<Guid>(assetIds));
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());
} }
private async Task<IReadOnlyList<Guid>> QueryContentsAsync(Guid appId, Guid schemaId, IEnumerable<Guid> contentIds) private async Task<IReadOnlyList<Guid>> QueryContentsAsync(Guid appId, Guid schemaId, IEnumerable<Guid> contentIds)

Loading…
Cancel
Save