Ejemplo n.º 1
0
        public void TimeOut()
        {
            if (Status != PaymentStatus.Pending)
            {
                throw new InvalidOperationException($"Discarding payment in '{Status}' status is not allowed.");
            }

            var @event = PaymentTimedOut.Create(Id, DateTime.UtcNow);

            Enqueue(@event);
            Apply(@event);
        }
        public async Task Handle(PaymentTimedOut @event, CancellationToken cancellationToken)
        {
            var payment = await querySession.LoadAsync<Payment>(@event.PaymentId);

            var externalEvent = PaymentFailed.Create(
                @event.PaymentId,
                payment!.OrderId,
                payment.Amount,
                @event.TimedOutAt,
                PaymentFailReason.Discarded
            );

            await eventBus.Publish(externalEvent);
        }
Ejemplo n.º 3
0
        private void Apply(PaymentTimedOut @event)
        {
            Version++;

            Status = PaymentStatus.Failed;
        }