public Task SaveMementoAsync(BaseMemento memento) { var stack = mementos.GetOrAdd(memento.Id, id => new ConcurrentStack <BaseMemento>()); stack.Push(memento); return(Task.CompletedTask); }
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(); } }
public void SaveMemento(BaseMemento memento) { using (var session = store.OpenSession()) { session.Store(memento); session.SaveChanges(); } }
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; }
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)); }
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; }
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)); }
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; }
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()); } }
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); }
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); } } }
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(); }
public void SetMemento(BaseMemento memento) { QuestionText = ((QuestionMemento)memento).QuestionText; Version = memento.Version; Id = memento.Id; }
public Task SaveMemento(BaseMemento memento) { return(Task.Run(() => _mementos.Add(memento))); }
void IOriginator.SetMemento(BaseMemento memento) { _definedSubjects = ((StudyYearMemento)memento)._definedSubjects; Id = memento.Id; Version = memento.Version; }
public void SaveMemento(BaseMemento memento) { _mementos.Add(memento); }
public void SetMemento(BaseMemento memento) { Version = memento.Version; Id = memento.Id; }