@ -3,53 +3,48 @@
public class ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler
: INotificationHandler < OrderStartedDomainEvent >
{
private readonly ILoggerFactory _logger ;
private readonly ILogger _logger ;
private readonly IBuyerRepository _buyerRepository ;
private readonly IIdentityService _identityService ;
private readonly IOrderingIntegrationEventService _orderingIntegrationEventService ;
public ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler (
ILoggerFactory logger ,
ILogger < ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler > logger ,
IBuyerRepository buyerRepository ,
IIdentityService identityService ,
IOrderingIntegrationEventService orderingIntegrationEventService )
{
_buyerRepository = buyerRepository ? ? throw new ArgumentNullException ( nameof ( buyerRepository ) ) ;
_identityService = identityService ? ? throw new ArgumentNullException ( nameof ( identityService ) ) ;
_orderingIntegrationEventService = orderingIntegrationEventService ? ? throw new ArgumentNullException ( nameof ( orderingIntegrationEventService ) ) ;
_logger = logger ? ? throw new ArgumentNullException ( nameof ( logger ) ) ;
}
public async Task Handle ( OrderStartedDomainEvent orderStarted Event, CancellationToken cancellationToken )
public async Task Handle ( OrderStartedDomainEvent domain Event, CancellationToken cancellationToken )
{
var cardTypeId = orderStarted Event. CardTypeId ! = 0 ? orderStarted Event. CardTypeId : 1 ;
var buyer = await _buyerRepository . FindAsync ( orderStarted Event. UserId ) ;
var buyerOriginally Existed = buyer = = null ? false : true ;
var cardTypeId = domain Event. CardTypeId ! = 0 ? domain Event. CardTypeId : 1 ;
var buyer = await _buyerRepository . FindAsync ( domain Event. UserId ) ;
var buyerExisted = buyer is not null ;
if ( ! buyerOriginally Existed )
if ( ! buyerExisted )
{
buyer = new Buyer ( orderStarted Event. UserId , orderStarted Event. UserName ) ;
buyer = new Buyer ( domain Event. UserId , domain Event. UserName ) ;
}
buyer . VerifyOrAddPaymentMethod ( cardTypeId ,
$"Payment Method on {DateTime.UtcNow}" ,
orderStarted Event. CardNumber ,
orderStarted Event. CardSecurityNumber ,
orderStarted Event. CardHolderName ,
orderStarted Event. CardExpiration ,
orderStarted Event. Order . Id ) ;
domain Event. CardNumber ,
domain Event. CardSecurityNumber ,
domain Event. CardHolderName ,
domain Event. CardExpiration ,
domain Event. Order . Id ) ;
var buyerUpdated = buyerOriginally Existed ?
var buyerUpdated = buyerExisted ?
_buyerRepository . Update ( buyer ) :
_buyerRepository . Add ( buyer ) ;
await _buyerRepository . UnitOfWork
. SaveEntitiesAsync ( cancellationToken ) ;
var orderStatusChangedToSubmittedIntegrationEvent = new OrderStatusChangedToSubmittedIntegrationEvent ( orderStartedEvent . Order . Id , orderStartedEvent . Order . OrderStatus . Name , buyer . Name ) ;
await _orderingIntegrationEventService . AddAndSaveEventAsync ( orderStatusChangedToSubmittedIntegrationEvent ) ;
_logger . CreateLogger < ValidateOrAddBuyerAggregateWhenOrderStartedDomainEventHandler > ( )
. LogTrace ( "Buyer {BuyerId} and related payment method were validated or updated for orderId: {OrderId}." ,
buyerUpdated . Id , orderStartedEvent . Order . Id ) ;
var integrationEvent = new OrderStatusChangedToSubmittedIntegrationEvent ( domainEvent . Order . Id , domainEvent . Order . OrderStatus . Name , buyer . Name ) ;
await _orderingIntegrationEventService . AddAndSaveEventAsync ( integrationEvent ) ;
OrderingApiTrace . LogOrderBuyerAndPaymentValidatedOrUpdated ( _logger , buyerUpdated . Id , domainEvent . Order . Id ) ;
}
}