Skip to content

Commit 98d131a

Browse files
author
andrey.leskov
committed
Merge branch 'Events_replay'
# Conflicts: # GridDomain.Logging/DefaultLoggerConfiguration.cs
2 parents c6a3106 + 089fbd8 commit 98d131a

72 files changed

Lines changed: 1339 additions & 54 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

GridDomain.CQRS.Messaging/MessageRouting/IMessagesRouter.cs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,26 @@
11
using System;
22
using System.Collections.Generic;
33
using CommonDomain.Core;
4+
using GridDomain.EventSourcing;
45
using GridDomain.EventSourcing.Sagas;
56
using GridDomain.EventSourcing.Sagas.InstanceSagas;
67

78
namespace GridDomain.CQRS.Messaging.MessageRouting
89
{
910

10-
11+
//class ReplayEnvelop
12+
//{
13+
// public DomainEvent Message;
14+
// public Guid Id;
15+
//}
16+
17+
//public interface IEventsReplayer
18+
//{
19+
// void RegisterHandler<TMessage, THandler>(string correlationField) where THandler : IHandler<TMessage>;
20+
21+
// void RegisterProjectionGroup<T>(T group) where T : IProjectionGroup;
22+
//}
23+
1124
public interface IMessagesRouter
1225
{
1326
[Obsolete("Use RegisterHandler instead")]
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Collections.Generic;
2+
using GridDomain.EventSourcing.VersionedTypeSerialization;
3+
using GridDomain.Tests.EventsUpgrade.Domain.Events;
4+
5+
namespace GridDomain.Tests.Acceptance.EventsUpgrade.SampleDomain
6+
{
7+
class BalanceChangedDomainEventAdapter1 : DomainEventAdapter<BalanceChangedEvent_V0, BalanceChangedEvent_V1>
8+
{
9+
public override IEnumerable<BalanceChangedEvent_V1> ConvertEvent(BalanceChangedEvent_V0 evt)
10+
{
11+
yield return new BalanceChangedEvent_V1(evt.AmplifiedAmountChange, evt.SourceId);
12+
}
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Collections.Generic;
2+
using GridDomain.EventSourcing.VersionedTypeSerialization;
3+
using GridDomain.Tests.EventsUpgrade.Domain;
4+
5+
namespace GridDomain.Tests.EventsUpgrade
6+
{
7+
class DomainEventUpdater1 : DomainEventAdapter<TestEvent, TestEvent_V1>
8+
{
9+
public override IEnumerable<TestEvent_V1> ConvertEvent(TestEvent evt)
10+
{
11+
yield return new TestEvent_V1(evt.SourceId) { Field2 = evt.Field };
12+
}
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System.Collections.Generic;
2+
using GridDomain.EventSourcing.VersionedTypeSerialization;
3+
using GridDomain.Tests.EventsUpgrade.Domain;
4+
5+
namespace GridDomain.Tests.EventsUpgrade
6+
{
7+
class DomainEventUpdater2 : DomainEventAdapter<TestEvent_V1, TestEvent_V2>
8+
{
9+
public override IEnumerable<TestEvent_V2> ConvertEvent(TestEvent_V1 evt)
10+
{
11+
yield return new TestEvent_V2(evt.SourceId) { Field3 = evt.Field2 };
12+
}
13+
}
14+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
using System.Collections.Generic;
2+
using GridDomain.EventSourcing.VersionedTypeSerialization;
3+
using GridDomain.Tests.EventsUpgrade.Domain;
4+
5+
namespace GridDomain.Tests.EventsUpgrade
6+
{
7+
class DomainEventUpdater3 : DomainEventAdapter<TestEvent_V2, TestEvent_V3>
8+
{
9+
public override IEnumerable<TestEvent_V3> ConvertEvent(TestEvent_V2 evt)
10+
{
11+
yield return new TestEvent_V3(evt.SourceId) { Field4 = evt.Field3 };
12+
yield return new TestEvent_V3(evt.SourceId) { Field4 = evt.Field3 };
13+
}
14+
}
15+
}
Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Linq;
4+
using GridDomain.EventSourcing.VersionedTypeSerialization;
5+
using GridDomain.Tests.EventsUpgrade.Domain;
6+
using NUnit.Framework;
7+
8+
namespace GridDomain.Tests.EventsUpgrade
9+
{
10+
[TestFixture]
11+
public class Given_DomainEventUpgradeChain_When_updating_events_split_Tests
12+
{
13+
private IEnumerable<TestEvent_V3> _resultEvent;
14+
private TestEvent_V2 _initialEvent;
15+
16+
[TestFixtureSetUp]
17+
public void When_updating_single_event_Tests()
18+
{
19+
var chain = new EventAdaptersCatalog();
20+
chain.Register(new DomainEventUpdater3());
21+
var balanceAggregate = new BalanceAggregate(Guid.NewGuid(), 10);
22+
_initialEvent = new TestEvent_V2(balanceAggregate.Id);
23+
_resultEvent = chain.Update(_initialEvent).OfType<TestEvent_V3>();
24+
}
25+
26+
[Then]
27+
public void Events_type_was_updated()
28+
{
29+
Assert.IsInstanceOf<TestEvent_V3>(_resultEvent.FirstOrDefault());
30+
}
31+
32+
[Then]
33+
public void All_events_were_produced()
34+
{
35+
Assert.AreEqual(2, _resultEvent.Count());
36+
}
37+
38+
[Then]
39+
public void Event_id_was_remained()
40+
{
41+
Assert.True(_resultEvent.All(e => e.SourceId == _initialEvent.SourceId));
42+
}
43+
}
44+
}
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
using System;
2+
using System.Linq;
3+
using GridDomain.EventSourcing.VersionedTypeSerialization;
4+
using GridDomain.Tests.EventsUpgrade.Domain;
5+
using NUnit.Framework;
6+
7+
namespace GridDomain.Tests.EventsUpgrade
8+
{
9+
[TestFixture]
10+
public class Given_DomainEventUpgradeChain_When_updating_single_event_Tests
11+
{
12+
private TestEvent_V2 _resultEvent;
13+
private TestEvent _initialEvent;
14+
15+
[TestFixtureSetUp]
16+
public void When_updating_single_event_Tests()
17+
{
18+
var chain = new EventAdaptersCatalog();
19+
chain.Register(new DomainEventUpdater1());
20+
chain.Register(new DomainEventUpdater2());
21+
22+
var balanceAggregate = new BalanceAggregate(Guid.NewGuid(), 10);
23+
_initialEvent = new TestEvent(balanceAggregate.Id);
24+
_resultEvent = chain.Update(_initialEvent).FirstOrDefault() as TestEvent_V2;
25+
}
26+
27+
[Then]
28+
public void Event_type_was_updated()
29+
{
30+
Assert.IsInstanceOf<TestEvent_V2>(_resultEvent);
31+
}
32+
33+
[Then]
34+
public void Event_id_was_remained()
35+
{
36+
Assert.AreEqual(_initialEvent.SourceId,_resultEvent.SourceId);
37+
}
38+
39+
[Then]
40+
public void Event_Field_was_remained()
41+
{
42+
Assert.AreEqual(_initialEvent.Field,_resultEvent.Field3);
43+
}
44+
}
45+
}
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
using System;
2+
using GridDomain.EventSourcing.Sagas.FutureEvents;
3+
using GridDomain.Tests.EventsUpgrade.Domain.Events;
4+
5+
namespace GridDomain.Tests.EventsUpgrade.Domain
6+
{
7+
public class BalanceAggregate : Aggregate
8+
{
9+
private BalanceAggregate(Guid id) : base(id)
10+
{
11+
12+
}
13+
14+
public BalanceAggregate(Guid id, decimal value):this(id)
15+
{
16+
RaiseEvent(new AggregateCreatedEvent(value,id));
17+
}
18+
19+
public void ChangeState(int number)
20+
{
21+
RaiseEvent(new BalanceChangedEvent_V1(number, Id));
22+
}
23+
24+
private void Apply(AggregateCreatedEvent e)
25+
{
26+
Id = e.SourceId;
27+
Amount = e.Value;
28+
}
29+
30+
private void Apply(BalanceChangedEvent_V1 e)
31+
{
32+
Amount += e.AmountChange;
33+
}
34+
35+
public decimal Amount;
36+
37+
}
38+
}
Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
using System;
2+
using GridDomain.CQRS.Messaging.MessageRouting;
3+
using GridDomain.Tests.EventsUpgrade.Domain.Commands;
4+
5+
namespace GridDomain.Tests.EventsUpgrade.Domain
6+
{
7+
public class BalanceAggregatesCommandHandler: AggregateCommandsHandler<BalanceAggregate>,
8+
IAggregateCommandsHandlerDesriptor
9+
10+
{
11+
//TODO: refactor to separate class
12+
public static readonly IAggregateCommandsHandlerDesriptor Descriptor = new BalanceAggregatesCommandHandler();
13+
public BalanceAggregatesCommandHandler() : base(null)
14+
{
15+
Map<ChangeBalanceCommand>(c => c.AggregateId,
16+
(c, a) => a.ChangeState(c.Parameter));
17+
18+
Map<CreateBalanceCommand>(c => c.AggregateId,
19+
c => new BalanceAggregate(c.AggregateId, c.Parameter));
20+
}
21+
22+
public Type AggregateType => typeof(BalanceAggregate);
23+
}
24+
}
Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
using GridDomain.CQRS.Messaging;
2+
using GridDomain.CQRS.Messaging.MessageRouting;
3+
using GridDomain.Tests.EventsUpgrade.Domain.Events;
4+
using GridDomain.Tests.EventsUpgrade.Domain.ProjectionBuilders;
5+
6+
namespace GridDomain.Tests.EventsUpgrade.Domain
7+
{
8+
public class BalanceRouteMap : IMessageRouteMap
9+
{
10+
public BalanceRouteMap()
11+
{
12+
}
13+
14+
public void Register(IMessagesRouter router)
15+
{
16+
router.RegisterAggregate(BalanceAggregatesCommandHandler.Descriptor);
17+
router.RegisterHandler<BalanceChangedEvent_V0, SampleProjectionBuilder>(m => m.SourceId);
18+
}
19+
}
20+
}

0 commit comments

Comments
 (0)