30 lines
1.8 KiB
C#
30 lines
1.8 KiB
C#
|
using MediatR;
|
|||
|
using Microsoft.Extensions.Logging;
|
|||
|
using ZeroFramework.DeviceCenter.Domain.Aggregates.OrderAggregate;
|
|||
|
using ZeroFramework.DeviceCenter.Domain.Events.Buyers;
|
|||
|
|
|||
|
namespace ZeroFramework.DeviceCenter.Application.DomainEventHandlers.Buyers.BuyerAndPaymentMethodVerified
|
|||
|
{
|
|||
|
public class UpdateOrderWhenVerifiedDomainEventHandler(IOrderRepository orderRepository, ILoggerFactory loggerFactory) : INotificationHandler<BuyerAndPaymentMethodVerifiedDomainEvent>
|
|||
|
{
|
|||
|
private readonly IOrderRepository _orderRepository = orderRepository ?? throw new ArgumentNullException(nameof(orderRepository));
|
|||
|
|
|||
|
private readonly ILoggerFactory _loggerFactory = loggerFactory ?? throw new ArgumentNullException(nameof(loggerFactory));
|
|||
|
|
|||
|
/// <summary>
|
|||
|
/// When the Buyer and Buyer's payment method have been created or verified that they existed,
|
|||
|
/// then we can update the original Order with the BuyerId and PaymentId (foreign keys)
|
|||
|
/// </summary>
|
|||
|
public async Task Handle(BuyerAndPaymentMethodVerifiedDomainEvent buyerPaymentMethodVerifiedEvent, CancellationToken cancellationToken)
|
|||
|
{
|
|||
|
Order orderToUpdate = await _orderRepository.GetAsync(buyerPaymentMethodVerifiedEvent.OrderId);
|
|||
|
|
|||
|
orderToUpdate.SetBuyerId(buyerPaymentMethodVerifiedEvent.Buyer.Id);
|
|||
|
orderToUpdate.SetPaymentMethodId(buyerPaymentMethodVerifiedEvent.Payment.Id);
|
|||
|
|
|||
|
var logger = _loggerFactory.CreateLogger<UpdateOrderWhenVerifiedDomainEventHandler>();
|
|||
|
string message = "Order with Id: {OrderId} has been successfully updated with a payment method {PaymentMethod} ({Id})";
|
|||
|
logger.LogTrace(message, buyerPaymentMethodVerifiedEvent.OrderId, nameof(buyerPaymentMethodVerifiedEvent.Payment), buyerPaymentMethodVerifiedEvent.Payment.Id);
|
|||
|
}
|
|||
|
}
|
|||
|
}
|