private void Apply(SellOrderCreatedEvent @event) { Id = @event.AggregateId; WalletId = @event.WalletId; CompanyId = @event.CompanyId; Quantity = @event.Quantity; State = OrderState.Started; Type = OrderType.Buy; }
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 async Task HandleAsync(SellOrderCreatedEvent @event) { await _projectionWriter.AddAsync(new BuyOrderProjection(@event.AggregateId, @event.WalletId, @event.CompanyId, @event.Quantity, OrderState.Started)); }