diff --git a/src/Services/Ordering/Ordering.API/Application/Behaviors/DuplicateCommandBehavior.cs b/src/Services/Ordering/Ordering.API/Application/Behaviors/ExistingCommandBehavior.cs similarity index 72% rename from src/Services/Ordering/Ordering.API/Application/Behaviors/DuplicateCommandBehavior.cs rename to src/Services/Ordering/Ordering.API/Application/Behaviors/ExistingCommandBehavior.cs index 79541645d..a367ab571 100644 --- a/src/Services/Ordering/Ordering.API/Application/Behaviors/DuplicateCommandBehavior.cs +++ b/src/Services/Ordering/Ordering.API/Application/Behaviors/ExistingCommandBehavior.cs @@ -7,13 +7,13 @@ using Microsoft.Extensions.Logging; namespace Ordering.API.Infrastructure.Behaviors { - public class DuplicateCommandBehavior : IPipelineBehavior + public class ExistingCommandBehavior : IPipelineBehavior where TCommand : ICommand { private readonly IMediator _mediator; private readonly IRequestManager _requestManager; - public DuplicateCommandBehavior(IMediator mediator, IRequestManager requestManager) + public ExistingCommandBehavior(IMediator mediator, IRequestManager requestManager) { _mediator = mediator; _requestManager = requestManager; @@ -24,8 +24,8 @@ namespace Ordering.API.Infrastructure.Behaviors var alreadyExists = await _requestManager.ExistAsync(command.CommandId); if (alreadyExists) { - var duplicateCommand = new DuplicateCommandResponse.DuplicateCommand(command); - return await _mediator.Send(duplicateCommand, cancellationToken); + var existingCommand = new ExistingCommandResponse.ExistingCommand(command); + return await _mediator.Send(existingCommand, cancellationToken); } await _requestManager.CreateRequestForCommandAsync(command.CommandId); diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommand.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommand.cs index a378c3343..d754d728e 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommand.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommand.cs @@ -8,7 +8,7 @@ using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands; namespace Ordering.API.Application.Commands { - public class CancelOrderCommand : ICommand, IRequest + public class CancelOrderCommand : ICommand { public Guid CommandId { get; set; } diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs index b476bd21e..edf69084f 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CancelOrderCommandHandler.cs @@ -38,9 +38,9 @@ namespace Ordering.API.Application.Commands // Use for Idempotency in Command process - public class CancelOrderDuplicateCommand : DuplicateCommandResponse + public class CancelOrderExistingCommand : ExistingCommandResponse { - protected override Task CreateResponseForDuplicateCommand(CancelOrderCommand command) + protected override Task CreateResponseForExistingCommand(CancelOrderCommand command) { // Ignore duplicate requests for processing order. return Task.FromResult(true); diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs index 548fcf879..2e4f7a5d1 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/CreateOrderCommandHandler.cs @@ -47,9 +47,9 @@ // Use for Idempotency in Command process - public class CreateOrderDuplicateCommand : DuplicateCommandResponse + public class CreateOrderExistingCommand : ExistingCommandResponse { - protected override Task CreateResponseForDuplicateCommand(CreateOrderCommand command) + protected override Task CreateResponseForExistingCommand(CreateOrderCommand command) { // Ignore duplicate requests for creating order. return Task.FromResult(true); diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/DuplicateCommandResponse.cs b/src/Services/Ordering/Ordering.API/Application/Commands/DuplicateCommandResponse.cs deleted file mode 100644 index 1fbb84ae1..000000000 --- a/src/Services/Ordering/Ordering.API/Application/Commands/DuplicateCommandResponse.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System.Threading; -using System.Threading.Tasks; -using MediatR; - -namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands -{ - public abstract class DuplicateCommandResponse : IRequestHandler.DuplicateCommand, TResponse> - { - public class DuplicateCommand : IRequest - { - public DuplicateCommand(TCommand command) - { - Command = command; - } - - public TCommand Command { get; } - } - - /// - /// Creates the result value to return if a previous request was found - /// - /// - protected abstract Task CreateResponseForDuplicateCommand(TCommand command); - - Task IRequestHandler, TResponse>.Handle(DuplicateCommand request, CancellationToken cancellationToken) - { - return CreateResponseForDuplicateCommand(request.Command); - } - } -} \ No newline at end of file diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/ExistingCommandResponse.cs b/src/Services/Ordering/Ordering.API/Application/Commands/ExistingCommandResponse.cs new file mode 100644 index 000000000..96a364cf8 --- /dev/null +++ b/src/Services/Ordering/Ordering.API/Application/Commands/ExistingCommandResponse.cs @@ -0,0 +1,30 @@ +using System.Threading; +using System.Threading.Tasks; +using MediatR; + +namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands +{ + public abstract class ExistingCommandResponse : IRequestHandler.ExistingCommand, TResponse> + { + public class ExistingCommand : IRequest + { + public ExistingCommand(TCommand command) + { + Command = command; + } + + public TCommand Command { get; } + } + + /// + /// Creates the result value to return if a previous request was found + /// + /// + protected abstract Task CreateResponseForExistingCommand(TCommand command); + + Task IRequestHandler.Handle(ExistingCommand request, CancellationToken cancellationToken) + { + return CreateResponseForExistingCommand(request.Command); + } + } +} \ No newline at end of file diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/ICommand.cs b/src/Services/Ordering/Ordering.API/Application/Commands/ICommand.cs index b85b90f8c..d4a5c0463 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/ICommand.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/ICommand.cs @@ -1,4 +1,5 @@ using System; +using MediatR; namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands { @@ -6,4 +7,8 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands { Guid CommandId { get; } } + + public interface ICommand : ICommand, IRequest + { + } } \ No newline at end of file diff --git a/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs b/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs index d5e9416aa..9eb87337a 100644 --- a/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs +++ b/src/Services/Ordering/Ordering.API/Application/Commands/ShipOrderCommandHandler.cs @@ -38,9 +38,9 @@ namespace Ordering.API.Application.Commands // Use for Idempotency in Command process - public class ShipOrderDuplicateCommand : DuplicateCommandResponse + public class ShipOrderExistingCommand : ExistingCommandResponse { - protected override Task CreateResponseForDuplicateCommand(ShipOrderCommand command) + protected override Task CreateResponseForExistingCommand(ShipOrderCommand command) { // Ignore duplicate requests for creating order. return Task.FromResult(true); diff --git a/src/Services/Ordering/Ordering.API/Infrastructure/AutofacModules/MediatorModule.cs b/src/Services/Ordering/Ordering.API/Infrastructure/AutofacModules/MediatorModule.cs index 41c7a4774..6a1b6e2ab 100644 --- a/src/Services/Ordering/Ordering.API/Infrastructure/AutofacModules/MediatorModule.cs +++ b/src/Services/Ordering/Ordering.API/Infrastructure/AutofacModules/MediatorModule.cs @@ -42,7 +42,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Infrastructure.Autof builder.RegisterGeneric(typeof(LoggingBehavior<,>)).As(typeof(IPipelineBehavior<,>)); builder.RegisterGeneric(typeof(ValidatorBehavior<,>)).As(typeof(IPipelineBehavior<,>)); - builder.RegisterGeneric(typeof(DuplicateCommandBehavior<,>)).As(typeof(IPipelineBehavior<,>)); + builder.RegisterGeneric(typeof(ExistingCommandBehavior<,>)).As(typeof(IPipelineBehavior<,>)); } }