using EonaCat.gRPC.Api.Helpers; namespace EonaCat.gRPC.Api.Middleware.Interceptors; public class ExceptionInterceptor : Interceptor { private readonly ILogger _logger; private readonly Guid _correlationId; public ExceptionInterceptor(ILogger logger) { _logger = logger; _correlationId = Guid.NewGuid(); } public override async Task UnaryServerHandler( TRequest request, ServerCallContext context, UnaryServerMethod continuation) { try { return await continuation(request, context); } catch (Exception e) { throw e.Handle(context, _logger, _correlationId); } } public override async Task ClientStreamingServerHandler( IAsyncStreamReader requestStream, ServerCallContext context, ClientStreamingServerMethod continuation) { try { return await continuation(requestStream, context); } catch (Exception e) { throw e.Handle(context, _logger, _correlationId); } } public override async Task ServerStreamingServerHandler( TRequest request, IServerStreamWriter responseStream, ServerCallContext context, ServerStreamingServerMethod continuation) { try { await continuation(request, responseStream, context); } catch (Exception e) { throw e.Handle(context, _logger, _correlationId); } } public override async Task DuplexStreamingServerHandler( IAsyncStreamReader requestStream, IServerStreamWriter responseStream, ServerCallContext context, DuplexStreamingServerMethod continuation) { try { await continuation(requestStream, responseStream, context); } catch (Exception e) { throw e.Handle(context, _logger, _correlationId); } } }