public void Discard(DiscardReason discardReason) { if (Status != PaymentStatus.Pending) { throw new InvalidOperationException($"Discarding payment in '{Status}' status is not allowed."); } var @event = PaymentDiscarded.Create(Id, discardReason, DateTime.UtcNow); Enqueue(@event); Apply(@event); }
public async Task Handle(PaymentDiscarded @event, CancellationToken cancellationToken) { var payment = await querySession.LoadAsync<Payment>(@event.PaymentId); var externalEvent = PaymentFailed.Create( @event.PaymentId, payment!.OrderId, payment.Amount, @event.DiscardedAt, PaymentFailReason.Discarded ); await eventBus.Publish(externalEvent); }
private void Apply(PaymentDiscarded @event) { Version++; Status = PaymentStatus.Failed; }