Ejemplo n.º 1
0
 /// <summary>
 /// Creates a new instance of the <see cref="VersionedAggregate{TState,TCommand,TEvent}"/>
 /// </summary>
 /// <param name="id">Aggregate id.</param>
 /// <param name="commandHandler">Command handler.</param>
 /// <param name="eventHandler">Event handler.</param>
 /// <param name="aggregate">Aggregate.</param>
 public VersionedAggregate(string id, Func <TState, TCommand, TEvent> commandHandler, Func <TState, TEvent, TState> eventHandler,
                           IConcurrentVersions <TState, TEvent> aggregate = null)
 {
     Id             = id;
     CommandHandler = commandHandler;
     EventHandler   = eventHandler;
     Aggregate      = aggregate;
 }
Ejemplo n.º 2
0
        public static IConcurrentVersions <TVersioned, TUpdated> Resolve <TVersioned, TUpdated>(
            this IConcurrentVersions <TVersioned, TUpdated> versions, VectorTime selectedTimestamp)
        {
            var vt = versions.All
                     .Select(x => x.VectorTimestamp)
                     .Aggregate(VectorTime.Zero, (time, vectorTime) => time.Merge(vectorTime));

            var st = versions.All
                     .Select(x => x.SystemTimestamp)
                     .Max();

            return(versions.Resolve(selectedTimestamp, vt, st));
        }
Ejemplo n.º 3
0
        public static IConcurrentVersions <T1, T2> Resolve <T1, T2>(this IConcurrentVersions <T1, T2> versions, VectorTime selectedTimestamp)
        {
            var      vectorTime = VectorTime.Zero;
            DateTime systemTime = default;

            foreach (var versioned in versions.All)
            {
                vectorTime = vectorTime.Merge(versioned.VectorTimestamp);
                systemTime = versioned.SystemTimestamp > systemTime ? versioned.SystemTimestamp : systemTime;
            }

            return(versions.Resolve(selectedTimestamp, vectorTime, systemTime));
        }
Ejemplo n.º 4
0
 public static bool IsConflicting <TVersioned, TUpdated>(this IConcurrentVersions <TVersioned, TUpdated> versions)
 => versions.All.Count() > 1;
Ejemplo n.º 5
0
 protected ConcurrentVersionsSpec()
 {
     this.versions = Create();
 }