feat(order): 점주용 지난 주문 Back-end 구현
- Validator 추가 - Pageable 추가
This commit is contained in:
@@ -0,0 +1,31 @@
|
||||
package com.justpickup.orderservice.domain.order.dto;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import org.springframework.format.annotation.DateTimeFormat;
|
||||
|
||||
import javax.validation.constraints.NotNull;
|
||||
import java.time.LocalDate;
|
||||
import java.time.LocalDateTime;
|
||||
import java.time.LocalTime;
|
||||
|
||||
@Data @NoArgsConstructor @AllArgsConstructor
|
||||
public class PrevOrderSearch {
|
||||
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@NotNull(message = "시작일은 필수 값입니다.")
|
||||
private LocalDate startDate;
|
||||
|
||||
@DateTimeFormat(pattern = "yyyy-MM-dd")
|
||||
@NotNull(message = "종료일은 필수 값입니다.")
|
||||
private LocalDate endDate;
|
||||
|
||||
public LocalDateTime getStartDateTime() {
|
||||
return startDate.atStartOfDay();
|
||||
}
|
||||
|
||||
public LocalDateTime getEndDateTime() {
|
||||
return LocalDateTime.of(endDate, LocalTime.of(23, 59, 59));
|
||||
}
|
||||
}
|
||||
@@ -1,10 +1,14 @@
|
||||
package com.justpickup.orderservice.domain.order.repository;
|
||||
|
||||
import com.justpickup.orderservice.domain.order.dto.OrderSearchCondition;
|
||||
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
|
||||
import com.justpickup.orderservice.domain.order.entity.Order;
|
||||
import com.querydsl.core.types.dsl.BooleanExpression;
|
||||
import com.querydsl.jpa.impl.JPAQueryFactory;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.support.PageableExecutionUtils;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
import java.time.LocalDateTime;
|
||||
@@ -48,4 +52,32 @@ public class OrderRepositoryCustom {
|
||||
return lastOrderId != null ? order.id.lt(lastOrderId) : null;
|
||||
}
|
||||
|
||||
public Page<Order> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId) {
|
||||
// 카운트 가져오기
|
||||
Long count = queryFactory
|
||||
.select(order.countDistinct())
|
||||
.from(order)
|
||||
.innerJoin(order.transaction)
|
||||
.where(
|
||||
order.orderTime.between(search.getStartDateTime(), search.getEndDateTime()),
|
||||
order.storeId.eq(storeId)
|
||||
)
|
||||
.fetchOne();
|
||||
|
||||
// 데이터 가져오기
|
||||
List<Order> orders = queryFactory
|
||||
.selectFrom(order)
|
||||
.join(order.transaction).fetchJoin()
|
||||
.where(
|
||||
order.orderTime.between(search.getStartDateTime(), search.getEndDateTime()),
|
||||
order.storeId.eq(storeId)
|
||||
)
|
||||
.orderBy(order.orderTime.desc())
|
||||
.limit(1)
|
||||
.offset(pageable.getOffset())
|
||||
.distinct()
|
||||
.fetch();
|
||||
|
||||
return PageableExecutionUtils.getPage(orders, pageable, () -> count);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,9 +2,14 @@ package com.justpickup.orderservice.domain.order.service;
|
||||
|
||||
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 org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
public interface OrderService {
|
||||
List<OrderDto> findOrderMain(OrderSearchCondition condition, Long storeId);
|
||||
|
||||
Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId);
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ package com.justpickup.orderservice.domain.order.service;
|
||||
|
||||
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.Order;
|
||||
import com.justpickup.orderservice.domain.order.repository.OrderRepository;
|
||||
import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom;
|
||||
import com.justpickup.orderservice.global.client.store.GetItemResponse;
|
||||
@@ -10,6 +12,9 @@ import com.justpickup.orderservice.global.client.user.GetCustomerResponse;
|
||||
import com.justpickup.orderservice.global.client.user.UserClient;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.domain.Page;
|
||||
import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.support.PageableExecutionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
@@ -52,4 +57,16 @@ public class OrderServiceImpl implements OrderService {
|
||||
|
||||
return orderDtoList;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId) {
|
||||
Page<Order> orderPage = orderRepositoryCustom.findPrevOrderMain(search, pageable, storeId);
|
||||
|
||||
List<OrderDto> orderDtoList = orderPage.getContent()
|
||||
.stream()
|
||||
.map(OrderDto::createFullField)
|
||||
.collect(Collectors.toList());
|
||||
|
||||
return PageableExecutionUtils.getPage(orderDtoList, pageable, orderPage::getTotalElements);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -0,0 +1,28 @@
|
||||
package com.justpickup.orderservice.domain.order.validator;
|
||||
|
||||
import com.justpickup.orderservice.domain.order.dto.PrevOrderSearch;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.validation.Errors;
|
||||
import org.springframework.validation.Validator;
|
||||
|
||||
import java.time.LocalDate;
|
||||
|
||||
@Component
|
||||
public class PrevOrderSearchValidator implements Validator {
|
||||
|
||||
@Override
|
||||
public boolean supports(Class<?> clazz) {
|
||||
return PrevOrderSearch.class.equals(clazz);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void validate(Object target, Errors errors) {
|
||||
PrevOrderSearch search = (PrevOrderSearch) target;
|
||||
|
||||
LocalDate startDate = search.getStartDate();
|
||||
LocalDate endDate = search.getEndDate();
|
||||
if (startDate.isAfter(endDate)) {
|
||||
errors.rejectValue("startDate", "isAfter", "시작일은 종료일보다 클 수 없습니다.");
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,8 +2,10 @@ 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;
|
||||
@@ -11,8 +13,13 @@ import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
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;
|
||||
|
||||
@@ -27,6 +34,7 @@ import java.util.stream.Collectors;
|
||||
public class OrderController {
|
||||
|
||||
private final OrderService orderService;
|
||||
private final PrevOrderSearchValidator prevOrderSearchValidator;
|
||||
|
||||
@GetMapping("/orderMain")
|
||||
public ResponseEntity orderMain(@Valid OrderSearchCondition condition) {
|
||||
@@ -81,4 +89,17 @@ public class OrderController {
|
||||
this.itemName = orderItemDto.getItemName();
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping("/prevOrder")
|
||||
public ResponseEntity<Result> findPrevOrder(@Valid PrevOrderSearch prevOrderSearch,
|
||||
@PageableDefault(page = 0, size = 1) Pageable pageable,
|
||||
BindingResult bindingResult) throws BindException {
|
||||
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
||||
prevOrderSearchValidator.validate(prevOrderSearch, bindingResult);
|
||||
if (bindingResult.hasErrors()) throw new BindException(bindingResult);
|
||||
|
||||
Page<OrderDto> prevOrderMain = orderService.findPrevOrderMain(prevOrderSearch, pageable, 1L);
|
||||
|
||||
return ResponseEntity.ok(Result.createSuccessResult(prevOrderMain));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user