From 4165256c2eec60ce1a42bab2e311c771a76979cf Mon Sep 17 00:00:00 2001 From: eggwhat Date: Tue, 9 Jan 2024 00:15:07 +0100 Subject: [PATCH] #99: add exception mapper --- .../Events/Rejected/AddParcelRejected.cs | 16 +++++++ .../Events/Rejected/CancelOrderRejected.cs | 18 ++++++++ .../Events/Rejected/ConfirmOrderRejected.cs | 18 ++++++++ .../Events/Rejected/CreateOrderRejected.cs | 22 +++++++++ .../Exceptions/ExceptionToMessageMapper.cs | 46 +++++++++++++++++++ .../Extensions.cs | 8 ++-- 6 files changed, 124 insertions(+), 4 deletions(-) create mode 100644 SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/AddParcelRejected.cs create mode 100644 SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CancelOrderRejected.cs create mode 100644 SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/ConfirmOrderRejected.cs create mode 100644 SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CreateOrderRejected.cs create mode 100644 SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Exceptions/ExceptionToMessageMapper.cs diff --git a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/AddParcelRejected.cs b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/AddParcelRejected.cs new file mode 100644 index 0000000..cd0508d --- /dev/null +++ b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/AddParcelRejected.cs @@ -0,0 +1,16 @@ +namespace SwiftParcel.ExternalAPI.Lecturer.Application.Events.Rejected +{ + public class AddParcelRejected + { + public Guid ParcelId { get; } + public string Reason { get; } + public string Code { get; } + + public AddParcelRejected(Guid parcelId, string reason, string code) + { + ParcelId = parcelId; + Reason = reason; + Code = code; + } + } +} \ No newline at end of file diff --git a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CancelOrderRejected.cs b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CancelOrderRejected.cs new file mode 100644 index 0000000..3530304 --- /dev/null +++ b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CancelOrderRejected.cs @@ -0,0 +1,18 @@ +using Convey.CQRS.Events; + +namespace SwiftParcel.ExternalAPI.Lecturer.Application.Events.Rejected +{ + public class CancelOrderRejected : IRejectedEvent + { + public Guid OrderId { get; } + public string Reason { get; } + public string Code { get; } + + public CancelOrderRejected(Guid orderId, string reason, string code) + { + OrderId = orderId; + Reason = reason; + Code = code; + } + } +} \ No newline at end of file diff --git a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/ConfirmOrderRejected.cs b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/ConfirmOrderRejected.cs new file mode 100644 index 0000000..2969a2f --- /dev/null +++ b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/ConfirmOrderRejected.cs @@ -0,0 +1,18 @@ +using Convey.CQRS.Events; + +namespace SwiftParcel.ExternalAPI.Lecturer.Application.Events.Rejected +{ + public class ConfirmOrderRejected : IRejectedEvent + { + public Guid OrderId { get; } + public string Reason { get; } + public string Code { get; } + + public ConfirmOrderRejected (Guid orderId, string reason, string code) + { + OrderId = orderId; + Reason = reason; + Code = code; + } + } +} diff --git a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CreateOrderRejected.cs b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CreateOrderRejected.cs new file mode 100644 index 0000000..b1f63c3 --- /dev/null +++ b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Application/SwiftParcel.ExternalAPI.Lecturer.Application/Events/Rejected/CreateOrderRejected.cs @@ -0,0 +1,22 @@ +using Convey.CQRS.Events; + +namespace SwiftParcel.ExternalAPI.Lecturer.Application.Events.Rejected +{ + public class CreateOrderRejected : IRejectedEvent + { + public Guid OrderId { get; } + public Guid CustomerId { get; } + public Guid ParcelId { get; } + public string Reason { get; } + public string Code { get; } + + public CreateOrderRejected(Guid orderId, Guid customerId, Guid parcelId, string reason, string code) + { + OrderId = orderId; + CustomerId = customerId; + ParcelId = parcelId; + Reason = reason; + Code = code; + } + } +} \ No newline at end of file diff --git a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Exceptions/ExceptionToMessageMapper.cs b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Exceptions/ExceptionToMessageMapper.cs new file mode 100644 index 0000000..e245cca --- /dev/null +++ b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Exceptions/ExceptionToMessageMapper.cs @@ -0,0 +1,46 @@ +using Convey.MessageBrokers.RabbitMQ; +using SwiftParcel.ExternalAPI.Lecturer.Application.Exceptions; +using SwiftParcel.ExternalAPI.Lecturer.Application.Commands; +using SwiftParcel.ExternalAPI.Lecturer.Application.Events.Rejected; + +namespace SwiftParcel.ExternalAPI.Lecturer.Infrastructure.Exceptions +{ + public class ExceptionToMessageMapper : IExceptionToMessageMapper + { + public object Map(Exception exception, object message) + => exception switch + { + InquiresServiceConnectionException ex => message switch + { + AddParcel m => new AddParcelRejected(m.ParcelId, ex.Message, ex.Code), + _ => null + }, + InquiresServiceException ex => message switch + { + AddParcel m => new AddParcelRejected(m.ParcelId, ex.Message, ex.Code), + _ => null + }, + OffersServiceConnectionException ex => message switch + { + CreateOrder m => new CreateOrderRejected(m.OrderId, m.CustomerId, m.ParcelId, ex.Message, ex.Code), + ConfirmOrder m => new ConfirmOrderRejected(m.OrderId, ex.Message, ex.Code), + CancelOrder m => new CancelOrderRejected(m.OrderId, ex.Message, ex.Code), + _ => null + }, + OffersServiceException ex => message switch + { + CreateOrder m => new CreateOrderRejected(m.OrderId, m.CustomerId, m.ParcelId, ex.Message, ex.Code), + ConfirmOrder m => new ConfirmOrderRejected(m.OrderId, ex.Message, ex.Code), + CancelOrder m => new CancelOrderRejected(m.OrderId, ex.Message, ex.Code), + _ => null + }, + OfferNotFoundException ex => message switch + { + ConfirmOrder m => new ConfirmOrderRejected(m.OrderId, ex.Message, ex.Code), + CancelOrder m => new CancelOrderRejected(m.OrderId, ex.Message, ex.Code), + _ => null + }, + _ => null + }; + } +} \ No newline at end of file diff --git a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Extensions.cs b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Extensions.cs index dbf8dcb..1a03599 100644 --- a/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Extensions.cs +++ b/SwiftParcel.ExternalAPI.Lecturer/src/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/SwiftParcel.ExternalAPI.Lecturer.Infrastructure/Extensions.cs @@ -69,7 +69,7 @@ public static IConveyBuilder AddInfrastructure(this IConveyBuilder builder) .AddFabio() .AddRabbitMq(plugins: p => p.AddJaegerRabbitMqPlugin()) .AddMessageOutbox(o => o.AddMongo()) - //.AddExceptionToMessageMapper() + .AddExceptionToMessageMapper() .AddMongo() .AddRedis() .AddMetrics() @@ -92,9 +92,9 @@ public static IApplicationBuilder UseInfrastructure(this IApplicationBuilder app .UseMetrics() .UseRabbitMq() .SubscribeCommand() - .SubscribeCommand(); - //.SubscribeCommand() - //.SubscribeEvent(); + .SubscribeCommand() + .SubscribeCommand() + .SubscribeCommand(); return app; }