public SellOrderProcessManager(Guid walletId, Guid companyId, string stockCode, int stockQuantity, string cancelReason, SellOrderProcessManagerState state) { WalletId = walletId; CompanyId = companyId; StockCode = stockCode; StockQuantity = stockQuantity; CancelReason = cancelReason; State = state; }
public void When(SellOrderFinishedEvent message) { switch (State) { case SellOrderProcessManagerState.WalletToppedUp: State = SellOrderProcessManagerState.OrderFinished; break; // idempotence - same message sent twice case SellOrderProcessManagerState.OrderFinished: break; default: throw new StocqresException("Invalid state for this message"); } }
public void When(WalletAmountToppedUpEvent message) { switch (State) { case SellOrderProcessManagerState.StocksTakedOffFromWallet: State = SellOrderProcessManagerState.WalletToppedUp; ProcessCommand(new FinishBuyOrderCommand(AggregateId)); break; // idempotence - same message sent twice case SellOrderProcessManagerState.StocksAddedToCompany: break; default: throw new StocqresException("Invalid state for this message"); } }
public void When(StocksAddedToCompanyEvent message) { switch (State) { case SellOrderProcessManagerState.StocksTakedOffFromWallet: State = SellOrderProcessManagerState.StocksAddedToCompany; ProcessCommand(new TopUpWalletAmountCommand(WalletId, AggregateId, StockCode, message.StockQuantity)); break; // idempotence - same message sent twice case SellOrderProcessManagerState.StocksAddedToCompany: break; default: throw new StocqresException("Invalid state for this message"); } }
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"); } }
public void When(SellOrderCreatedEvent message) { switch (State) { case SellOrderProcessManagerState.NotStarted: WalletId = message.WalletId; CompanyId = message.CompanyId; StockQuantity = message.Quantity; State = SellOrderProcessManagerState.OrderPlaced; ProcessCommand(new TakeOffStocksFromWalletCommand(message.WalletId, message.CompanyId, message.AggregateId, message.Quantity)); break; // idempotence - same message sent twice case SellOrderProcessManagerState.OrderPlaced: break; default: throw new StocqresException("Invalid state for this message"); } }
public void When(SellOrderCancelledEvent message) { State = SellOrderProcessManagerState.OrderFailed; }