Skip to content

Commit 7e1581a

Browse files
committed
[ BAEL-2275 ] : Use UUID instead of ObjectId.
1 parent 342ac1b commit 7e1581a

11 files changed

Lines changed: 41 additions & 42 deletions

File tree

ddd/src/main/java/com/baeldung/ddd/layers/application/controller/OrderController.java

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@
44
import com.baeldung.ddd.layers.application.request.CreateOrderRequest;
55
import com.baeldung.ddd.layers.application.response.CreateOrderResponse;
66
import com.baeldung.ddd.layers.domain.service.OrderService;
7-
import org.bson.types.ObjectId;
87
import org.springframework.beans.factory.annotation.Autowired;
98
import org.springframework.http.MediaType;
109
import org.springframework.web.bind.annotation.*;
@@ -24,23 +23,23 @@ public OrderController(OrderService orderService) {
2423

2524
@PostMapping(produces = MediaType.APPLICATION_JSON_UTF8_VALUE, consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
2625
CreateOrderResponse createOrder(@RequestBody final CreateOrderRequest createOrderRequest) {
27-
final ObjectId id = orderService.createOrder(createOrderRequest.getProduct());
26+
final UUID id = orderService.createOrder(createOrderRequest.getProduct());
2827

29-
return new CreateOrderResponse(id.toString());
28+
return new CreateOrderResponse(id);
3029
}
3130

3231
@PostMapping(value = "/{id}/products", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
33-
void addProduct(@PathVariable final ObjectId id, @RequestBody final AddProductRequest addProductRequest) {
32+
void addProduct(@PathVariable final UUID id, @RequestBody final AddProductRequest addProductRequest) {
3433
orderService.addProduct(id, addProductRequest.getProduct());
3534
}
3635

3736
@DeleteMapping(value = "/{id}/products", consumes = MediaType.APPLICATION_JSON_UTF8_VALUE)
38-
void deleteProduct(@PathVariable final ObjectId id, @RequestParam final UUID productId) {
37+
void deleteProduct(@PathVariable final UUID id, @RequestParam final UUID productId) {
3938
orderService.deleteProduct(id, productId);
4039
}
4140

4241
@PostMapping("/{id}/complete")
43-
void completeOrder(@PathVariable final ObjectId id) {
42+
void completeOrder(@PathVariable final UUID id) {
4443
orderService.completeOrder(id);
4544
}
4645
}
Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,15 +1,15 @@
11
package com.baeldung.ddd.layers.application.response;
22

3-
import org.bson.types.ObjectId;
3+
import java.util.UUID;
44

55
public class CreateOrderResponse {
6-
private final String id;
6+
private final UUID id;
77

8-
public CreateOrderResponse(final String id) {
8+
public CreateOrderResponse(final UUID id) {
99
this.id = id;
1010
}
1111

12-
public String getId() {
12+
public UUID getId() {
1313
return id;
1414
}
1515
}

ddd/src/main/java/com/baeldung/ddd/layers/domain/Order.java

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,18 @@
11
package com.baeldung.ddd.layers.domain;
22

3-
import org.bson.types.ObjectId;
4-
53
import java.math.BigDecimal;
64
import java.util.ArrayList;
75
import java.util.Collections;
86
import java.util.List;
97
import java.util.UUID;
108

119
public class Order {
12-
private final ObjectId id;
10+
private UUID id;
1311
private OrderStatus status;
1412
private List<OrderItem> orderItems;
1513
private BigDecimal price;
1614

17-
public Order(final ObjectId id, final Product product) {
15+
public Order(final UUID id, final Product product) {
1816
this.id = id;
1917
this.orderItems = new ArrayList<>(Collections.singletonList(new OrderItem(product)));
2018
this.status = OrderStatus.CREATED;
@@ -63,7 +61,7 @@ private void validateProduct(final Product product) {
6361
}
6462
}
6563

66-
public ObjectId getId() {
64+
public UUID getId() {
6765
return id;
6866
}
6967

@@ -78,4 +76,7 @@ public BigDecimal getPrice() {
7876
public List<OrderItem> getOrderItems() {
7977
return Collections.unmodifiableList(orderItems);
8078
}
79+
80+
private Order() {
81+
}
8182
}

ddd/src/main/java/com/baeldung/ddd/layers/domain/OrderItem.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
import java.util.UUID;
66

77
public class OrderItem {
8-
private final UUID productId;
9-
private final BigDecimal price;
8+
private UUID productId;
9+
private BigDecimal price;
1010

1111
public OrderItem(final Product product) {
1212
this.productId = product.getId();
@@ -21,6 +21,9 @@ public BigDecimal getPrice() {
2121
return price;
2222
}
2323

24+
private OrderItem() {
25+
}
26+
2427
@Override
2528
public boolean equals(Object o) {
2629
if (this == o) return true;
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
package com.baeldung.ddd.layers.domain.repository;
22

33
import com.baeldung.ddd.layers.domain.Order;
4-
import org.bson.types.ObjectId;
54

65
import java.util.Optional;
6+
import java.util.UUID;
77

88
public interface OrderRepository {
9-
Optional<Order> findById(ObjectId id);
9+
Optional<Order> findById(UUID id);
1010

1111
void save(Order order);
1212
}

ddd/src/main/java/com/baeldung/ddd/layers/domain/service/DomainOrderService.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import com.baeldung.ddd.layers.domain.Order;
44
import com.baeldung.ddd.layers.domain.Product;
55
import com.baeldung.ddd.layers.domain.repository.OrderRepository;
6-
import org.bson.types.ObjectId;
76

87
import java.util.UUID;
98

@@ -16,38 +15,38 @@ public DomainOrderService(final OrderRepository orderRepository) {
1615
}
1716

1817
@Override
19-
public ObjectId createOrder(final Product product) {
20-
final Order order = new Order(ObjectId.get(), product);
18+
public UUID createOrder(final Product product) {
19+
final Order order = new Order(UUID.randomUUID(), product);
2120
orderRepository.save(order);
2221

2322
return order.getId();
2423
}
2524

2625
@Override
27-
public void addProduct(final ObjectId id, final Product product) {
26+
public void addProduct(final UUID id, final Product product) {
2827
final Order order = getOrder(id);
2928
order.addOrder(product);
3029

3130
orderRepository.save(order);
3231
}
3332

3433
@Override
35-
public void completeOrder(final ObjectId id) {
34+
public void completeOrder(final UUID id) {
3635
final Order order = getOrder(id);
3736
order.complete();
3837

3938
orderRepository.save(order);
4039
}
4140

4241
@Override
43-
public void deleteProduct(final ObjectId id, final UUID productId) {
42+
public void deleteProduct(final UUID id, final UUID productId) {
4443
final Order order = getOrder(id);
4544
order.removeOrder(productId);
4645

4746
orderRepository.save(order);
4847
}
4948

50-
private Order getOrder(ObjectId id) {
49+
private Order getOrder(UUID id) {
5150
return orderRepository
5251
.findById(id)
5352
.orElseThrow(() -> new RuntimeException("Order with given id doesn't exist"));
Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,15 @@
11
package com.baeldung.ddd.layers.domain.service;
22

33
import com.baeldung.ddd.layers.domain.Product;
4-
import org.bson.types.ObjectId;
54

65
import java.util.UUID;
76

87
public interface OrderService {
9-
ObjectId createOrder(final Product product);
8+
UUID createOrder(Product product);
109

11-
void addProduct(ObjectId id, Product product);
10+
void addProduct(UUID id, Product product);
1211

13-
void completeOrder(ObjectId id);
12+
void completeOrder(UUID id);
1413

15-
void deleteProduct(ObjectId id, UUID productId);
14+
void deleteProduct(UUID id, UUID productId);
1615
}

ddd/src/main/java/com/baeldung/ddd/layers/infrastracture/repository/MongoDbOrderRepository.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,11 +2,11 @@
22

33
import com.baeldung.ddd.layers.domain.Order;
44
import com.baeldung.ddd.layers.domain.repository.OrderRepository;
5-
import org.bson.types.ObjectId;
65
import org.springframework.beans.factory.annotation.Autowired;
76
import org.springframework.stereotype.Component;
87

98
import java.util.Optional;
9+
import java.util.UUID;
1010

1111
@Component
1212
public class MongoDbOrderRepository implements OrderRepository {
@@ -19,7 +19,7 @@ public MongoDbOrderRepository(final SpringDataOrderRepository orderRepository) {
1919
}
2020

2121
@Override
22-
public Optional<Order> findById(final ObjectId id) {
22+
public Optional<Order> findById(final UUID id) {
2323
return orderRepository.findById(id);
2424
}
2525

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
package com.baeldung.ddd.layers.infrastracture.repository;
22

33
import com.baeldung.ddd.layers.domain.Order;
4-
import org.bson.types.ObjectId;
54
import org.springframework.data.mongodb.repository.MongoRepository;
65
import org.springframework.stereotype.Repository;
76

7+
import java.util.UUID;
8+
89
@Repository
9-
public interface SpringDataOrderRepository extends MongoRepository<Order, ObjectId> {
10+
public interface SpringDataOrderRepository extends MongoRepository<Order, UUID> {
1011
}

ddd/src/test/java/com/baeldung/ddd/layers/domain/OrderProvider.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,11 @@
11
package com.baeldung.ddd.layers.domain;
22

3-
import org.bson.types.ObjectId;
4-
53
import java.math.BigDecimal;
64
import java.util.UUID;
75

86
public class OrderProvider {
97
public static Order getCreatedOrder() {
10-
return new Order(ObjectId.get(), new Product(UUID.randomUUID(), BigDecimal.TEN, "productName"));
8+
return new Order(UUID.randomUUID(), new Product(UUID.randomUUID(), BigDecimal.TEN, "productName"));
119
}
1210

1311
public static Order getCompletedOrder() {

0 commit comments

Comments
 (0)