Browse Source

Mongo Queries fixed

pull/206/head
Sebastian Stehle 8 years ago
parent
commit
03a5fbe09b
  1. 3
      src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentEntity.cs
  2. 25
      src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs
  3. 3
      src/Squidex.Domain.Apps.Entities/Apps/State/AppState.cs
  4. 4
      src/Squidex.Domain.Apps.Entities/Contents/QueryContext.cs
  5. 4
      src/Squidex.Domain.Apps.Entities/Contents/State/ContentState.cs
  6. 2
      src/Squidex/Areas/Api/Controllers/Content/ContentsController.cs
  7. 1
      src/Squidex/Config/Domain/WriteServices.cs

3
src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentEntity.cs

@ -85,7 +85,8 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
[BsonJson]
public IdContentData DataByIds { get; set; }
NamedContentData IContentEntity.Data
[BsonIgnore]
public NamedContentData Data
{
get { return data; }
}

25
src/Squidex.Domain.Apps.Entities.MongoDb/Contents/MongoContentRepository.cs

@ -50,6 +50,11 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
protected override async Task SetupCollectionAsync(IMongoCollection<MongoContentEntity> collection)
{
await collection.Indexes.CreateOneAsync(
Index
.Ascending(x => x.Id)
.Ascending(x => x.Version));
await collection.Indexes.CreateOneAsync(
Index
.Ascending(x => x.Id)
@ -84,12 +89,15 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
DocumentId = documentId,
DataText = idData?.ToFullText(),
DataByIds = idData,
IsLatest = true,
ReferencedIds = idData?.ToReferencedIds(schema.SchemaDef),
});
try
{
await Collection.InsertOneAsync(document);
await Collection.UpdateManyAsync(x => x.Id == value.Id && x.Version < value.Version, Update.Set(x => x.IsLatest, false));
}
catch (MongoWriteException ex)
{
@ -115,13 +123,22 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
{
var id = Guid.Parse(key);
var existing =
var contentEntity =
await Collection.Find(x => x.Id == id && x.IsLatest)
.FirstOrDefaultAsync();
if (existing != null)
if (contentEntity != null)
{
return (SimpleMapper.Map(existing, new ContentState()), existing.Version);
var schema = await appProvider.GetSchemaAsync(contentEntity.AppId, contentEntity.SchemaId);
if (schema == null)
{
throw new InvalidOperationException($"Cannot find schema {contentEntity.SchemaId}");
}
contentEntity?.ParseData(schema.SchemaDef);
return (SimpleMapper.Map(contentEntity, new ContentState()), contentEntity.Version);
}
return (null, EtagVersion.NotFound);
@ -212,7 +229,7 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.Contents
public async Task<IContentEntity> FindContentAsync(IAppEntity app, ISchemaEntity schema, Guid id, long version)
{
var contentEntity =
await Collection.Find(x => x.Id == id && x.Version == version)
await Collection.Find(x => x.Id == id && x.Version >= version).SortBy(x => x.Version)
.FirstOrDefaultAsync();
contentEntity?.ParseData(schema.SchemaDef);

3
src/Squidex.Domain.Apps.Entities/Apps/State/AppState.cs

@ -17,7 +17,8 @@ using Squidex.Infrastructure.Reflection;
namespace Squidex.Domain.Apps.Entities.Apps.State
{
public class AppState : DomainObjectState<AppState>, IAppEntity
public class AppState : DomainObjectState<AppState>,
IAppEntity
{
private static readonly LanguagesConfig English = LanguagesConfig.Build(Language.EN);

4
src/Squidex.Domain.Apps.Entities/Contents/QueryContext.cs

@ -121,7 +121,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
}
}
return ids.Select(id => cachedAssets.GetOrDefault(id)).Where(x => x != null).ToList();
return ids.Select(cachedAssets.GetOrDefault).Where(x => x != null).ToList();
}
public async Task<IReadOnlyList<IContentEntity>> GetReferencedContentsAsync(Guid schemaId, ICollection<Guid> ids)
@ -140,7 +140,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
}
}
return ids.Select(id => cachedContents.GetOrDefault(id)).Where(x => x != null).ToList();
return ids.Select(cachedContents.GetOrDefault).Where(x => x != null).ToList();
}
}
}

4
src/Squidex.Domain.Apps.Entities/Contents/State/ContentState.cs

@ -16,7 +16,9 @@ using Squidex.Infrastructure.EventSourcing;
namespace Squidex.Domain.Apps.Entities.Contents.State
{
public class ContentState : DomainObjectState<ContentState>, IContentEntity
public class ContentState : DomainObjectState<ContentState>,
IContentEntity,
IUpdateableEntityWithAppRef
{
[JsonProperty]
public NamedContentData Data { get; set; }

2
src/Squidex/Areas/Api/Controllers/Content/ContentsController.cs

@ -151,7 +151,7 @@ namespace Squidex.Areas.Api.Controllers.Contents
Response.Headers["ETag"] = new StringValues(version.ToString());
return Ok(response);
return Ok(response.Data);
}
[MustBeAppEditor]

1
src/Squidex/Config/Domain/WriteServices.cs

@ -13,7 +13,6 @@ using Squidex.Domain.Apps.Entities.Assets;
using Squidex.Domain.Apps.Entities.Contents;
using Squidex.Domain.Apps.Entities.Rules;
using Squidex.Domain.Apps.Entities.Schemas;
using Squidex.Domain.Apps.Entities.State.SchemaDefs;
using Squidex.Domain.Users;
using Squidex.Infrastructure.Commands;
using Squidex.Pipeline.CommandMiddlewares;

Loading…
Cancel
Save