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.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<IAssetEntity>().ToList(), assetCount);
return ResultList.Create(assetEntities.Result.OfType<IAssetEntity>().ToList(), assetCount.Result);
}
public async Task<IAssetEntity> 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);
}

6
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;

76
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<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;
});
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;
}
}
}

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)
{
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<Guid>(assetIds));
}
private async Task<IReadOnlyList<Guid>> QueryContentsAsync(Guid appId, Guid schemaId, IEnumerable<Guid> contentIds)

Loading…
Cancel
Save