Browse Source

Bugfixes.

pull/351/head
Sebastian Stehle 8 years ago
parent
commit
15ba7ee3ae
  1. 6
      src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs
  2. 28
      src/Squidex.Domain.Apps.Entities/Contents/Text/GrainTextIndexer.cs
  3. 3
      src/Squidex.Domain.Apps.Entities/Contents/Text/ITextIndexer.cs
  4. 2
      src/Squidex.Domain.Apps.Entities/Contents/Text/IndexData.cs
  5. 14
      src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexContent.cs
  6. 4
      src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexerGrain.cs
  7. 3
      src/Squidex/Config/Domain/StoreServices.cs
  8. 16
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/GrainTextIndexerTests.cs

6
src/Squidex.Domain.Apps.Entities/Contents/ContentQueryService.cs

@ -212,10 +212,14 @@ namespace Squidex.Domain.Apps.Entities.Contents
result.Data = result.Data.ConvertName2Name(schema.SchemaDef, converters); result.Data = result.Data.ConvertName2Name(schema.SchemaDef, converters);
} }
if (result.DataDraft != null) if (result.DataDraft != null && (context.Unpublished || context.IsFrontendClient))
{ {
result.DataDraft = result.DataDraft.ConvertName2Name(schema.SchemaDef, converters); result.DataDraft = result.DataDraft.ConvertName2Name(schema.SchemaDef, converters);
} }
else
{
result.DataDraft = null;
}
yield return result; yield return result;
} }

28
src/Squidex.Domain.Apps.Entities/Contents/Text/GrainTextIndexer.cs

@ -46,11 +46,35 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
this.log = log; this.log = log;
} }
public bool Handles(StoredEvent @event)
{
return true;
}
public Task ClearAsync() public Task ClearAsync()
{ {
return Task.CompletedTask; return Task.CompletedTask;
} }
public async Task IndexAsync(Guid schemaId, Guid id, NamedContentData data, NamedContentData dataDraft)
{
var index = grainFactory.GetGrain<ITextIndexerGrain>(schemaId);
using (Profiler.TraceMethod<GrainTextIndexer>())
{
try
{
await index.IndexAsync(id, new IndexData { Data = data, DataDraft = dataDraft }, false);
}
catch (Exception ex)
{
log.LogError(ex, w => w
.WriteProperty("action", "UpdateTextEntry")
.WriteProperty("status", "Failed"));
}
}
}
public async Task On(Envelope<IEvent> @event) public async Task On(Envelope<IEvent> @event)
{ {
try try
@ -75,10 +99,10 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
case ContentUpdated contentUpdated: case ContentUpdated contentUpdated:
await index.IndexAsync(id, Data(contentUpdated.Data), false); await index.IndexAsync(id, Data(contentUpdated.Data), false);
break; break;
case ContentChangesPublished contentChangesPublished: case ContentChangesDiscarded contentChangesDiscarded:
await index.CopyAsync(id, false); await index.CopyAsync(id, false);
break; break;
case ContentChangesDiscarded contentChangesDiscarded: case ContentChangesPublished contentChangesPublished:
case ContentStatusChanged contentStatusChanged when contentStatusChanged.Status == Status.Published: case ContentStatusChanged contentStatusChanged when contentStatusChanged.Status == Status.Published:
await index.CopyAsync(id, true); await index.CopyAsync(id, true);
break; break;

3
src/Squidex.Domain.Apps.Entities/Contents/Text/ITextIndexer.cs

@ -8,12 +8,15 @@
using System; using System;
using System.Collections.Generic; using System.Collections.Generic;
using System.Threading.Tasks; using System.Threading.Tasks;
using Squidex.Domain.Apps.Core.Contents;
using Squidex.Domain.Apps.Entities.Apps; using Squidex.Domain.Apps.Entities.Apps;
namespace Squidex.Domain.Apps.Entities.Contents.Text namespace Squidex.Domain.Apps.Entities.Contents.Text
{ {
public interface ITextIndexer public interface ITextIndexer
{ {
Task IndexAsync(Guid schemaId, Guid contentId, NamedContentData draftData, NamedContentData data);
Task<List<Guid>> SearchAsync(string queryText, IAppEntity app, Guid schemaId, bool useDraft = false); Task<List<Guid>> SearchAsync(string queryText, IAppEntity app, Guid schemaId, bool useDraft = false);
} }
} }

2
src/Squidex.Domain.Apps.Entities/Contents/Text/IndexData.cs

@ -12,5 +12,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
public sealed class IndexData public sealed class IndexData
{ {
public NamedContentData Data { get; set; } public NamedContentData Data { get; set; }
public NamedContentData DataDraft { get; set; }
} }
} }

14
src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexContent.cs

@ -77,7 +77,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
return true; return true;
} }
public void Index(NamedContentData data, bool onlyDraft) public void Index(NamedContentData data, NamedContentData dataDraft, bool onlyDraft)
{ {
var converted = CreateDocument(data); var converted = CreateDocument(data);
@ -85,7 +85,13 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
var existing = GetDocument(1); var existing = GetDocument(1);
if (IsForPublished(existing)) if (dataDraft != null)
{
converted = CreateDocument(dataDraft);
Upsert(converted, 0, 0, 1);
}
else if (IsForPublished(existing))
{ {
Upsert(converted, 0, 0, 1); Upsert(converted, 0, 0, 1);
} }
@ -109,8 +115,8 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
{ {
if (fromDraft) if (fromDraft)
{ {
Update(1, 1, 0); Update(1, 0, 0);
Update(0, 0, 1); Update(0, 1, 1);
} }
else else
{ {

4
src/Squidex.Domain.Apps.Entities/Contents/Text/TextIndexerGrain.cs

@ -29,7 +29,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
private const LuceneVersion Version = LuceneVersion.LUCENE_48; private const LuceneVersion Version = LuceneVersion.LUCENE_48;
private const int MaxResults = 2000; private const int MaxResults = 2000;
private const int MaxUpdates = 100; private const int MaxUpdates = 100;
private static readonly TimeSpan CommitDelay = TimeSpan.FromSeconds(30); private static readonly TimeSpan CommitDelay = TimeSpan.FromSeconds(10);
private static readonly Analyzer Analyzer = new MultiLanguageAnalyzer(Version); private static readonly Analyzer Analyzer = new MultiLanguageAnalyzer(Version);
private static readonly string[] Invariant = { InvariantPartitioning.Instance.Master.Key }; private static readonly string[] Invariant = { InvariantPartitioning.Instance.Master.Key };
private readonly SnapshotDeletionPolicy snapshotter = new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy()); private readonly SnapshotDeletionPolicy snapshotter = new SnapshotDeletionPolicy(new KeepOnlyLastCommitDeletionPolicy());
@ -90,7 +90,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
{ {
var content = new TextIndexContent(indexWriter, indexSearcher, id); var content = new TextIndexContent(indexWriter, indexSearcher, id);
content.Index(data.Value.Data, onlyDraft); content.Index(data.Value.Data, data.Value.DataDraft, onlyDraft);
return TryFlushAsync(); return TryFlushAsync();
} }

3
src/Squidex/Config/Domain/StoreServices.cs

@ -107,7 +107,8 @@ namespace Squidex.Config.Domain
c.GetRequiredService<IMongoClient>().GetDatabase(mongoContentDatabaseName), c.GetRequiredService<IMongoClient>().GetDatabase(mongoContentDatabaseName),
c.GetRequiredService<IAppProvider>(), c.GetRequiredService<IAppProvider>(),
c.GetRequiredService<IJsonSerializer>(), c.GetRequiredService<IJsonSerializer>(),
c.GetRequiredService<ITextIndexer>())) c.GetRequiredService<ITextIndexer>(),
c.GetRequiredService<TypeNameRegistry>()))
.AsOptional<IContentRepository>() .AsOptional<IContentRepository>()
.AsOptional<ISnapshotStore<ContentState, Guid>>() .AsOptional<ISnapshotStore<ContentState, Guid>>()
.AsOptional<IEventConsumer>(); .AsOptional<IEventConsumer>();

16
tests/Squidex.Domain.Apps.Entities.Tests/Contents/Text/GrainTextIndexerTests.cs

@ -38,6 +38,18 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
sut = new GrainTextIndexer(grainFactory, A.Fake<ISemanticLog>()); sut = new GrainTextIndexer(grainFactory, A.Fake<ISemanticLog>());
} }
[Fact]
public async Task Should_call_grain_when_indexing_data()
{
var data = new NamedContentData();
var dataDraft = new NamedContentData();
await sut.IndexAsync(schemaId, contentId, data, dataDraft);
A.CallTo(() => grain.IndexAsync(contentId, A<J<IndexData>>.That.Matches(x => x.Value.Data == data && x.Value.DataDraft == dataDraft), false))
.MustHaveHappened();
}
[Fact] [Fact]
public async Task Should_call_grain_when_content_deleted() public async Task Should_call_grain_when_content_deleted()
{ {
@ -87,7 +99,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
await sut.On(E(new ContentChangesPublished())); await sut.On(E(new ContentChangesPublished()));
A.CallTo(() => grain.CopyAsync(contentId, false)) A.CallTo(() => grain.CopyAsync(contentId, true))
.MustHaveHappened(); .MustHaveHappened();
} }
@ -98,7 +110,7 @@ namespace Squidex.Domain.Apps.Entities.Contents.Text
await sut.On(E(new ContentChangesDiscarded())); await sut.On(E(new ContentChangesDiscarded()));
A.CallTo(() => grain.CopyAsync(contentId, true)) A.CallTo(() => grain.CopyAsync(contentId, false))
.MustHaveHappened(); .MustHaveHappened();
} }

Loading…
Cancel
Save