public async Task HandleAsync(StocksAddedToCompanyEvent 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); }
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 Apply(StocksAddedToCompanyEvent @event) { Stock.Quantity += @event.StockQuantity; }