using Fake.DependencyInjection; using Fake.EventBus; using Fake.UnitOfWork; using Microsoft.Extensions.Logging; using Oms.Application.Services.Orders.Issues; namespace Oms.Application.Messaging.OrderSideEffects; public sealed class OrderAutoTriggerFireEventHandler( AutoTriggerRuntimeService autoTriggerRuntimeService, IUnitOfWorkManager unitOfWorkManager, ILogger logger) : IEventHandler, ITransientDependency { public async Task HandleAsync( OrderAutoTriggerFireIntegrationEvent @event, CancellationToken cancellationToken) { if (@event.OrderId <= 0 || !Enum.TryParse(@event.Timing, ignoreCase: true, out var timing)) { logger.LogWarning( "AutoTrigger fire skipped invalid payload OrderId={OrderId} Timing={Timing}", @event.OrderId, @event.Timing); return; } using var unitOfWork = unitOfWorkManager.Begin(); try { await autoTriggerRuntimeService.FireByOrderIdAsync( @event.OrderId, timing, @event.OperatorUserId); } catch (Exception ex) { logger.LogWarning( ex, "AutoTrigger fire failed OrderId={OrderId} Timing={Timing}", @event.OrderId, timing); } await unitOfWork.CompleteAsync(cancellationToken); } }