Exemplo n.º 1
0
        public Task SaveMementoAsync(BaseMemento memento)
        {
            var stack = mementos.GetOrAdd(memento.Id, id => new ConcurrentStack <BaseMemento>());

            stack.Push(memento);
            return(Task.CompletedTask);
        }
Exemplo n.º 2
0
        public async Task SaveMementoAsync(BaseMemento memento)
        {
            const string INSERT_SQL = "INSERT INTO memento_storage (Id,AggregateId,Memento,MementoType,Version) VALUES (@id,@aggregateId,@memento,@mementoType,@version)";

            var json = JsonConvert.SerializeObject(memento);
            var type = memento.GetType();

            using (var connection = connectionFactory.Create(ConnectionType.EventSourcing))
            {
                connection.Open();
                using (var transaction = connection.BeginTransaction())
                {
                    try
                    {
                        await connection.ExecuteAsync(INSERT_SQL, new
                        {
                            id          = Guid.NewGuid().ToString(),
                            aggregateId = memento.Id.ToString(),
                            memento     = json,
                            mementoType = type.FullName,
                            version     = memento.Version
                        }, transaction);

                        transaction.Commit();
                    }
                    catch (Exception ex)
                    {
                        logger.LogError(ex, ex.Message);
                        transaction.Rollback();
                    }
                }
                connection.Close();
            }
        }
Exemplo n.º 3
0
 public void SaveMemento(BaseMemento memento)
 {
     using (var session = store.OpenSession())
     {
         session.Store(memento);
         session.SaveChanges();
     }
 }
Exemplo n.º 4
0
 public void SetMemento(BaseMemento memento)
 {
     Title       = ((DiaryItemMemento)memento).Title;
     Description = ((DiaryItemMemento)memento).Description;
     From        = ((DiaryItemMemento)memento).From;
     To          = ((DiaryItemMemento)memento).To;
     Version     = memento.Version;
     Id          = memento.Id;
 }
Exemplo n.º 5
0
        public Task <BaseMemento> GetMementoAsync(Guid aggregateId, int maxVersion)
        {
            BaseMemento result = null;

            if (mementos.TryGetValue(aggregateId, out var stack))
            {
                result = stack.FirstOrDefault(m => m.Version <= maxVersion);
            }

            return(Task.FromResult(result));
        }
Exemplo n.º 6
0
 public void SetMemento(BaseMemento memento)
 {
     Id           = memento.Id;
     Version      = memento.Version;
     CustomerName = ((HotelItemMemento)memento).CustomerName;
     Email        = ((HotelItemMemento)memento).Email;
     PhoneNo      = ((HotelItemMemento)memento).PhoneNo;
     RoomNo       = ((HotelItemMemento)memento).RoomNo;
     CheckIn      = ((HotelItemMemento)memento).CheckIn;
     CheckOut     = ((HotelItemMemento)memento).CheckOut;
     IsCheckedIn  = ((HotelItemMemento)memento).IsCheckedIn;
 }
Exemplo n.º 7
0
        public Task <BaseMemento> GetMementoAsync(Guid aggregateId)
        {
            BaseMemento result = null;

            if (mementos.TryGetValue(aggregateId, out var stack))
            {
                if (stack.TryPeek(out var value))
                {
                    result = value;
                }
            }
            return(Task.FromResult(result));
        }
Exemplo n.º 8
0
        public override void SetMemento(BaseMemento memento)
        {
            var orderMemento = (OrderMemento)memento;

            Id          = orderMemento.Id;
            TotalAmount = orderMemento.TotalAmount;
            Volume      = orderMemento.Volume;
            Exchange    = orderMemento.Exchange;
            PairSymbols = orderMemento.PairSymbols;
            Price       = orderMemento.Price;
            Status      = orderMemento.Status;
            Type        = orderMemento.Type;
            Version     = orderMemento.Version;
        }
Exemplo n.º 9
0
    public IEnumerable <Event> GetEvents(Guid aggregateId)
    {
        using (var session = store.OpenSession())
        {
            BaseMemento memento = session.Load <BaseMemento>(aggregateId);

            // Its null if it doesn't exist - so return an empty array
            if (memento == null)
            {
                return(new Event[0]);
            }
            return(memento.Events.AsEnumerable());
        }
    }
Exemplo n.º 10
0
        public async Task <TAggregate> GetByIdAsync(Guid AggregateId)
        {
            BaseMemento leatestSnapshot = await eventStorageRepository.GetLatestMemento(AggregateId);

            int leatestSnapshotVersion = leatestSnapshot is null ? DomainConstants.NewAggregateVersion : leatestSnapshot.Version;

            IEnumerable <IEvent> events = await eventStorageRepository.GetCommittedEventsAsync(AggregateId, leatestSnapshotVersion);

            TAggregate obj = new TAggregate();

            if (leatestSnapshot != null)
            {
                obj.SetMemento(leatestSnapshot);
            }

            obj.LoadsFromHistory(events);
            return(obj);
        }
Exemplo n.º 11
0
        public async Task SaveAsync(TAggregate Aggregate, int ExpectedVersion, Guid CorrelationId)
        {
            IEnumerable <IEvent> uncommitedEvents = Aggregate.GetUncommittedChanges();

            if (uncommitedEvents.Any())
            {
                // TODO: Specyfi lock system in async
                // lock (_lockStorage)
                if (ExpectedVersion != DomainConstants.NewAggregateVersion)
                {
                    TAggregate item = await GetByIdAsync(Aggregate.AggregateId); // ???

                    if (item.Version != ExpectedVersion)
                    {
                        throw new AggregateConcurrencyException($"Aggregate {item.AggregateId} has been previously modified");
                    }
                }

                var version = Aggregate.Version;

                foreach (IEvent @event in uncommitedEvents)
                {
                    version++;
                    if (version > 2 && version % 3 == 0)
                    {
                        BaseMemento memento = Aggregate.GetMemento();
                        await eventStorageRepository.SaveSnapshotAsync(memento);
                    }
                    @event.Version       = version;
                    @event.CorrelationId = CorrelationId;
                    await eventStorageRepository.AddEventAsync(@event);

                    await eventPublisher.PublishEvent(@event);
                }
            }
        }
Exemplo n.º 12
0
 public void SetMemento(BaseMemento memento)
 {
     Name    = ((UserCategoryMemento)memento).Name;
     Version = memento.Version;
     Id      = memento.Id;
 }
 public Task SaveSnapshotAsync(BaseMemento memento)
 {
     //_storage.Advanced.AddSnapshot(new Snapshot(stream.StreamId, version, memento));
     throw new NotImplementedException();
 }
Exemplo n.º 14
0
 public void SetMemento(BaseMemento memento)
 {
     QuestionText = ((QuestionMemento)memento).QuestionText;
     Version      = memento.Version;
     Id           = memento.Id;
 }
Exemplo n.º 15
0
 public Task SaveMemento(BaseMemento memento)
 {
     return(Task.Run(() => _mementos.Add(memento)));
 }
Exemplo n.º 16
0
 void IOriginator.SetMemento(BaseMemento memento)
 {
     _definedSubjects = ((StudyYearMemento)memento)._definedSubjects;
     Id      = memento.Id;
     Version = memento.Version;
 }
 public void SaveMemento(BaseMemento memento)
 {
     _mementos.Add(memento);
 }
Exemplo n.º 18
0
 public void SetMemento(BaseMemento memento)
 {
     Version = memento.Version;
     Id      = memento.Id;
 }