diff --git a/ddd/src/main/java/com/baeldung/ddd/PersistingDddAggregatesApplication.java b/ddd/src/main/java/com/baeldung/ddd/PersistingDddAggregatesApplication.java index cd9be34278..3a52fd0440 100644 --- a/ddd/src/main/java/com/baeldung/ddd/PersistingDddAggregatesApplication.java +++ b/ddd/src/main/java/com/baeldung/ddd/PersistingDddAggregatesApplication.java @@ -1,12 +1,12 @@ -package com.baeldung.ddd; - -import org.springframework.boot.SpringApplication; -import org.springframework.boot.autoconfigure.SpringBootApplication; - -@SpringBootApplication -public class PersistingDddAggregatesApplication { - - public static void main(String[] args) { - SpringApplication.run(PersistingDddAggregatesApplication.class, args); - } -} +package com.baeldung.ddd; + +import org.springframework.boot.SpringApplication; +import org.springframework.boot.autoconfigure.SpringBootApplication; + +@SpringBootApplication(scanBasePackages = "com.baeldung.ddd.order") +public class PersistingDddAggregatesApplication { + + public static void main(String[] args) { + SpringApplication.run(PersistingDddAggregatesApplication.class, args); + } +} diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/application/OrderController.java b/ddd/src/main/java/com/baeldung/ddd/layers/application/OrderController.java index fa3576eb37..19aa0493fa 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/application/OrderController.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/application/OrderController.java @@ -22,9 +22,9 @@ public class OrderController { @PostMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) CreateOrderResponse createOrder(@RequestBody final CreateOrderRequest createOrderRequest) { - return new CreateOrderResponse(orderService - .createOrder(createOrderRequest.getProducts()) - .toString()); + final ObjectId id = orderService.createOrder(createOrderRequest.getProduct()); + + return new CreateOrderResponse(id.toString()); } @PostMapping(value = "/{id}/products", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE) diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/application/request/AddProductRequest.java b/ddd/src/main/java/com/baeldung/ddd/layers/application/request/AddProductRequest.java index 823b2191ef..18a09e3636 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/application/request/AddProductRequest.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/application/request/AddProductRequest.java @@ -4,8 +4,10 @@ import com.baeldung.ddd.layers.domain.Product; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; +import javax.validation.constraints.NotNull; + public class AddProductRequest { - private Product product; + @NotNull private Product product; @JsonCreator public AddProductRequest(@JsonProperty("product") final Product product) { diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/application/request/CreateOrderRequest.java b/ddd/src/main/java/com/baeldung/ddd/layers/application/request/CreateOrderRequest.java index a2dabd05fc..26d6d379c5 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/application/request/CreateOrderRequest.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/application/request/CreateOrderRequest.java @@ -4,18 +4,17 @@ import com.baeldung.ddd.layers.domain.Product; import com.fasterxml.jackson.annotation.JsonCreator; import com.fasterxml.jackson.annotation.JsonProperty; -import java.util.ArrayList; -import java.util.List; +import javax.validation.constraints.NotNull; public class CreateOrderRequest { - private List products; + @NotNull private Product product; @JsonCreator - public CreateOrderRequest(@JsonProperty("products") final List productList) { - this.products = new ArrayList<>(productList); + public CreateOrderRequest(@JsonProperty("product") @NotNull Product product) { + this.product = product; } - public List getProducts() { - return products; + public Product getProduct() { + return product; } } diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/domain/Order.java b/ddd/src/main/java/com/baeldung/ddd/layers/domain/Order.java index d69b51ae57..c41d856d33 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/domain/Order.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/domain/Order.java @@ -14,14 +14,11 @@ public class Order { private List products; private BigDecimal price; - public Order(final ObjectId id, final List products) { + public Order(final ObjectId id, final Product product) { this.id = id; - this.products = new ArrayList<>(products); + this.products = new ArrayList<>(Collections.singletonList(product)); this.status = OrderStatus.CREATED; - this.price = products - .stream() - .map(Product::getPrice) - .reduce(BigDecimal.ZERO, BigDecimal::add); + this.price = product.getPrice(); } public void complete() { diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/DomainOrderService.java b/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/DomainOrderService.java index 961309e94e..6ccef2e842 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/DomainOrderService.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/DomainOrderService.java @@ -2,12 +2,9 @@ package com.baeldung.ddd.layers.domain.service; import com.baeldung.ddd.layers.domain.Order; import com.baeldung.ddd.layers.domain.Product; -import com.baeldung.ddd.layers.domain.exception.DomainException; import com.baeldung.ddd.layers.domain.repository.OrderRepository; import org.bson.types.ObjectId; -import java.util.List; - public class DomainOrderService implements OrderService { private final OrderRepository orderRepository; @@ -17,8 +14,8 @@ public class DomainOrderService implements OrderService { } @Override - public ObjectId createOrder(List products) { - final Order order = new Order(ObjectId.get(), products); + public ObjectId createOrder(final Product product) { + final Order order = new Order(ObjectId.get(), product); orderRepository.save(order); return order.getId(); diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/OrderService.java b/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/OrderService.java index dbc7d3aba1..b00d5b286a 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/OrderService.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/domain/service/OrderService.java @@ -3,10 +3,8 @@ package com.baeldung.ddd.layers.domain.service; import com.baeldung.ddd.layers.domain.Product; import org.bson.types.ObjectId; -import java.util.List; - public interface OrderService { - ObjectId createOrder(List products); + ObjectId createOrder(final Product product); void addProduct(ObjectId id, Product product); diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/DomainConfiguration.java b/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/DomainConfiguration.java index 7c56456719..8e97b4ca01 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/DomainConfiguration.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/DomainConfiguration.java @@ -1,12 +1,15 @@ package com.baeldung.ddd.layers.infrastracture.configuration; +import com.baeldung.ddd.layers.DomainLayerApplication; import com.baeldung.ddd.layers.domain.repository.OrderRepository; import com.baeldung.ddd.layers.domain.service.DomainOrderService; import com.baeldung.ddd.layers.domain.service.OrderService; import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.ComponentScan; import org.springframework.context.annotation.Configuration; @Configuration +@ComponentScan(basePackageClasses = DomainLayerApplication.class) public class DomainConfiguration { @Bean diff --git a/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/MongoDBConfiguration.java b/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/MongoDBConfiguration.java index db6743e90f..5341b9fe95 100644 --- a/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/MongoDBConfiguration.java +++ b/ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/configuration/MongoDBConfiguration.java @@ -1,7 +1,8 @@ package com.baeldung.ddd.layers.infrastracture.configuration; +import com.baeldung.ddd.layers.infrastracture.repository.SpringDataOrderRepository; import org.springframework.data.mongodb.repository.config.EnableMongoRepositories; -@EnableMongoRepositories +@EnableMongoRepositories(basePackageClasses = SpringDataOrderRepository.class) public class MongoDBConfiguration { } diff --git a/ddd/src/test/java/com/baeldung/ddd/layers/domain/OrderProvider.java b/ddd/src/test/java/com/baeldung/ddd/layers/domain/OrderProvider.java index 8aa3ff4068..8b86992ad5 100644 --- a/ddd/src/test/java/com/baeldung/ddd/layers/domain/OrderProvider.java +++ b/ddd/src/test/java/com/baeldung/ddd/layers/domain/OrderProvider.java @@ -3,11 +3,10 @@ package com.baeldung.ddd.layers.domain; import org.bson.types.ObjectId; import java.math.BigDecimal; -import java.util.Arrays; public class OrderProvider { public static Order getCreatedOrder() { - return new Order(ObjectId.get(), Arrays.asList(new Product(BigDecimal.TEN, "productName"))); + return new Order(ObjectId.get(), new Product(BigDecimal.TEN, "productName")); } public static Order getCompletedOrder() { diff --git a/ddd/src/test/java/com/baeldung/ddd/layers/domain/service/DomainOrderServiceUnitTest.java b/ddd/src/test/java/com/baeldung/ddd/layers/domain/service/DomainOrderServiceUnitTest.java index 841f49f7f5..3ac40a867e 100644 --- a/ddd/src/test/java/com/baeldung/ddd/layers/domain/service/DomainOrderServiceUnitTest.java +++ b/ddd/src/test/java/com/baeldung/ddd/layers/domain/service/DomainOrderServiceUnitTest.java @@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.function.Executable; import java.math.BigDecimal; -import java.util.Arrays; import java.util.Optional; import static org.junit.jupiter.api.Assertions.assertNotNull; @@ -33,7 +32,7 @@ class DomainOrderServiceUnitTest { void shouldCreateOrder_thenSaveIt() { final Product product = new Product(BigDecimal.TEN, "productName"); - final ObjectId id = tested.createOrder(Arrays.asList(product)); + final ObjectId id = tested.createOrder(product); verify(orderRepository).save(any(Order.class)); assertNotNull(id); diff --git a/ddd/src/test/java/com/baeldung/ddd/layers/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java b/ddd/src/test/java/com/baeldung/ddd/layers/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java index 356e60946c..1b4eac06be 100644 --- a/ddd/src/test/java/com/baeldung/ddd/layers/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java +++ b/ddd/src/test/java/com/baeldung/ddd/layers/infrastracture/repository/MongoDbOrderRepositoryUnitTest.java @@ -14,7 +14,7 @@ class MongoDbOrderRepositoryUnitTest { void setUp(){ } - + @Test void findById() { }