Skip to content

Commit 982d45b

Browse files
committed
Add getOrders and getOrder by orderNumber API handler
1 parent 09513e7 commit 982d45b

4 files changed

Lines changed: 69 additions & 0 deletions

File tree

order-service/src/main/java/com/supersection/bookstore/orders/domain/OrderMapper.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
package com.supersection.bookstore.orders.domain;
22

33
import com.supersection.bookstore.orders.domain.dtos.CreateOrderRequest;
4+
import com.supersection.bookstore.orders.domain.dtos.OrderDTO;
45
import com.supersection.bookstore.orders.domain.models.OrderItem;
56
import com.supersection.bookstore.orders.domain.models.OrderStatus;
67
import java.util.HashSet;
78
import java.util.Set;
89
import java.util.UUID;
10+
import java.util.stream.Collectors;
911

1012
class OrderMapper {
1113

@@ -32,4 +34,20 @@ static OrderEntity convertToEntity(CreateOrderRequest request) {
3234
newOrder.setItems(orderItems);
3335
return newOrder;
3436
}
37+
38+
static OrderDTO convertToDTO(OrderEntity order) {
39+
Set<OrderItem> orderItems = order.getItems().stream()
40+
.map(item -> new OrderItem(item.getCode(), item.getName(), item.getPrice(), item.getQuantity()))
41+
.collect(Collectors.toSet());
42+
43+
return new OrderDTO(
44+
order.getOrderNumber(),
45+
order.getUserName(),
46+
orderItems,
47+
order.getCustomer(),
48+
order.getDeliveryAddress(),
49+
order.getStatus(),
50+
order.getComments(),
51+
order.getCreatedAt());
52+
}
3553
}

order-service/src/main/java/com/supersection/bookstore/orders/domain/OrderRepository.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
11
package com.supersection.bookstore.orders.domain;
22

33
import com.supersection.bookstore.orders.domain.models.OrderStatus;
4+
import com.supersection.bookstore.orders.domain.models.OrderSummary;
45
import java.util.List;
56
import java.util.Optional;
67
import org.springframework.data.jpa.repository.JpaRepository;
8+
import org.springframework.data.jpa.repository.Query;
79
import org.springframework.stereotype.Repository;
810

911
@Repository
@@ -18,4 +20,20 @@ default void updateOrderStatus(String orderNumber, OrderStatus status) {
1820
order.setStatus(status);
1921
this.save(order);
2022
}
23+
24+
@Query(
25+
"""
26+
select new com.supersection.bookstore.orders.domain.models.OrderSummary(o.orderNumber, o.status)
27+
from OrderEntity o
28+
where o.userName = :userName
29+
""")
30+
List<OrderSummary> findByUserName(String userName);
31+
32+
@Query(
33+
"""
34+
select distinct o
35+
from OrderEntity o left join fetch o.items
36+
where o.userName = :userName and o.orderNumber = :orderNumber
37+
""")
38+
Optional<OrderEntity> findByUserNameAndOrderNumber(String userName, String orderNumber);
2139
}

order-service/src/main/java/com/supersection/bookstore/orders/domain/OrderService.java

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

33
import com.supersection.bookstore.orders.domain.dtos.CreateOrderRequest;
44
import com.supersection.bookstore.orders.domain.dtos.CreateOrderResponse;
5+
import com.supersection.bookstore.orders.domain.dtos.OrderDTO;
56
import com.supersection.bookstore.orders.domain.models.OrderCreatedEvent;
67
import com.supersection.bookstore.orders.domain.models.OrderStatus;
8+
import com.supersection.bookstore.orders.domain.models.OrderSummary;
79
import jakarta.validation.Valid;
810
import java.util.List;
11+
import java.util.Optional;
912
import org.slf4j.Logger;
1013
import org.slf4j.LoggerFactory;
1114
import org.springframework.stereotype.Service;
@@ -41,6 +44,16 @@ public CreateOrderResponse createOrder(String userName, @Valid CreateOrderReques
4144
return new CreateOrderResponse(savedOrder.getOrderNumber());
4245
}
4346

47+
public List<OrderSummary> findOrders(String userName) {
48+
return orderRepository.findByUserName(userName);
49+
}
50+
51+
public Optional<OrderDTO> findUserOrder(String userName, String orderNumber) {
52+
return orderRepository
53+
.findByUserNameAndOrderNumber(userName, orderNumber)
54+
.map(OrderMapper::convertToDTO);
55+
}
56+
4457
public void processNewOrders() {
4558
List<OrderEntity> orders = orderRepository.findByStatus(OrderStatus.NEW);
4659
log.info("Found {} new orders to process", orders.size());

order-service/src/main/java/com/supersection/bookstore/orders/web/controllers/OrderController.java

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,11 @@
44
import com.supersection.bookstore.orders.domain.SecurityService;
55
import com.supersection.bookstore.orders.domain.dtos.CreateOrderRequest;
66
import com.supersection.bookstore.orders.domain.dtos.CreateOrderResponse;
7+
import com.supersection.bookstore.orders.domain.dtos.OrderDTO;
8+
import com.supersection.bookstore.orders.domain.exception.OrderNotFoundException;
9+
import com.supersection.bookstore.orders.domain.models.OrderSummary;
710
import jakarta.validation.Valid;
11+
import java.util.List;
812
import org.slf4j.Logger;
913
import org.slf4j.LoggerFactory;
1014
import org.springframework.http.HttpStatus;
@@ -30,4 +34,20 @@ CreateOrderResponse createOrder(@Valid @RequestBody CreateOrderRequest request)
3034
log.info("Creating order for user: {}", userName);
3135
return orderService.createOrder(userName, request);
3236
}
37+
38+
@GetMapping
39+
List<OrderSummary> getOrders() {
40+
String userName = securityService.getLoginUserName();
41+
log.info("Fetching orders for user: {}", userName);
42+
return orderService.findOrders(userName);
43+
}
44+
45+
@GetMapping(value = "/{orderNumber}")
46+
OrderDTO getOrder(@PathVariable(value = "orderNumber") String orderNumber) {
47+
log.info("Fetching order by id: {}", orderNumber);
48+
String userName = securityService.getLoginUserName();
49+
return orderService
50+
.findUserOrder(userName, orderNumber)
51+
.orElseThrow(() -> new OrderNotFoundException(orderNumber));
52+
}
3353
}

0 commit comments

Comments
 (0)