Refactored code related to Idempotent CommandHandlers
This commit is contained in:
parent
c3d9deb030
commit
ebf9822af3
@ -9,9 +9,10 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Ordering.API.Application.Commands
|
namespace Ordering.API.Application.Commands
|
||||||
{
|
{
|
||||||
public class CancelOrderCommandIdentifiedHandler : IdentifierCommandHandler<CancelOrderCommand, bool>
|
// Use for Idempotency in Command process
|
||||||
|
public class CancelOrderCommandIdempotentHandler : IdentifiedCommandHandler<CancelOrderCommand, bool>
|
||||||
{
|
{
|
||||||
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<CancelOrderCommand, bool>
|
public class CancelOrderCommandHandler : IAsyncRequestHandler<CancelOrderCommand, bool>
|
||||||
{
|
{
|
||||||
private readonly IOrderRepository _orderRepository;
|
private readonly IOrderRepository _orderRepository;
|
||||||
|
@ -7,10 +7,10 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
|
|
||||||
|
// Use for Idempotency in Command process
|
||||||
public class CreateOrderCommandIdentifiedHandler : IdentifierCommandHandler<CreateOrderCommand, bool>
|
public class CreateOrderCommandIdempotentHandler : IdentifiedCommandHandler<CreateOrderCommand, bool>
|
||||||
{
|
{
|
||||||
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
|
public class CreateOrderCommandHandler
|
||||||
: IAsyncRequestHandler<CreateOrderCommand, bool>
|
: IAsyncRequestHandler<CreateOrderCommand, bool>
|
||||||
{
|
{
|
||||||
|
@ -10,13 +10,13 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands
|
|||||||
/// </summary>
|
/// </summary>
|
||||||
/// <typeparam name="T">Type of the command handler that performs the operation if request is not duplicated</typeparam>
|
/// <typeparam name="T">Type of the command handler that performs the operation if request is not duplicated</typeparam>
|
||||||
/// <typeparam name="R">Return value of the inner command handler</typeparam>
|
/// <typeparam name="R">Return value of the inner command handler</typeparam>
|
||||||
public class IdentifierCommandHandler<T, R> : IAsyncRequestHandler<IdentifiedCommand<T, R>, R>
|
public class IdentifiedCommandHandler<T, R> : IAsyncRequestHandler<IdentifiedCommand<T, R>, R>
|
||||||
where T : IRequest<R>
|
where T : IRequest<R>
|
||||||
{
|
{
|
||||||
private readonly IMediator _mediator;
|
private readonly IMediator _mediator;
|
||||||
private readonly IRequestManager _requestManager;
|
private readonly IRequestManager _requestManager;
|
||||||
|
|
||||||
public IdentifierCommandHandler(IMediator mediator, IRequestManager requestManager)
|
public IdentifiedCommandHandler(IMediator mediator, IRequestManager requestManager)
|
||||||
{
|
{
|
||||||
_mediator = mediator;
|
_mediator = mediator;
|
||||||
_requestManager = requestManager;
|
_requestManager = requestManager;
|
||||||
@ -48,6 +48,7 @@ namespace Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands
|
|||||||
{
|
{
|
||||||
await _requestManager.CreateRequestForCommandAsync<T>(message.Id);
|
await _requestManager.CreateRequestForCommandAsync<T>(message.Id);
|
||||||
|
|
||||||
|
// Send the embeded business command to mediator so it runs its related CommandHandler
|
||||||
var result = await _mediator.Send(message.Command);
|
var result = await _mediator.Send(message.Command);
|
||||||
|
|
||||||
return result;
|
return result;
|
@ -6,9 +6,10 @@ using System.Threading.Tasks;
|
|||||||
|
|
||||||
namespace Ordering.API.Application.Commands
|
namespace Ordering.API.Application.Commands
|
||||||
{
|
{
|
||||||
public class ShipOrderCommandIdentifiedHandler : IdentifierCommandHandler<ShipOrderCommand, bool>
|
// Use for Idempotency in Command process
|
||||||
|
public class ShipOrderCommandIdempotentHandler : IdentifiedCommandHandler<ShipOrderCommand, bool>
|
||||||
{
|
{
|
||||||
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<ShipOrderCommand, bool>
|
public class ShipOrderCommandHandler : IAsyncRequestHandler<ShipOrderCommand, bool>
|
||||||
{
|
{
|
||||||
private readonly IOrderRepository _orderRepository;
|
private readonly IOrderRepository _orderRepository;
|
||||||
|
@ -3,9 +3,9 @@ using Microsoft.eShopOnContainers.Services.Ordering.API.Application.Commands;
|
|||||||
|
|
||||||
namespace Ordering.API.Application.Validations
|
namespace Ordering.API.Application.Validations
|
||||||
{
|
{
|
||||||
public class IdentifierCommandValidator : AbstractValidator<IdentifiedCommand<CreateOrderCommand,bool>>
|
public class IdentifiedCommandValidator : AbstractValidator<IdentifiedCommand<CreateOrderCommand,bool>>
|
||||||
{
|
{
|
||||||
public IdentifierCommandValidator()
|
public IdentifiedCommandValidator()
|
||||||
{
|
{
|
||||||
RuleFor(command => command.Id).NotEmpty();
|
RuleFor(command => command.Id).NotEmpty();
|
||||||
}
|
}
|
@ -13,12 +13,12 @@ namespace UnitTest.Ordering.Application
|
|||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Xunit;
|
using Xunit;
|
||||||
public class IdentifierCommandHandlerTest
|
public class IdentifiedCommandHandlerTest
|
||||||
{
|
{
|
||||||
private readonly Mock<IRequestManager> _requestManager;
|
private readonly Mock<IRequestManager> _requestManager;
|
||||||
private readonly Mock<IMediator> _mediator;
|
private readonly Mock<IMediator> _mediator;
|
||||||
|
|
||||||
public IdentifierCommandHandlerTest()
|
public IdentifiedCommandHandlerTest()
|
||||||
{
|
{
|
||||||
_requestManager = new Mock<IRequestManager>();
|
_requestManager = new Mock<IRequestManager>();
|
||||||
_mediator = new Mock<IMediator>();
|
_mediator = new Mock<IMediator>();
|
||||||
@ -38,7 +38,7 @@ namespace UnitTest.Ordering.Application
|
|||||||
.Returns(Task.FromResult(true));
|
.Returns(Task.FromResult(true));
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
var handler = new IdentifierCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
|
var handler = new IdentifiedCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
|
||||||
var result = await handler.Handle(fakeOrderCmd);
|
var result = await handler.Handle(fakeOrderCmd);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
||||||
@ -60,7 +60,7 @@ namespace UnitTest.Ordering.Application
|
|||||||
.Returns(Task.FromResult(true));
|
.Returns(Task.FromResult(true));
|
||||||
|
|
||||||
//Act
|
//Act
|
||||||
var handler = new IdentifierCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
|
var handler = new IdentifiedCommandHandler<CreateOrderCommand, bool>(_mediator.Object, _requestManager.Object);
|
||||||
var result = await handler.Handle(fakeOrderCmd);
|
var result = await handler.Handle(fakeOrderCmd);
|
||||||
|
|
||||||
//Assert
|
//Assert
|
Loading…
x
Reference in New Issue
Block a user