namespace LiteCharms.Features.Mediator; public sealed class LoggingPipelineBehavior(ILogger> logger) : IPipelineBehavior where TRequest : IRequest where TResponse : ResultBase, new() { public async ValueTask Handle(TRequest message, MessageHandlerDelegate next, CancellationToken cancellationToken) { TResponse? response = await next(message, cancellationToken); if (response is null) logger.LogCritical("{Request} {TypeName} was returned as null", typeof(TRequest).Name, typeof(TRequest).Name); if(response?.IsFailed == true || response?.Errors?.Any() == true) { foreach (var error in response.Errors) { if (!string.IsNullOrWhiteSpace(error.Message)) logger.LogWarning("{Request} {Error}", typeof(TRequest).Name, error.Message); if (error?.Reasons?.Count > 0) error.Reasons.ForEach(r => logger.LogError("{Request} {Reason}", typeof(TRequest).Name, r.ToString())); } } return response; } }