BAEL-2275: Change constructor of Order
This commit is contained in:
parent
7010533b25
commit
fbd2c58844
@ -1,12 +1,12 @@
|
|||||||
package com.baeldung.ddd;
|
package com.baeldung.ddd;
|
||||||
|
|
||||||
import org.springframework.boot.SpringApplication;
|
import org.springframework.boot.SpringApplication;
|
||||||
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
import org.springframework.boot.autoconfigure.SpringBootApplication;
|
||||||
|
|
||||||
@SpringBootApplication
|
@SpringBootApplication(scanBasePackages = "com.baeldung.ddd.order")
|
||||||
public class PersistingDddAggregatesApplication {
|
public class PersistingDddAggregatesApplication {
|
||||||
|
|
||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
SpringApplication.run(PersistingDddAggregatesApplication.class, args);
|
SpringApplication.run(PersistingDddAggregatesApplication.class, args);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -22,9 +22,9 @@ public class OrderController {
|
|||||||
|
|
||||||
@PostMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
@PostMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
||||||
CreateOrderResponse createOrder(@RequestBody final CreateOrderRequest createOrderRequest) {
|
CreateOrderResponse createOrder(@RequestBody final CreateOrderRequest createOrderRequest) {
|
||||||
return new CreateOrderResponse(orderService
|
final ObjectId id = orderService.createOrder(createOrderRequest.getProduct());
|
||||||
.createOrder(createOrderRequest.getProducts())
|
|
||||||
.toString());
|
return new CreateOrderResponse(id.toString());
|
||||||
}
|
}
|
||||||
|
|
||||||
@PostMapping(value = "/{id}/products", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
@PostMapping(value = "/{id}/products", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
|
||||||
|
@ -4,8 +4,10 @@ import com.baeldung.ddd.layers.domain.Product;
|
|||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
|
import javax.validation.constraints.NotNull;
|
||||||
|
|
||||||
public class AddProductRequest {
|
public class AddProductRequest {
|
||||||
private Product product;
|
@NotNull private Product product;
|
||||||
|
|
||||||
@JsonCreator
|
@JsonCreator
|
||||||
public AddProductRequest(@JsonProperty("product") final Product product) {
|
public AddProductRequest(@JsonProperty("product") final Product product) {
|
||||||
|
@ -4,18 +4,17 @@ import com.baeldung.ddd.layers.domain.Product;
|
|||||||
import com.fasterxml.jackson.annotation.JsonCreator;
|
import com.fasterxml.jackson.annotation.JsonCreator;
|
||||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||||
|
|
||||||
import java.util.ArrayList;
|
import javax.validation.constraints.NotNull;
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class CreateOrderRequest {
|
public class CreateOrderRequest {
|
||||||
private List<Product> products;
|
@NotNull private Product product;
|
||||||
|
|
||||||
@JsonCreator
|
@JsonCreator
|
||||||
public CreateOrderRequest(@JsonProperty("products") final List<Product> productList) {
|
public CreateOrderRequest(@JsonProperty("product") @NotNull Product product) {
|
||||||
this.products = new ArrayList<>(productList);
|
this.product = product;
|
||||||
}
|
}
|
||||||
|
|
||||||
public List<Product> getProducts() {
|
public Product getProduct() {
|
||||||
return products;
|
return product;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -14,14 +14,11 @@ public class Order {
|
|||||||
private List<Product> products;
|
private List<Product> products;
|
||||||
private BigDecimal price;
|
private BigDecimal price;
|
||||||
|
|
||||||
public Order(final ObjectId id, final List<Product> products) {
|
public Order(final ObjectId id, final Product product) {
|
||||||
this.id = id;
|
this.id = id;
|
||||||
this.products = new ArrayList<>(products);
|
this.products = new ArrayList<>(Collections.singletonList(product));
|
||||||
this.status = OrderStatus.CREATED;
|
this.status = OrderStatus.CREATED;
|
||||||
this.price = products
|
this.price = product.getPrice();
|
||||||
.stream()
|
|
||||||
.map(Product::getPrice)
|
|
||||||
.reduce(BigDecimal.ZERO, BigDecimal::add);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public void complete() {
|
public void complete() {
|
||||||
|
@ -2,12 +2,9 @@ package com.baeldung.ddd.layers.domain.service;
|
|||||||
|
|
||||||
import com.baeldung.ddd.layers.domain.Order;
|
import com.baeldung.ddd.layers.domain.Order;
|
||||||
import com.baeldung.ddd.layers.domain.Product;
|
import com.baeldung.ddd.layers.domain.Product;
|
||||||
import com.baeldung.ddd.layers.domain.exception.DomainException;
|
|
||||||
import com.baeldung.ddd.layers.domain.repository.OrderRepository;
|
import com.baeldung.ddd.layers.domain.repository.OrderRepository;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public class DomainOrderService implements OrderService {
|
public class DomainOrderService implements OrderService {
|
||||||
|
|
||||||
private final OrderRepository orderRepository;
|
private final OrderRepository orderRepository;
|
||||||
@ -17,8 +14,8 @@ public class DomainOrderService implements OrderService {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public ObjectId createOrder(List<Product> products) {
|
public ObjectId createOrder(final Product product) {
|
||||||
final Order order = new Order(ObjectId.get(), products);
|
final Order order = new Order(ObjectId.get(), product);
|
||||||
orderRepository.save(order);
|
orderRepository.save(order);
|
||||||
|
|
||||||
return order.getId();
|
return order.getId();
|
||||||
|
@ -3,10 +3,8 @@ package com.baeldung.ddd.layers.domain.service;
|
|||||||
import com.baeldung.ddd.layers.domain.Product;
|
import com.baeldung.ddd.layers.domain.Product;
|
||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
|
|
||||||
import java.util.List;
|
|
||||||
|
|
||||||
public interface OrderService {
|
public interface OrderService {
|
||||||
ObjectId createOrder(List<Product> products);
|
ObjectId createOrder(final Product product);
|
||||||
|
|
||||||
void addProduct(ObjectId id, Product product);
|
void addProduct(ObjectId id, Product product);
|
||||||
|
|
||||||
|
@ -1,12 +1,15 @@
|
|||||||
package com.baeldung.ddd.layers.infrastracture.configuration;
|
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.repository.OrderRepository;
|
||||||
import com.baeldung.ddd.layers.domain.service.DomainOrderService;
|
import com.baeldung.ddd.layers.domain.service.DomainOrderService;
|
||||||
import com.baeldung.ddd.layers.domain.service.OrderService;
|
import com.baeldung.ddd.layers.domain.service.OrderService;
|
||||||
import org.springframework.context.annotation.Bean;
|
import org.springframework.context.annotation.Bean;
|
||||||
|
import org.springframework.context.annotation.ComponentScan;
|
||||||
import org.springframework.context.annotation.Configuration;
|
import org.springframework.context.annotation.Configuration;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
|
@ComponentScan(basePackageClasses = DomainLayerApplication.class)
|
||||||
public class DomainConfiguration {
|
public class DomainConfiguration {
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
|
@ -1,7 +1,8 @@
|
|||||||
package com.baeldung.ddd.layers.infrastracture.configuration;
|
package com.baeldung.ddd.layers.infrastracture.configuration;
|
||||||
|
|
||||||
|
import com.baeldung.ddd.layers.infrastracture.repository.SpringDataOrderRepository;
|
||||||
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
|
import org.springframework.data.mongodb.repository.config.EnableMongoRepositories;
|
||||||
|
|
||||||
@EnableMongoRepositories
|
@EnableMongoRepositories(basePackageClasses = SpringDataOrderRepository.class)
|
||||||
public class MongoDBConfiguration {
|
public class MongoDBConfiguration {
|
||||||
}
|
}
|
||||||
|
@ -3,11 +3,10 @@ package com.baeldung.ddd.layers.domain;
|
|||||||
import org.bson.types.ObjectId;
|
import org.bson.types.ObjectId;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Arrays;
|
|
||||||
|
|
||||||
public class OrderProvider {
|
public class OrderProvider {
|
||||||
public static Order getCreatedOrder() {
|
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() {
|
public static Order getCompletedOrder() {
|
||||||
|
@ -10,7 +10,6 @@ import org.junit.jupiter.api.Test;
|
|||||||
import org.junit.jupiter.api.function.Executable;
|
import org.junit.jupiter.api.function.Executable;
|
||||||
|
|
||||||
import java.math.BigDecimal;
|
import java.math.BigDecimal;
|
||||||
import java.util.Arrays;
|
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
import static org.junit.jupiter.api.Assertions.assertNotNull;
|
||||||
@ -33,7 +32,7 @@ class DomainOrderServiceUnitTest {
|
|||||||
void shouldCreateOrder_thenSaveIt() {
|
void shouldCreateOrder_thenSaveIt() {
|
||||||
final Product product = new Product(BigDecimal.TEN, "productName");
|
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));
|
verify(orderRepository).save(any(Order.class));
|
||||||
assertNotNull(id);
|
assertNotNull(id);
|
||||||
|
@ -14,7 +14,7 @@ class MongoDbOrderRepositoryUnitTest {
|
|||||||
void setUp(){
|
void setUp(){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
void findById() {
|
void findById() {
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user