refactor(order-service): 주문, 지난 주문 url 매핑 변경
- api controller 추가 - 테스트 클래스 이관
This commit is contained in:
@@ -1,159 +1,12 @@
|
|||||||
package com.justpickup.orderservice.domain.order.web;
|
package com.justpickup.orderservice.domain.order.web;
|
||||||
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderDto;
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
|
|
||||||
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
|
|
||||||
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
|
|
||||||
import com.justpickup.orderservice.domain.order.service.OrderService;
|
|
||||||
import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator;
|
|
||||||
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
|
||||||
import com.justpickup.orderservice.global.dto.Result;
|
|
||||||
import lombok.AllArgsConstructor;
|
|
||||||
import lombok.Data;
|
|
||||||
import lombok.NoArgsConstructor;
|
|
||||||
import lombok.RequiredArgsConstructor;
|
import lombok.RequiredArgsConstructor;
|
||||||
import lombok.extern.slf4j.Slf4j;
|
import lombok.extern.slf4j.Slf4j;
|
||||||
import org.springframework.data.domain.Page;
|
|
||||||
import org.springframework.data.domain.Pageable;
|
|
||||||
import org.springframework.data.web.PageableDefault;
|
|
||||||
import org.springframework.http.HttpStatus;
|
|
||||||
import org.springframework.http.ResponseEntity;
|
|
||||||
import org.springframework.validation.BindException;
|
|
||||||
import org.springframework.validation.BindingResult;
|
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
|
||||||
import org.springframework.web.bind.annotation.RestController;
|
import org.springframework.web.bind.annotation.RestController;
|
||||||
|
|
||||||
import javax.validation.Valid;
|
|
||||||
import java.time.LocalDateTime;
|
|
||||||
import java.time.format.DateTimeFormatter;
|
|
||||||
import java.util.List;
|
|
||||||
import java.util.stream.Collectors;
|
|
||||||
|
|
||||||
@RestController
|
@RestController
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@Slf4j
|
@Slf4j
|
||||||
public class OrderController {
|
public class OrderController {
|
||||||
|
|
||||||
private final OrderService orderService;
|
|
||||||
private final PrevOrderSearchValidator prevOrderSearchValidator;
|
|
||||||
|
|
||||||
@GetMapping("/orderMain")
|
|
||||||
public ResponseEntity<Result> orderMain(@Valid OrderSearchCondition condition) {
|
|
||||||
// TODO: 2022/02/04 JWT 구현 시 변경 요망
|
|
||||||
Long userId = 1L;
|
|
||||||
Long storeId = 1L;
|
|
||||||
|
|
||||||
List<OrderDto> orderDto = orderService.findOrderMain(condition, storeId);
|
|
||||||
|
|
||||||
List<OrderMainResponse> orderMainResponses = orderDto.stream()
|
|
||||||
.map(OrderMainResponse::new)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
return ResponseEntity.status(HttpStatus.OK)
|
|
||||||
.body(Result.createSuccessResult(orderMainResponses));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data @NoArgsConstructor @AllArgsConstructor
|
|
||||||
static class OrderMainResponse {
|
|
||||||
private Long orderId;
|
|
||||||
private Long userId;
|
|
||||||
private String userName;
|
|
||||||
private List<OrderItemResponse> orderItemResponses;
|
|
||||||
private OrderStatus orderStatus;
|
|
||||||
private String orderTime;
|
|
||||||
|
|
||||||
public OrderMainResponse(OrderDto orderDto) {
|
|
||||||
List<OrderItemResponse> orderItemDtoList = orderDto.getOrderItemDtoList()
|
|
||||||
.stream()
|
|
||||||
.map(OrderItemResponse::new)
|
|
||||||
.collect(Collectors.toList());
|
|
||||||
|
|
||||||
this.orderId = orderDto.getId();
|
|
||||||
this.userId = orderDto.getUserId();
|
|
||||||
this.userName = orderDto.getUserName();
|
|
||||||
this.orderItemResponses = orderItemDtoList;
|
|
||||||
this.orderStatus = orderDto.getOrderStatus();
|
|
||||||
this.orderTime = orderDto.getOrderTime()
|
|
||||||
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
|
||||||
static class OrderItemResponse {
|
|
||||||
private Long orderItemId;
|
|
||||||
private Long itemId;
|
|
||||||
private String itemName;
|
|
||||||
|
|
||||||
public OrderItemResponse(OrderItemDto orderItemDto) {
|
|
||||||
this.orderItemId = orderItemDto.getId();
|
|
||||||
this.itemId = orderItemDto.getItemId();
|
|
||||||
this.itemName = orderItemDto.getItemName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@GetMapping("/prevOrder")
|
|
||||||
public ResponseEntity<Result> findPrevOrder(@Valid PrevOrderSearch prevOrderSearch,
|
|
||||||
@PageableDefault(page = 0, size = 10) Pageable pageable,
|
|
||||||
BindingResult bindingResult) throws BindException {
|
|
||||||
// validation
|
|
||||||
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
|
||||||
prevOrderSearchValidator.validate(prevOrderSearch, bindingResult);
|
|
||||||
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
|
||||||
|
|
||||||
// get data
|
|
||||||
Page<OrderDto> prevOrderMain = orderService.findPrevOrderMain(prevOrderSearch, pageable, 1L);
|
|
||||||
|
|
||||||
// format data
|
|
||||||
ResponsePrevOrder responsePrevOrder =
|
|
||||||
new ResponsePrevOrder(prevOrderMain.getContent(), prevOrderMain.getNumber(), prevOrderMain.getTotalPages());
|
|
||||||
return ResponseEntity.ok(Result.createSuccessResult(responsePrevOrder));
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data @AllArgsConstructor @NoArgsConstructor
|
|
||||||
static class ResponsePrevOrder {
|
|
||||||
private List<OrderVo> orders;
|
|
||||||
private Page page;
|
|
||||||
|
|
||||||
public ResponsePrevOrder(List<OrderDto> orderDtoList, int startPage, int totalPage) {
|
|
||||||
orders = orderDtoList.stream().map(OrderVo::new).collect(Collectors.toList());
|
|
||||||
page = new Page(startPage, totalPage);
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
|
||||||
static class OrderVo {
|
|
||||||
private Long orderId;
|
|
||||||
private OrderStatus orderStatus;
|
|
||||||
private String orderTime;
|
|
||||||
private Long orderPrice;
|
|
||||||
private String userName;
|
|
||||||
private List<OrderItemVo> orderItems;
|
|
||||||
|
|
||||||
public OrderVo(OrderDto orderDto) {
|
|
||||||
this.orderId = orderDto.getId();
|
|
||||||
this.orderStatus = orderDto.getOrderStatus();
|
|
||||||
this.orderTime = orderDto.getOrderTime().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
|
|
||||||
this.orderPrice = orderDto.getOrderPrice();
|
|
||||||
this.userName = orderDto.getUserName();
|
|
||||||
this.orderItems = orderDto.getOrderItemDtoList()
|
|
||||||
.stream().map(OrderItemVo::new).collect(Collectors.toList());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data
|
|
||||||
static class OrderItemVo {
|
|
||||||
private Long orderItemId;
|
|
||||||
private String orderItemName;
|
|
||||||
|
|
||||||
public OrderItemVo(OrderItemDto orderItemDto) {
|
|
||||||
this.orderItemId = orderItemDto.getId();
|
|
||||||
this.orderItemName = orderItemDto.getItemName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
@Data @AllArgsConstructor
|
|
||||||
static class Page {
|
|
||||||
int startPage;
|
|
||||||
int totalPage;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -6,6 +6,7 @@ import com.justpickup.orderservice.domain.order.dto.OrderDto;
|
|||||||
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
|
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
|
||||||
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
|
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
|
||||||
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
|
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
|
||||||
|
import com.justpickup.orderservice.domain.order.repository.OrderRepository;
|
||||||
import com.justpickup.orderservice.domain.order.service.OrderService;
|
import com.justpickup.orderservice.domain.order.service.OrderService;
|
||||||
import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator;
|
import com.justpickup.orderservice.domain.order.validator.PrevOrderSearchValidator;
|
||||||
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
||||||
@@ -28,6 +29,7 @@ import java.time.LocalDateTime;
|
|||||||
import java.time.format.DateTimeFormatter;
|
import java.time.format.DateTimeFormatter;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.mockito.BDDMockito.given;
|
import static org.mockito.BDDMockito.given;
|
||||||
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
|
import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document;
|
||||||
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
|
import static org.springframework.restdocs.mockmvc.RestDocumentationRequestBuilders.get;
|
||||||
@@ -39,10 +41,10 @@ import static org.springframework.test.web.servlet.result.MockMvcResultHandlers.
|
|||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
|
||||||
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
|
||||||
|
|
||||||
@WebMvcTest(OrderController.class)
|
@WebMvcTest(OrderOwnerApiController.class)
|
||||||
@Import(TestConfig.class)
|
@Import(TestConfig.class)
|
||||||
@AutoConfigureRestDocs(uriHost = "127.0.0.1", uriPort = 8001)
|
@AutoConfigureRestDocs(uriHost = "http://just-pickup.com", uriPort = 8001)
|
||||||
class OrderControllerTest {
|
class OrderOwnerApiControllerTest {
|
||||||
|
|
||||||
@Autowired
|
@Autowired
|
||||||
ObjectMapper objectMapper;
|
ObjectMapper objectMapper;
|
||||||
@@ -56,8 +58,13 @@ class OrderControllerTest {
|
|||||||
@SpyBean
|
@SpyBean
|
||||||
PrevOrderSearchValidator prevOrderSearchValidator;
|
PrevOrderSearchValidator prevOrderSearchValidator;
|
||||||
|
|
||||||
|
@MockBean
|
||||||
|
OrderRepository orderRepository;
|
||||||
|
|
||||||
|
private final String url = "/api/owner/order";
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("점주 서비스 - 주문 페이지")
|
@DisplayName("[API] [GET] 점주 서비스 - 주문 페이지")
|
||||||
void getOrderMain() throws Exception {
|
void getOrderMain() throws Exception {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
String orderDate = "2022-02-03";
|
String orderDate = "2022-02-03";
|
||||||
@@ -70,7 +77,8 @@ class OrderControllerTest {
|
|||||||
.willReturn(getOrderMainDtoList());
|
.willReturn(getOrderMainDtoList());
|
||||||
|
|
||||||
// WHEN
|
// WHEN
|
||||||
ResultActions actions = mockMvc.perform(get("/orderMain")
|
|
||||||
|
ResultActions actions = mockMvc.perform(get(url + "/order-main")
|
||||||
.param("orderDate", orderDate)
|
.param("orderDate", orderDate)
|
||||||
.param("lastOrderId", String.valueOf(lastOrderId))
|
.param("lastOrderId", String.valueOf(lastOrderId))
|
||||||
);
|
);
|
||||||
@@ -85,35 +93,35 @@ class OrderControllerTest {
|
|||||||
.andExpect(jsonPath("data[*].orderTime").exists())
|
.andExpect(jsonPath("data[*].orderTime").exists())
|
||||||
.andDo(print())
|
.andDo(print())
|
||||||
.andDo(document("orderMain-get",
|
.andDo(document("orderMain-get",
|
||||||
requestParameters(
|
requestParameters(
|
||||||
parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"),
|
parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"),
|
||||||
parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호")
|
parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호")
|
||||||
),
|
),
|
||||||
responseFields(
|
responseFields(
|
||||||
fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"),
|
fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"),
|
||||||
fieldWithPath("message").description("메시지"),
|
fieldWithPath("message").description("메시지"),
|
||||||
fieldWithPath("data[*].orderId").description("주문 고유 번호"),
|
fieldWithPath("data[*].orderId").description("주문 고유 번호"),
|
||||||
fieldWithPath("data[*].userId").description("고객 고유 번호"),
|
fieldWithPath("data[*].userId").description("고객 고유 번호"),
|
||||||
fieldWithPath("data[*].userName").description("고객 이름"),
|
fieldWithPath("data[*].userName").description("고객 이름"),
|
||||||
fieldWithPath("data[*].orderItemResponses[*].orderItemId").description("장바구니 고유번호"),
|
fieldWithPath("data[*].orderItemResponses[*].orderItemId").description("장바구니 고유번호"),
|
||||||
fieldWithPath("data[*].orderItemResponses[*].itemId").description("상품 고유번호"),
|
fieldWithPath("data[*].orderItemResponses[*].itemId").description("상품 고유번호"),
|
||||||
fieldWithPath("data[*].orderItemResponses[*].itemName").description("상품 이름"),
|
fieldWithPath("data[*].orderItemResponses[*].itemName").description("상품 이름"),
|
||||||
fieldWithPath("data[*].orderStatus").description("주문 상태"),
|
fieldWithPath("data[*].orderStatus").description("주문 상태"),
|
||||||
fieldWithPath("data[*].orderTime").description("주문 시간")
|
fieldWithPath("data[*].orderTime").description("주문 시간")
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("점주 서비스 - 주문 페이지 (잘못된 파라미터 형식)")
|
@DisplayName("[API] [GET] 점주 서비스 - 주문 페이지 (잘못된 파라미터 형식)")
|
||||||
void getOrderMainBadRequestException() throws Exception {
|
void getOrderMainBadRequestException() throws Exception {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
String orderDate = "20220203";
|
String orderDate = "20220203";
|
||||||
Long lastOrderId = 7L;
|
Long lastOrderId = 7L;
|
||||||
|
|
||||||
// WHEN
|
// WHEN
|
||||||
ResultActions actions = mockMvc.perform(get("/orderMain")
|
ResultActions actions = mockMvc.perform(get(url + "/order-main")
|
||||||
.param("orderDate", orderDate)
|
.param("orderDate", orderDate)
|
||||||
.param("lastOrderId", String.valueOf(lastOrderId))
|
.param("lastOrderId", String.valueOf(lastOrderId))
|
||||||
);
|
);
|
||||||
@@ -125,15 +133,15 @@ class OrderControllerTest {
|
|||||||
.andExpect(jsonPath("data").isEmpty())
|
.andExpect(jsonPath("data").isEmpty())
|
||||||
.andDo(print())
|
.andDo(print())
|
||||||
.andDo(document("orderMain-get-badParameterException",
|
.andDo(document("orderMain-get-badParameterException",
|
||||||
requestParameters(
|
requestParameters(
|
||||||
parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"),
|
parameterWithName("orderDate").description("주문 날짜 YYYY-MM-DD"),
|
||||||
parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호")
|
parameterWithName("lastOrderId").optional().description("페이지의 마지막 주문 고유 번호")
|
||||||
),
|
),
|
||||||
responseFields(
|
responseFields(
|
||||||
fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"),
|
fieldWithPath("code").description("결과 코드 SUCCESS/ERROR"),
|
||||||
fieldWithPath("message").description("메시지"),
|
fieldWithPath("message").description("메시지"),
|
||||||
fieldWithPath("data").description("데이터")
|
fieldWithPath("data").description("데이터")
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
;
|
;
|
||||||
@@ -182,7 +190,7 @@ class OrderControllerTest {
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("점주 서비스 - 지난 주문 페이지")
|
@DisplayName("[API] [GET] 점주 서비스 - 지난 주문 페이지")
|
||||||
void getPrevOrder() throws Exception {
|
void getPrevOrder() throws Exception {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
LocalDate startDate = LocalDate.of(2022, 2, 3);
|
LocalDate startDate = LocalDate.of(2022, 2, 3);
|
||||||
@@ -197,7 +205,7 @@ class OrderControllerTest {
|
|||||||
);
|
);
|
||||||
|
|
||||||
// WHEN
|
// WHEN
|
||||||
ResultActions actions = mockMvc.perform(get("/prevOrder")
|
ResultActions actions = mockMvc.perform(get(url + "/prev-order")
|
||||||
.param("startDate", startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
.param("startDate", startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
||||||
.param("endDate", endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
.param("endDate", endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
||||||
.param("page", page)
|
.param("page", page)
|
||||||
@@ -236,12 +244,12 @@ class OrderControllerTest {
|
|||||||
fieldWithPath("data.page.startPage").description("현재 페이지 (0부터 시작)"),
|
fieldWithPath("data.page.startPage").description("현재 페이지 (0부터 시작)"),
|
||||||
fieldWithPath("data.page.totalPage").description("총 페이지 개수")
|
fieldWithPath("data.page.totalPage").description("총 페이지 개수")
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@DisplayName("점주 서비스 - 지난 주문 페이지 (파라미터 오류)")
|
@DisplayName("[API] [GET] 점주 서비스 - 지난 주문 페이지 (파라미터 오류)")
|
||||||
void getPrevOrderBindException() throws Exception {
|
void getPrevOrderBindException() throws Exception {
|
||||||
// GIVEN
|
// GIVEN
|
||||||
LocalDate startDate = LocalDate.of(2023, 2, 3);
|
LocalDate startDate = LocalDate.of(2023, 2, 3);
|
||||||
@@ -251,7 +259,7 @@ class OrderControllerTest {
|
|||||||
PrevOrderSearch search = new PrevOrderSearch(startDate, endDate);
|
PrevOrderSearch search = new PrevOrderSearch(startDate, endDate);
|
||||||
|
|
||||||
// THEN
|
// THEN
|
||||||
ResultActions actions = mockMvc.perform(get("/prevOrder")
|
ResultActions actions = mockMvc.perform(get(url + "/prev-order")
|
||||||
.param("startDate", startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
.param("startDate", startDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
||||||
.param("endDate", endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
.param("endDate", endDate.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")))
|
||||||
.param("page", page)
|
.param("page", page)
|
||||||
@@ -274,7 +282,7 @@ class OrderControllerTest {
|
|||||||
fieldWithPath("message").description("메시지"),
|
fieldWithPath("message").description("메시지"),
|
||||||
fieldWithPath("data").description("데이터")
|
fieldWithPath("data").description("데이터")
|
||||||
)
|
)
|
||||||
))
|
))
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user