示例#1
0
        public void When(BuyOrderCancelledEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.WalletChargeRollbacked:
                State = BuyOrderProcessManagerState.OrderFailed;
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#2
0
        public void When(StockToWalletAddedEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.CompanyCharged:
                State = BuyOrderProcessManagerState.OrderCompleted;
                ProcessCommand(new FinishBuyOrderCommand(AggregateId));
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#3
0
        public void When(WalletChargeRollbackedEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.CompanyChargeFailed:
                State = BuyOrderProcessManagerState.WalletChargeRollbacked;
                ProcessCommand(new CancelOrderCommand(AggregateId, CancelReason));
                break;

            case BuyOrderProcessManagerState.WalletChargeRollbacked:
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#4
0
        public void When(WalletChargedEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.OrderPlaced:
                State = BuyOrderProcessManagerState.InvestorWalletCharged;
                ChargedWalletAmount = message.Amount;
                ProcessCommand(new ChargeCompanyCommand(CompanyId, AggregateId, StockQuantity));
                break;

            case BuyOrderProcessManagerState.InvestorWalletCharged:
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#5
0
        public void When(CompanyChargeFailedEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.CompanyCharged:
                State        = BuyOrderProcessManagerState.CompanyChargeFailed;
                CancelReason = message.CancelReason;
                ProcessCommand(new RollbackWalletChargeCommand(WalletId, AggregateId, ChargedWalletAmount));
                break;

            case BuyOrderProcessManagerState.CompanyChargeFailed:
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#6
0
        public void When(CompanyChargedEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.InvestorWalletCharged:
                State         = BuyOrderProcessManagerState.CompanyCharged;
                StockName     = message.StockName;
                StockCode     = message.StockCode;
                StockQuantity = message.StockQuantity;
                StockUnit     = message.StockUnit;
                ProcessCommand(new AddStockToWalletCommand(WalletId, AggregateId, CompanyId, message.StockName,
                                                           message.StockCode, message.StockUnit, message.StockQuantity));
                break;

            case BuyOrderProcessManagerState.StockAddedToWallet:
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }
示例#7
0
        public void When(BuyOrderCreatedEvent message)
        {
            switch (State)
            {
            case BuyOrderProcessManagerState.NotStarted:
                WalletId      = message.WalletId;
                CompanyId     = message.CompanyId;
                StockQuantity = message.Quantity;
                State         = BuyOrderProcessManagerState.OrderPlaced;
                ProcessCommand(new ChargeWalletAmountCommand(message.WalletId, message.CompanyId,
                                                             message.AggregateId, message.Quantity));
                break;

            // idempotence - same message sent twice
            case BuyOrderProcessManagerState.OrderPlaced:
                break;

            default:
                throw new StocqresException("Invalid state for this message");
            }
        }