Browse Source

Improve field.

pull/613/head
Sebastian 5 years ago
parent
commit
ee3287fe68
  1. 4
      backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetFolderRepository.cs
  2. 8
      backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs
  3. 12
      backend/src/Squidex.Domain.Apps.Entities.MongoDb/FullText/MongoTextIndex.cs
  4. 22
      backend/src/Squidex.Infrastructure.MongoDb/MongoDb/Field.cs
  5. 14
      backend/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs
  6. 49
      backend/tests/Squidex.Infrastructure.Tests/MongoDb/FieldTests.cs

4
backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetFolderRepository.cs

@ -66,7 +66,9 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets
await Collection.Find(filter).Only(x => x.Id)
.ToListAsync();
return assetFolderEntities.Select(x => DomainId.Create(x[Fields.AssetFolderId].AsString)).ToList();
var field = Field.Of<MongoAssetFolderEntity>(x => nameof(x.Id));
return assetFolderEntities.Select(x => DomainId.Create(x[field].AsString)).ToList();
}
}

8
backend/src/Squidex.Domain.Apps.Entities.MongoDb/Assets/MongoAssetRepository.cs

@ -141,7 +141,9 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets
await Collection.Find(BuildFilter(appId, ids)).Only(x => x.Id)
.ToListAsync();
return assetEntities.Select(x => DomainId.Create(x[Fields.AssetId].AsString)).ToList();
var field = Field.Of<MongoAssetFolderEntity>(x => nameof(x.Id));
return assetEntities.Select(x => DomainId.Create(x[field].AsString)).ToList();
}
}
@ -153,7 +155,9 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Assets
await Collection.Find(x => x.IndexedAppId == appId && !x.IsDeleted && x.ParentId == parentId).Only(x => x.Id)
.ToListAsync();
return assetEntities.Select(x => DomainId.Create(x[Fields.AssetId].AsString)).ToList();
var field = Field.Of<MongoAssetFolderEntity>(x => nameof(x.Id));
return assetEntities.Select(x => DomainId.Create(x[field].AsString)).ToList();
}
}

12
backend/src/Squidex.Domain.Apps.Entities.MongoDb/FullText/MongoTextIndex.cs

@ -132,10 +132,12 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.FullText
Filter.In(x => x.SchemaId, filter.SchemaIds),
Filter_ByScope(scope),
Filter.Text(queryText, "none")))
.Only(x => x.ContentId).Limit(limit)
.Limit(limit).Only(x => x.ContentId)
.ToListAsync();
return bySchema.Select(x => DomainId.Create(x["_ci"].AsString)).Distinct().ToList();
var field = Field.Of<MongoTextIndexEntity>(x => nameof(x.ContentId));
return bySchema.Select(x => DomainId.Create(x[field].AsString)).Distinct().ToList();
}
private async Task<List<DomainId>> SearchByAppAsync(string queryText, IAppEntity app, SearchScope scope, int limit)
@ -147,10 +149,12 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.FullText
Filter.Exists(x => x.SchemaId),
Filter_ByScope(scope),
Filter.Text(queryText, "none")))
.Only(x => x.ContentId).Limit(limit)
.Limit(limit).Only(x => x.ContentId)
.ToListAsync();
return bySchema.Select(x => DomainId.Create(x["_ci"].AsString)).Distinct().ToList();
var field = Field.Of<MongoTextIndexEntity>(x => nameof(x.ContentId));
return bySchema.Select(x => DomainId.Create(x[field].AsString)).Distinct().ToList();
}
private static FilterDefinition<MongoTextIndexEntity> Filter_ByScope(SearchScope scope)

22
backend/src/Squidex.Infrastructure.MongoDb/MongoDb/Field.cs

@ -0,0 +1,22 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using System;
using MongoDB.Bson.Serialization;
namespace Squidex.Infrastructure.MongoDb
{
public static class Field
{
public static string Of<T>(Func<T, string> mapper)
{
var name = mapper(default!);
return BsonClassMap.LookupClassMap(typeof(T)).GetMemberMap(name).ElementName;
}
}
}

14
backend/src/Squidex.Infrastructure.MongoDb/MongoDb/MongoExtensions.cs

@ -120,9 +120,9 @@ namespace Squidex.Infrastructure.MongoDb
if (existingVersion != null)
{
var versionField = GetVersionField<T, TKey>();
var field = Field.Of<T>(x => nameof(x.Version));
throw new InconsistentStateException(existingVersion[versionField].AsInt64, oldVersion, ex);
throw new InconsistentStateException(existingVersion[field].AsInt64, oldVersion, ex);
}
else
{
@ -156,9 +156,9 @@ namespace Squidex.Infrastructure.MongoDb
if (existingVersion != null)
{
var versionField = GetVersionField<T, TKey>();
var field = Field.Of<T>(x => nameof(x.Version));
throw new InconsistentStateException(existingVersion[versionField].AsInt64, oldVersion, ex);
throw new InconsistentStateException(existingVersion[field].AsInt64, oldVersion, ex);
}
else
{
@ -167,12 +167,6 @@ namespace Squidex.Infrastructure.MongoDb
}
}
private static string GetVersionField<T, TKey>()
where T : IVersionedEntity<TKey> where TKey : notnull
{
return BsonClassMap.LookupClassMap(typeof(T)).GetMemberMap(nameof(IVersionedEntity<TKey>.Version)).ElementName;
}
public static async Task ForEachPipedAsync<T>(this IAsyncCursorSource<T> source, Func<T, Task> processor, CancellationToken cancellationToken = default)
{
using (var cursor = await source.ToCursorAsync(cancellationToken))

49
backend/tests/Squidex.Infrastructure.Tests/MongoDb/FieldTests.cs

@ -0,0 +1,49 @@
// ==========================================================================
// Squidex Headless CMS
// ==========================================================================
// Copyright (c) Squidex UG (haftungsbeschraenkt)
// All rights reserved. Licensed under the MIT license.
// ==========================================================================
using MongoDB.Bson.Serialization.Attributes;
using Xunit;
namespace Squidex.Infrastructure.MongoDb
{
public class FieldTests
{
public sealed class Entity
{
public string Id { get; set; }
public string Default { get; set; }
[BsonElement("_c")]
public string Custom { get; set; }
}
[Fact]
public void Should_resolve_id_field()
{
var name = Field.Of<Entity>(x => nameof(x.Id));
Assert.Equal("_id", name);
}
[Fact]
public void Should_resolve_default_field()
{
var name = Field.Of<Entity>(x => nameof(x.Default));
Assert.Equal("Default", name);
}
[Fact]
public void Should_resolve_custom_field()
{
var name = Field.Of<Entity>(x => nameof(x.Custom));
Assert.Equal("_c", name);
}
}
}
Loading…
Cancel
Save