private void TestEventSourcing(IDocumentStore store) { var userId = Guid.NewGuid(); var streamId = Guid.NewGuid(); var catalogId1 = Guid.NewGuid(); var catalogId2 = Guid.NewGuid(); var orderId = Guid.NewGuid(); using var session = store.OpenSession(); var catalogAdded1 = new CatalogAdded { CatalogId = catalogId1, Quantity = 5, UserId = userId }; var catalogAdded2 = new CatalogAdded { CatalogId = catalogId2, Quantity = 3, UserId = userId }; // Assume user adds 2 catalog first session.Events.StartStream(streamId, catalogAdded1, catalogAdded2); session.SaveChanges(); var catalogRemoved = new CatalogRemoved { CatalogId = catalogId1, Quantity = 2, UserId = userId }; var orderCreated = new OrderCreated { UserId = userId, OrderId = orderId, TotalMoney = 10000000 }; var orderChangeStatus = new OrderStatusChangeToPaid { OrderId = orderId }; var orderConfirmed = new OrderConfirmed { OrderId = orderId }; var orderShipped = new OrderShipped { OrderId = orderId }; var orderCompleted = new OrderCompleted { OrderId = orderId }; session.Events.Append(streamId, orderCreated, catalogRemoved, orderChangeStatus, orderConfirmed, orderShipped, orderCompleted); session.SaveChanges(); }
public void RemoveCatalog(Guid userId, DatabaseModels.Catalog catalog, int quantity) { CheckOrderCondition(userId); // TODO: all logic must be checked var removed = new CatalogRemoved() { CatalogId = catalog.Id, Quantity = quantity, UserId = userId }; _documentSession.Events.StartStream(_userOrder[userId], removed); }