From 41be382a3fc84ac49485c3e8ce3d4106ccc4dd02 Mon Sep 17 00:00:00 2001 From: Rishi Raj Date: Wed, 26 Feb 2025 22:02:01 +0100 Subject: [PATCH] Refactor code. --- .../om/order/controller/OrderController.java | 33 +++++++++++++++++-- .../src/main/java/om/order/dto/OrderReq.java | 1 - .../src/main/java/om/order/dto/OrderResp.java | 7 ++++ .../main/java/om/order/dto/UserDetails.java | 3 ++ .../exception/OrderExceptionHandler.java | 3 +- .../java/om/order/service/IOrderService.java | 6 ++++ .../om/order/service/OrderServiceImpl.java | 8 +++++ .../java/om/order/OrderApplicationTests.java | 5 +++ 8 files changed, 61 insertions(+), 5 deletions(-) create mode 100644 order/src/main/java/om/order/dto/OrderResp.java create mode 100644 order/src/main/java/om/order/dto/UserDetails.java diff --git a/order/src/main/java/om/order/controller/OrderController.java b/order/src/main/java/om/order/controller/OrderController.java index 9f4e471..a233b36 100644 --- a/order/src/main/java/om/order/controller/OrderController.java +++ b/order/src/main/java/om/order/controller/OrderController.java @@ -1,28 +1,55 @@ package om.order.controller; +import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import om.order.config.Constants; import om.order.dto.OrderReq; +import om.order.dto.OrderResp; import om.order.service.IOrderService; +import org.springframework.data.domain.PageRequest; +import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; +import java.util.List; + @RequiredArgsConstructor @RestController @Slf4j -@RequestMapping("/api/v1/orders") +@RequestMapping(value = "/api/orders",headers = "Accept-Version=v1") + public class OrderController { private final IOrderService orderService; + // modern way to write Controller Endpoints. Older way is depicted in ResponseEntity> ProductController.getAllProducts() @PostMapping - @ResponseStatus(HttpStatus.CREATED) // modern method to specify Status Code - public String createOrder(@RequestBody OrderReq orderReq) { + @ResponseStatus(HttpStatus.CREATED) // 201 + public String createOrder(@Valid @RequestBody OrderReq orderReq) { orderService.createOrder(orderReq); log.debug(Constants.newOrderPlaced); return Constants.newOrderPlaced; } + + //TODO add getOrders() + @GetMapping + @ResponseStatus(HttpStatus.OK) + public List getOrders( + @RequestParam(defaultValue = "0") int pageNumber, + @RequestParam(defaultValue = "5") int pageSize + ) { + Pageable pageable = PageRequest.of(pageNumber, pageSize); + return orderService.getOrders(pageable); + } + + //TODO add getOrderByOrderNumber() + + //TODO add getOrderByUserEmail() + + //TODO add getOrderByUserName() } diff --git a/order/src/main/java/om/order/dto/OrderReq.java b/order/src/main/java/om/order/dto/OrderReq.java index 8e71f1b..ea908ad 100644 --- a/order/src/main/java/om/order/dto/OrderReq.java +++ b/order/src/main/java/om/order/dto/OrderReq.java @@ -4,5 +4,4 @@ public record OrderReq(Long id, String orderNumber, String itemSkuCode, BigDecimal pricePerItem,Integer quantity,UserDetails userDetails) { - public record UserDetails(String emailAddress, String name) {} } diff --git a/order/src/main/java/om/order/dto/OrderResp.java b/order/src/main/java/om/order/dto/OrderResp.java new file mode 100644 index 0000000..0ed27e3 --- /dev/null +++ b/order/src/main/java/om/order/dto/OrderResp.java @@ -0,0 +1,7 @@ +package om.order.dto; + +import java.math.BigDecimal; + +public record OrderResp(Long id, String orderNumber, String itemSkuCode, + BigDecimal pricePerItem, Integer quantity, UserDetails userDetails) { +} diff --git a/order/src/main/java/om/order/dto/UserDetails.java b/order/src/main/java/om/order/dto/UserDetails.java new file mode 100644 index 0000000..583e85b --- /dev/null +++ b/order/src/main/java/om/order/dto/UserDetails.java @@ -0,0 +1,3 @@ +package om.order.dto; +public record UserDetails(String emailAddress, String name) {} + diff --git a/order/src/main/java/om/order/exception/OrderExceptionHandler.java b/order/src/main/java/om/order/exception/OrderExceptionHandler.java index 9c8ee38..dec2816 100644 --- a/order/src/main/java/om/order/exception/OrderExceptionHandler.java +++ b/order/src/main/java/om/order/exception/OrderExceptionHandler.java @@ -5,11 +5,12 @@ import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.RestControllerAdvice; import org.springframework.web.context.request.WebRequest; import java.time.LocalDateTime; -@ControllerAdvice +@RestControllerAdvice public class OrderExceptionHandler /*extends ResponseEntityExceptionHandler*/ { @ExceptionHandler({InventoryShortOfStockException.class}) diff --git a/order/src/main/java/om/order/service/IOrderService.java b/order/src/main/java/om/order/service/IOrderService.java index 54611ce..ff3292b 100644 --- a/order/src/main/java/om/order/service/IOrderService.java +++ b/order/src/main/java/om/order/service/IOrderService.java @@ -1,11 +1,17 @@ package om.order.service; import om.order.dto.OrderReq; +import om.order.dto.OrderResp; +import org.springframework.data.domain.Pageable; + +import java.util.List; public interface IOrderService { public void createOrder(OrderReq orderReq); + public List getOrders(Pageable pageable); + /* ** To check items from shopping card out ** * 1. View the list of items I am buying. diff --git a/order/src/main/java/om/order/service/OrderServiceImpl.java b/order/src/main/java/om/order/service/OrderServiceImpl.java index 06893c8..b7c0028 100644 --- a/order/src/main/java/om/order/service/OrderServiceImpl.java +++ b/order/src/main/java/om/order/service/OrderServiceImpl.java @@ -6,12 +6,16 @@ import om.order.config.Constants; import om.order.dao.OrderRepo; import om.order.dto.OrderReq; +import om.order.dto.OrderResp; import om.order.entity.Order; import om.order.event.OrderPlacedEvent; +import org.springframework.data.domain.Pageable; import org.springframework.kafka.core.KafkaTemplate; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import java.util.ArrayList; +import java.util.List; import java.util.UUID; @Transactional @Service @RequiredArgsConstructor @Slf4j @@ -49,4 +53,8 @@ public void createOrder(OrderReq orderReq) { throw new InventoryShortOfStockException(orderReq.itemSkuCode(), orderReq.quantity()); } } + + @Override + public List getOrders(Pageable pageable){return new ArrayList<>();} + } diff --git a/order/src/test/java/om/order/OrderApplicationTests.java b/order/src/test/java/om/order/OrderApplicationTests.java index 3db6170..e122160 100644 --- a/order/src/test/java/om/order/OrderApplicationTests.java +++ b/order/src/test/java/om/order/OrderApplicationTests.java @@ -65,6 +65,11 @@ void shouldSubmitOrder() { assertThat(responseBodyString, Matchers.is(Constants.newOrderPlaced)); } + @Test + void shouldReturnOrders() { + + } + @Test void contextLoads() { }