예제 #1
0
        public void SaveAndLoadWithEntityRepository()
        {
            Converts.Repository
            .AddJsonKey()
            .AddJsonEnumSearchHandler()
            .AddJsonPrimitivesSearchHandler()
            .AddJsonObjectSearchHandler();

            ICompositeTypeProvider       compositeTypeProvider = new ReflectionCompositeTypeProvider(new ReflectionCompositeDelegateFactory());
            IFactory <ICompositeStorage> storageFactory        = new GetterFactory <ICompositeStorage>(() => new JsonCompositeStorage());

            EventSourcingContext context    = new EventSourcingContext(@"Data Source=.\sqlexpress; Initial Catalog=EventStore;Integrated Security=SSPI");
            EntityEventStore     eventStore = new EntityEventStore(context);

            PersistentEventDispatcher eventDispatcher = new PersistentEventDispatcher(eventStore);

            AggregateRootRepository <Order> repository = new AggregateRootRepository <Order>(
                eventStore,
                new CompositeEventFormatter(compositeTypeProvider, storageFactory),
                new ReflectionAggregateRootFactory <Order>(),
                eventDispatcher,
                new NoSnapshotProvider(),
                new EmptySnapshotStore()
                );

            PersistentCommandDispatcher commandDispatcher = new PersistentCommandDispatcher(
                new SerialCommandDistributor(),
                new EntityCommandStore(context),
                new CompositeCommandFormatter(compositeTypeProvider, storageFactory)
                );

            CreateOrderHandler  createHandler  = new CreateOrderHandler(repository);
            AddOrderItemHandler addItemHandler = new AddOrderItemHandler(repository);

            commandDispatcher.Handlers
            .Add <CreateOrder>(createHandler)
            .Add <AddOrderItem>(addItemHandler);

            CreateOrder create = new CreateOrder();

            commandDispatcher.HandleAsync(create);

            eventDispatcher.Handlers.Await <OrderPlaced>().Wait();

            IEnumerable <EventModel> serializedEvents = eventStore.Get(create.OrderKey).ToList();

            Assert.AreEqual(1, serializedEvents.Count());

            AddOrderItem addItem = new AddOrderItem(create.OrderKey, GuidKey.Create(Guid.NewGuid(), "Product"), 5);

            commandDispatcher.HandleAsync(Envelope.Create(addItem).AddDelay(TimeSpan.FromMinutes(1)));

            Task <OrderTotalRecalculated> task = eventDispatcher.Handlers.Await <OrderTotalRecalculated>();

            task.Wait();
            Console.WriteLine(task.Result);

            serializedEvents = eventStore.Get(create.OrderKey).ToList();
            Assert.AreEqual(4, serializedEvents.Count());
        }
예제 #2
0
        public async Task AddItem(Optional <string> orderId, string correlationId, string description, decimal cost)
        {
            var orderStreamId = orderId.ValueOr(StreamNumbering.NewStreamId <DomainOrder>);
            var order         = await this.persistence.GetState <DomainOrder>(orderStreamId);

            var itemAdded = new AddOrderItem(correlationId, DateTime.Now)
            {
                Description = description,
                Cost        = cost
            }.Execute(order);

            await this.persistence.Save(itemAdded);
        }
        /// <summary>
        /// Add the selected menu item to the order
        /// </summary>
        private void AddItemExecute()
        {
            try
            {
                Service      s            = new Service();
                AddOrderItem addOrderItem = new AddOrderItem();
                if (AllMenu != null)
                {
                    List <tblOrder> tblOrders = s.GetAllOrder();

                    addOrderItem.txtName.Text  = AllMenu.ProductName;
                    addOrderItem.txtOrder.Text = Convert.ToString(tblOrders.LastOrDefault().OrderID);
                    addOrderItem.txtPrice.Text = Convert.ToString(AllMenu.PriceProduct);

                    addOrderItem.ShowDialog();
                    if ((addOrderItem.DataContext as AddOrderItemViewModel).IsUpdateItem == true)
                    {
                        OrderList = s.GetOrder(AllOrderList.LastOrDefault().OrderID).ToList();
                        TotalSum  = 0;
                        if (OrderList.Count == 0)
                        {
                            createNewOrder.msgNoItems.Visibility       = Visibility.Visible;
                            createNewOrder.gridOrderItem.Visibility    = Visibility.Collapsed;
                            createNewOrder.btnPlaceOrderNow.Visibility = Visibility.Collapsed;
                            createNewOrder.txtTotalSum.Text            = TotalSum.ToString() + ",00";
                            createNewOrder.txtTotalSumBottom.Text      = TotalSum.ToString() + ",00 RSD";
                        }
                        else
                        {
                            createNewOrder.msgNoItems.Visibility       = Visibility.Collapsed;
                            createNewOrder.gridOrderItem.Visibility    = Visibility.Visible;
                            createNewOrder.btnPlaceOrderNow.Visibility = Visibility.Visible;
                            foreach (var item in OrderList)
                            {
                                TotalSum += item.OrderSum;
                                createNewOrder.txtTotalSum.Text       = TotalSum.ToString() + ",00";
                                createNewOrder.txtTotalSumBottom.Text = TotalSum.ToString() + ",00 RSD";
                            }
                        }
                        CreateNewOrder.counter             = CreateNewOrder.counter + 1;
                        createNewOrder.CountingBadge.Badge = CreateNewOrder.counter;
                    }
                }
                createNewOrder.DataGridAllMenu.UnselectAll();
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.ToString());
            }
        }
 public AddOrderItemViewModel(AddOrderItem addOrderItem)
 {
     this.addOrderItem = addOrderItem;
 }