From ebf9822af37f9f929ecb9fad76dcd057916de642 Mon Sep 17 00:00:00 2001 From: Cesar De la Torre Date: Sun, 12 Nov 2017 14:07:51 -0800 Subject: [PATCH] Refactored code related to Idempotent CommandHandlers --- .../Application/Commands/CancelOrderCommandHandler.cs | 6 ++++-- .../Application/Commands/CreateOrderCommandHandler.cs | 7 ++++--- ...ifierCommandHandler.cs => IdentifiedCommandHandler.cs} | 5 +++-- .../Application/Commands/ShipOrderCommandHandler.cs | 6 ++++-- ...rCommandValidator.cs => IdentifiedCommandValidator.cs} | 4 ++-- ...mandHandlerTest.cs => IdentifiedCommandHandlerTest.cs} | 8 ++++---- 6 files changed, 21 insertions(+), 15 deletions(-) rename src/Services/Ordering/Ordering.API/Application/Commands/{IdentifierCommandHandler.cs => IdentifiedCommandHandler.cs} (90%) rename src/Services/Ordering/Ordering.API/Application/Validations/{IdentifierCommandValidator.cs => IdentifiedCommandValidator.cs} (73%) rename test/Services/UnitTest/Ordering/Application/{IdentifierCommandHandlerTest.cs => IdentifiedCommandHandlerTest.cs} (94%) diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs index f8ea7ad40..1a26d2ae0 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs @@ -9,9 +9,10 @@ using System.Threading.Tasks; namespace Ordering.API.Application.Commands { - public class CancelOrderCommandIdentifiedHandler : IdentifierCommandHandler + // Use for Idempotency in Command process + public class CancelOrderCommandIdempotentHandler : IdentifiedCommandHandler { - public CancelOrderCommandIdentifiedHandler(IMediator mediator, IRequestManager requestManager) : base(mediator, requestManager) + public CancelOrderCommandIdempotentHandler(IMediator mediator, IRequestManager requestManager) : base(mediator, requestManager) { } @@ -21,6 +22,7 @@ namespace Ordering.API.Application.Commands } } + // Regular CommandHandler public class CancelOrderCommandHandler : IAsyncRequestHandler { private readonly IOrderRepository _orderRepository; diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs index 938f80a9c..a52eb0e7a 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs @@ -7,10 +7,10 @@ using System; using System.Threading.Tasks; - - public class CreateOrderCommandIdentifiedHandler : IdentifierCommandHandler + // Use for Idempotency in Command process + public class CreateOrderCommandIdempotentHandler : IdentifiedCommandHandler { - public CreateOrderCommandIdentifiedHandler(IMediator mediator, IRequestManager requestManager) : base(mediator, requestManager) + public CreateOrderCommandIdempotentHandler(IMediator mediator, IRequestManager requestManager) : base(mediator, requestManager) { } @@ -20,6 +20,7 @@ } } + // Regular CommandHandler public class CreateOrderCommandHandler : IAsyncRequestHandler { diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/IdentifierCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/IdentifiedCommandHandler.cs similarity index 90% rename from src/Services/Ordering/Ordering.API/Application/Commands/IdentifierCommandHandler.cs rename to src/Services/Ordering/Ordering.API/Application/Commands/IdentifiedCommandHandler.cs index 3fe07c124..507595236 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/IdentifierCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/IdentifiedCommandHandler.cs @@ -10,13 +10,13 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands /// /// Type of the command handler that performs the operation if request is not duplicated /// Return value of the inner command handler - public class IdentifierCommandHandler : IAsyncRequestHandler, R> + public class IdentifiedCommandHandler : IAsyncRequestHandler, R> where T : IRequest { private readonly IMediator _mediator; private readonly IRequestManager _requestManager; - public IdentifierCommandHandler(IMediator mediator, IRequestManager requestManager) + public IdentifiedCommandHandler(IMediator mediator, IRequestManager requestManager) { _mediator = mediator; _requestManager = requestManager; @@ -48,6 +48,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands { await _requestManager.CreateRequestForCommandAsync(message.Id); + // Send the embeded business command to mediator so it runs its related CommandHandler var result = await _mediator.Send(message.Command); return result; diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs index 47f1f5d54..90f863455 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs @@ -6,9 +6,10 @@ using System.Threading.Tasks; namespace Ordering.API.Application.Commands { - public class ShipOrderCommandIdentifiedHandler : IdentifierCommandHandler + // Use for Idempotency in Command process + public class ShipOrderCommandIdempotentHandler : IdentifiedCommandHandler { - public ShipOrderCommandIdentifiedHandler(IMediator mediator, IRequestManager requestManager) : base(mediator, requestManager) + public ShipOrderCommandIdempotentHandler(IMediator mediator, IRequestManager requestManager) : base(mediator, requestManager) { } @@ -18,6 +19,7 @@ namespace Ordering.API.Application.Commands } } + // Regular CommandHandler public class ShipOrderCommandHandler : IAsyncRequestHandler { private readonly IOrderRepository _orderRepository; diff --git a/src/Services/Ordering/Ordering.API/Application/Validations/IdentifierCommandValidator.cs b/src/Services/Ordering/Ordering.API/Application/Validations/IdentifiedCommandValidator.cs similarity index 73% rename from src/Services/Ordering/Ordering.API/Application/Validations/IdentifierCommandValidator.cs rename to src/Services/Ordering/Ordering.API/Application/Validations/IdentifiedCommandValidator.cs index e1482287f..84ae48835 100644 --- a/src/Services/Ordering/Ordering.API/Application/Validations/IdentifierCommandValidator.cs +++ b/src/Services/Ordering/Ordering.API/Application/Validations/IdentifiedCommandValidator.cs @@ -3,9 +3,9 @@ using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands; namespace Ordering.API.Application.Validations { - public class IdentifierCommandValidator : AbstractValidator> + public class IdentifiedCommandValidator : AbstractValidator> { - public IdentifierCommandValidator() + public IdentifiedCommandValidator() { RuleFor(command => command.Id).NotEmpty(); } diff --git a/test/Services/UnitTest/Ordering/Application/IdentifierCommandHandlerTest.cs b/test/Services/UnitTest/Ordering/Application/IdentifiedCommandHandlerTest.cs similarity index 94% rename from test/Services/UnitTest/Ordering/Application/IdentifierCommandHandlerTest.cs rename to test/Services/UnitTest/Ordering/Application/IdentifiedCommandHandlerTest.cs index fcddb53a8..1da4db31f 100644 --- a/test/Services/UnitTest/Ordering/Application/IdentifierCommandHandlerTest.cs +++ b/test/Services/UnitTest/Ordering/Application/IdentifiedCommandHandlerTest.cs @@ -13,12 +13,12 @@ namespace UnitTest.Ordering.Application using System.Collections.Generic; using System.Threading.Tasks; using Xunit; - public class IdentifierCommandHandlerTest + public class IdentifiedCommandHandlerTest { private readonly Mock _requestManager; private readonly Mock _mediator; - public IdentifierCommandHandlerTest() + public IdentifiedCommandHandlerTest() { _requestManager = new Mock(); _mediator = new Mock(); @@ -38,7 +38,7 @@ namespace UnitTest.Ordering.Application .Returns(Task.FromResult(true)); //Act - var handler = new IdentifierCommandHandler(_mediator.Object, _requestManager.Object); + var handler = new IdentifiedCommandHandler(_mediator.Object, _requestManager.Object); var result = await handler.Handle(fakeOrderCmd); //Assert @@ -60,7 +60,7 @@ namespace UnitTest.Ordering.Application .Returns(Task.FromResult(true)); //Act - var handler = new IdentifierCommandHandler(_mediator.Object, _requestManager.Object); + var handler = new IdentifiedCommandHandler(_mediator.Object, _requestManager.Object); var result = await handler.Handle(fakeOrderCmd); //Assert