Browse Source

Merge branch 'master' into refactoring-no-cqrs

# Conflicts:
#	src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs
#	tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs
pull/206/head
Sebastian Stehle 8 years ago
parent
commit
60cb4d01c3
  1. 21
      src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs
  2. 2
      src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs
  3. 8
      src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs
  4. 9
      src/Squidex.Domain.Apps.Entities.MongoDb/History/MongoHistoryEventRepository.cs
  5. 6
      src/Squidex.Domain.Apps.Entities/Contents/ContentDomainObject.cs
  6. 5
      src/Squidex.Infrastructure/Commands/DomainObjectBase.cs
  7. 4
      tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs
  8. 9
      tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs

21
src/Squidex.Domain.Apps.Core.Model/Contents/ContentData.cs

@ -31,20 +31,25 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
} }
protected static TResult Merge<TResult>(TResult source, TResult target) where TResult : ContentData<T> protected static TResult Merge<TResult>(TResult target, TResult source1, TResult source2) where TResult : ContentData<T>
{ {
if (ReferenceEquals(target, source)) if (ReferenceEquals(source1, source2))
{ {
return source; return source1;
} }
foreach (var otherValue in source) var sources = new[] { source1, source2 };
{
var fieldValue = target.GetOrAdd(otherValue.Key, x => new ContentFieldData());
foreach (var value in otherValue.Value) foreach (var source in sources)
{
foreach (var otherValue in source)
{ {
fieldValue[value.Key] = value.Value; var fieldValue = target.GetOrAdd(otherValue.Key, x => new ContentFieldData());
foreach (var value in otherValue.Value)
{
fieldValue[value.Key] = value.Value;
}
} }
} }

2
src/Squidex.Domain.Apps.Core.Model/Contents/IdContentData.cs

@ -26,7 +26,7 @@ namespace Squidex.Domain.Apps.Core.Contents
public IdContentData MergeInto(IdContentData target) public IdContentData MergeInto(IdContentData target)
{ {
return Merge(this, target); return Merge(new IdContentData(), this, target);
} }
public IdContentData ToCleaned() public IdContentData ToCleaned()

8
src/Squidex.Domain.Apps.Core.Model/Contents/NamedContentData.cs

@ -7,6 +7,7 @@
// ========================================================================== // ==========================================================================
using System; using System;
using System.Collections.Generic;
using Squidex.Infrastructure; using Squidex.Infrastructure;
namespace Squidex.Domain.Apps.Core.Contents namespace Squidex.Domain.Apps.Core.Contents
@ -18,9 +19,14 @@ namespace Squidex.Domain.Apps.Core.Contents
{ {
} }
public NamedContentData(NamedContentData copy)
: base(copy, EqualityComparer<string>.Default)
{
}
public NamedContentData MergeInto(NamedContentData target) public NamedContentData MergeInto(NamedContentData target)
{ {
return Merge(this, target); return Merge(new NamedContentData(), this, target);
} }
public NamedContentData ToCleaned() public NamedContentData ToCleaned()

9
src/Squidex.Domain.Apps.Entities.MongoDb/History/MongoHistoryEventRepository.cs

@ -90,7 +90,14 @@ namespace Squidex.Domain.Apps.Entities.MongoDb.History
entity.AppId = appEvent.AppId.Id; entity.AppId = appEvent.AppId.Id;
entity.Version = @event.Headers.EventStreamNumber(); if (@event.Headers.Contains(CommonHeaders.SnapshotVersion))
{
entity.Version = @event.Headers.SnapshotVersion();
}
else
{
entity.Version = @event.Headers.EventStreamNumber();
}
entity.Channel = message.Channel; entity.Channel = message.Channel;
entity.Message = message.Message; entity.Message = message.Message;

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

@ -71,7 +71,11 @@ namespace Squidex.Domain.Apps.Entities.Contents
if (!newData.Equals(State.Data)) if (!newData.Equals(State.Data))
{ {
RaiseEvent(SimpleMapper.Map(command, new ContentUpdated { Data = newData })); var @event = SimpleMapper.Map(command, new ContentUpdated());
@event.Data = newData;
RaiseEvent(@event);
} }
return this; return this;

5
src/Squidex.Infrastructure/Commands/DomainObjectBase.cs

@ -97,6 +97,11 @@ namespace Squidex.Infrastructure.Commands
{ {
state.Version += events.Length; state.Version += events.Length;
foreach (var @event in events)
{
@event.SetSnapshotVersion(state.Version);
}
await persistence.WriteSnapshotAsync(state); await persistence.WriteSnapshotAsync(state);
try try

4
tests/Squidex.Domain.Apps.Core.Tests/Model/Contents/ContentDataTests.cs

@ -113,6 +113,8 @@ namespace Squidex.Domain.Apps.Core.Model.Contents
var actual = lhs.MergeInto(rhs); var actual = lhs.MergeInto(rhs);
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
Assert.NotSame(expected, rhs);
Assert.NotSame(expected, lhs);
} }
[Fact] [Fact]
@ -152,6 +154,8 @@ namespace Squidex.Domain.Apps.Core.Model.Contents
var actual = lhs.MergeInto(rhs); var actual = lhs.MergeInto(rhs);
Assert.Equal(expected, actual); Assert.Equal(expected, actual);
Assert.NotSame(expected, rhs);
Assert.NotSame(expected, lhs);
} }
[Fact] [Fact]

9
tests/Squidex.Domain.Apps.Entities.Tests/Contents/ContentDomainObjectTests.cs

@ -29,6 +29,7 @@ namespace Squidex.Domain.Apps.Entities.Contents
.AddField("field2", .AddField("field2",
new ContentFieldData() new ContentFieldData()
.AddValue("iv", 2)); .AddValue("iv", 2));
private readonly NamedContentData patched;
private readonly Guid contentId = Guid.NewGuid(); private readonly Guid contentId = Guid.NewGuid();
private readonly ContentDomainObject sut = new ContentDomainObject(); private readonly ContentDomainObject sut = new ContentDomainObject();
@ -37,6 +38,11 @@ namespace Squidex.Domain.Apps.Entities.Contents
get { return contentId; } get { return contentId; }
} }
public ContentDomainObjectTests()
{
patched = otherData.MergeInto(data);
}
[Fact] [Fact]
public void Create_should_throw_exception_if_created() public void Create_should_throw_exception_if_created()
{ {
@ -141,12 +147,13 @@ namespace Squidex.Domain.Apps.Entities.Contents
public void Patch_should_create_events() public void Patch_should_create_events()
{ {
CreateContent(); CreateContent();
UpdateContent();
sut.Patch(CreateContentCommand(new PatchContent { Data = otherData })); sut.Patch(CreateContentCommand(new PatchContent { Data = otherData }));
sut.GetUncomittedEvents() sut.GetUncomittedEvents()
.ShouldHaveSameEvents( .ShouldHaveSameEvents(
CreateContentEvent(new ContentUpdated { Data = otherData }) CreateContentEvent(new ContentUpdated { Data = patched })
); );
} }

Loading…
Cancel
Save