示例#1
0
        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();
        }
示例#2
0
        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);
        }