benjaminvr

Untitled

Jun 6th, 2023
695
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 1.63 KB | None | 0 0
  1. using AutoMapper;
  2. using EasyNetQ;
  3. using EventLibrary.Logic;
  4. using EventLibrary.Model.Events.From.Any;
  5. using EventLibrary.Model.Interfaces;
  6. using MediatR;
  7. using Micro2Go.Logic.Extensions;
  8. using Micro2Go.Model.Messaging.Core;
  9.  
  10. namespace EventLibrary.Model.Abstract;
  11.  
  12. // Zie ook : EventMappingProfile
  13. // Indien wijzigingen qua ctor params, zie ook MessageDispatcher
  14. #pragma warning disable CS8600
  15. #pragma warning disable CS8604
  16. public class AbstractConsumer {
  17.     private readonly IMediator _mediator;
  18.     private readonly IMapper _mapper;
  19.     private readonly IEventBroker _eventBroker;
  20.  
  21.     public AbstractConsumer(IMediator mediator, IMapper mapper, IEventBroker eventBroker) {
  22.         _mediator = mediator;
  23.         _mapper = mapper;
  24.         _eventBroker = eventBroker;
  25.     }
  26.  
  27.     // TEvent -> TRequest
  28.     public async Task Handle<TEvent, TRequest, TCommand>(TEvent message) where TEvent : ServiceEvent {
  29.         try {
  30.             await Handle<TRequest, TCommand>(
  31.                 _mapper.Map<TRequest>(
  32.                     message
  33.                 ),
  34.                 message.EventId
  35.             );
  36.         } catch (Exception e) {
  37.             await _eventBroker.Publish(new FailedToProcessEvent(message.EventId, e));
  38.         }
  39.     }
  40.    
  41.     // TRequest -> TCommand (+ send)
  42.     public async Task Handle<TRequest, TCommand>(TRequest message, Guid eventId) {
  43.         Response? result;
  44.  
  45.         try {
  46.             result = (Response)await _mediator.Send(
  47.                 _mapper.Map<TCommand>(
  48.                     message
  49.                 )
  50.             );
  51.  
  52.             if (result is null || result.Success is false) {
  53.                 throw new Exception($"Failed to process message: {result?.ToJson() ?? "Could not cast to Response type"}");
  54.             }
  55.         } catch (Exception e) {
  56.             await _eventBroker.Publish(new FailedToProcessEvent(eventId, e));
  57.         }
  58.     }
  59. }
  60.  
Advertisement
Add Comment
Please, Sign In to add comment