Пример #1
0
        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);
        }
Пример #3
0
        private void Apply(PaymentDiscarded @event)
        {
            Version++;

            Status = PaymentStatus.Failed;
        }