private void Apply(BuyOrderCreatedEvent @event) { Id = @event.AggregateId; WalletId = @event.WalletId; CompanyId = @event.CompanyId; Quantity = @event.Quantity; State = OrderState.Started; Type = OrderType.Buy; }
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"); } }