using LiteCharms.Features.Abstractions; using LiteCharms.Features.Mediator; namespace LiteCharms.Features.Quartz; [DisallowConcurrentExecution] public class MediatorJob(IMediator mediator) : IJob where TNotification : IEvent { public async Task Execute(IJobExecutionContext context) { var data = context.MergedJobDataMap["Payload"] as string; if (string.IsNullOrWhiteSpace(data)) return; var notification = JsonSerializer.Deserialize(data); if (notification is null) return; using var activity = MediatorTelemetry.Source.StartActivity($"Quartz: {typeof(TNotification).Name}"); activity?.SetTag("event.correlation_id", notification.CorrelationId); await mediator.Publish(notification, context.CancellationToken); } }