public async Task HandleAsync(StocksTakedOffFromWalletEvent message)
        {
            var orderProcessManager = await _processManagerRepository.FindAsync(message.OrderId);

            try
            {
                orderProcessManager.When(message);
            }
            catch (StocqresException e)
            {
                orderProcessManager.When(new SellOrderCancelledEvent(e.Message));
            }

            await _processManagerRepository.Save(orderProcessManager);
        }
示例#2
0
        public void When(StocksTakedOffFromWalletEvent message)
        {
            switch (State)
            {
            case SellOrderProcessManagerState.OrderPlaced:
                CompanyId     = message.CompanyId;
                StockQuantity = message.Quantity;
                State         = SellOrderProcessManagerState.StocksTakedOffFromWallet;
                ProcessCommand(new AddStocksToCompanyCommand(CompanyId, message.AggregateId, message.Quantity,
                                                             StockCode));
                break;

            // idempotence - same message sent twice
            case SellOrderProcessManagerState.StocksTakedOffFromWallet:
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#3
0
        private void Apply(StocksTakedOffFromWalletEvent @event)
        {
            var stock = StockList.First(s => s.CompanyId == @event.CompanyId);

            stock.Quantity -= @event.Quantity;
        }