[HttpPost("create")]
public IActionResult CreateOrder(CreateOrderRequest request)
{
if (string.IsNullOrWhiteSpace(request.CustomerName))
return BadRequest("Customer name required");
var total = request.Items.Sum(i => i.Price * i.Quantity);
if (total > 10000)
return BadRequest("Total too high");
_orderRepository.Save(request);
return Ok();
}
public interface ICreateOrderUseCase
{
Task<Guid> Execute(CreateOrderDto dto);
}
public class CreateOrderUseCase : ICreateOrderUseCase
{
private readonly IOrderRepository _repo;
public CreateOrderUseCase(IOrderRepository repo)
{
_repo = repo;
}
public async Task<Guid> Execute(CreateOrderDto dto)
{
var order = new Order(dto.ProductId, dto.Quantity);
await _repo.AddAsync(order);
return order.Id;
}
}
[HttpPost("create")]
public IActionResult CreateOrder(CreateOrderRequest request)
{
var result = _createOrderUseCase.Execute(request);
return result.IsSuccess ? Ok() : BadRequest(result.Error);
}
public interface ICreateOrderUseCase
{
Task<Guid> Execute(CreateOrderDto dto);
}
public class CreateOrderUseCase : ICreateOrderUseCase
{
private readonly IOrderRepository _repo;
public CreateOrderUseCase(IOrderRepository repo)
{
_repo = repo;
}
public async Task<Guid> Execute(CreateOrderDto dto)
{
var order = new Order(dto.ProductId, dto.Quantity);
await _repo.AddAsync(order);
return order.Id;
}
}
[HttpPost("create")]
public IActionResult CreateOrder(CreateOrderRequest request)
{
var result = _createOrderUseCase.Execute(request);
return result.IsSuccess ? Ok() : BadRequest(result.Error);
}
public class CreateOrderUseCaseTests
{
[Fact]
public async Task Test_Order_Creation()
{
// Arrange
var repoMock = new Mock<IOrderRepository>();
var useCase = new CreateOrderUseCase(repoMock.Object);
var dto = new CreateOrderDto { ProductId = Guid.NewGuid(), Quantity = 3 };
// Act
var orderId = await useCase.Execute(dto);
// Assert
repoMock.Verify(r => r.AddAsync(It.Is<Order>(o =>
o.ProductId == dto.ProductId &&
o.Quantity == dto.Quantity
)), Times.Once);
Assert.NotEqual(Guid.Empty, orderId);
}
}