feat(order): 점주 서비스 주문 Feign 클라이언트 통신 추가
This commit is contained in:
@@ -50,6 +50,10 @@ public class OrderMainDto {
|
||||
.orderItems(orderItems)
|
||||
.build();
|
||||
}
|
||||
|
||||
public void changeUserName(String userName) {
|
||||
this.userName = userName;
|
||||
}
|
||||
}
|
||||
|
||||
@Getter @Builder
|
||||
@@ -64,5 +68,9 @@ public class OrderMainDto {
|
||||
.itemId(orderItem.getItemId())
|
||||
.build();
|
||||
}
|
||||
|
||||
public void changeItemName(String itemName) {
|
||||
this.itemName = itemName;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -29,11 +29,11 @@ public class Order extends BaseEntity {
|
||||
|
||||
private Long storeId;
|
||||
|
||||
private Long orderPrice;
|
||||
private long orderPrice;
|
||||
|
||||
private LocalDateTime orderTime;
|
||||
|
||||
private Long usedPoint;
|
||||
private long usedPoint;
|
||||
|
||||
@Enumerated(EnumType.STRING)
|
||||
private OrderStatus orderStatus;
|
||||
@@ -45,32 +45,11 @@ public class Order extends BaseEntity {
|
||||
@OneToMany(mappedBy = "order", cascade = CascadeType.ALL)
|
||||
private List<OrderItem> orderItems = new ArrayList<>();
|
||||
|
||||
public static Order of(Long userId, Long userCouponId, Long storeId, Long orderPrice,
|
||||
Transaction transaction, OrderItem... orderItems) {
|
||||
public static Order of(Long userId, Long userCouponId, Long storeId, OrderItem orderItem) {
|
||||
Order order = new Order();
|
||||
order.userId = userId;
|
||||
order.userCouponId = userCouponId;
|
||||
order.storeId = storeId;
|
||||
order.orderPrice = orderPrice;
|
||||
|
||||
order.setTransaction(transaction);
|
||||
for (OrderItem orderItem : orderItems) {
|
||||
order.addOrderItem(orderItem);
|
||||
}
|
||||
|
||||
order.usedPoint = 0L;
|
||||
order.orderStatus = OrderStatus.PLACED;
|
||||
order.orderTime = LocalDateTime.now();
|
||||
return order;
|
||||
}
|
||||
|
||||
public static Order of(Long userId, Long userCouponId, Long storeId, Long orderPrice,
|
||||
OrderItem orderItem) {
|
||||
Order order = new Order();
|
||||
order.userId = userId;
|
||||
order.userCouponId = userCouponId;
|
||||
order.storeId = storeId;
|
||||
order.orderPrice = orderPrice;
|
||||
|
||||
order.addOrderItem(orderItem);
|
||||
|
||||
@@ -80,14 +59,25 @@ public class Order extends BaseEntity {
|
||||
return order;
|
||||
}
|
||||
|
||||
public void setTransaction(Transaction transaction) {
|
||||
this.transaction = transaction;
|
||||
transaction.setOrder(this);
|
||||
public static Order of(Long userId, Long userCouponId, Long storeId, List<OrderItem> orderItems) {
|
||||
Order order = new Order();
|
||||
order.userId = userId;
|
||||
order.userCouponId = userCouponId;
|
||||
order.storeId = storeId;
|
||||
|
||||
for (OrderItem item : orderItems) {
|
||||
order.addOrderItem(item);
|
||||
}
|
||||
|
||||
order.usedPoint = 0L;
|
||||
order.orderStatus = OrderStatus.PENDING;
|
||||
order.orderTime = LocalDateTime.now();
|
||||
return order;
|
||||
}
|
||||
|
||||
public Order addOrderItem(OrderItem orderItem) {
|
||||
this.orderItems.add(orderItem);
|
||||
this.orderPrice += (orderItem.getPrice()*orderItem.getCount());
|
||||
this.orderPrice += orderItem.getTotalPrice();
|
||||
orderItem.setOrder(this);
|
||||
return this;
|
||||
}
|
||||
@@ -97,15 +87,18 @@ public class Order extends BaseEntity {
|
||||
return this;
|
||||
}
|
||||
|
||||
public void placed() {
|
||||
this.orderStatus = OrderStatus.PLACED;
|
||||
}
|
||||
|
||||
public void order() {
|
||||
this.orderStatus = OrderStatus.ORDER;
|
||||
}
|
||||
|
||||
public void reject() {
|
||||
this.orderStatus = OrderStatus.REJECT;
|
||||
/**
|
||||
* 전체 주문 가격 조회
|
||||
*/
|
||||
public int getTotalPrice() {
|
||||
int totalPrice = 0;
|
||||
for (OrderItem orderItem : orderItems) {
|
||||
totalPrice += orderItem.getTotalPrice();
|
||||
}
|
||||
return totalPrice;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,7 +44,6 @@ public class OrderRepositoryCustom {
|
||||
|
||||
List<Order> orders = queryFactory
|
||||
.selectFrom(order)
|
||||
.join(order.transaction).fetchJoin()
|
||||
.where(
|
||||
orderIdLt(condition.getLastOrderId()),
|
||||
order.orderTime.between(start, end),
|
||||
|
||||
@@ -12,7 +12,7 @@ import org.springframework.data.domain.Pageable;
|
||||
import org.springframework.data.domain.SliceImpl;
|
||||
|
||||
public interface OrderService {
|
||||
OrderMainDto findOrderMain(OrderSearchCondition condition, Long storeId);
|
||||
OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId);
|
||||
Page<OrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long storeId);
|
||||
SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId);
|
||||
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);
|
||||
|
||||
@@ -9,6 +9,12 @@ import com.justpickup.orderservice.domain.order.repository.OrderRepositoryCustom
|
||||
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
||||
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
|
||||
import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption;
|
||||
import com.justpickup.orderservice.global.client.store.GetItemResponse;
|
||||
import com.justpickup.orderservice.global.client.store.StoreByUserIdResponse;
|
||||
import com.justpickup.orderservice.global.client.store.StoreClient;
|
||||
import com.justpickup.orderservice.global.client.user.GetCustomerResponse;
|
||||
import com.justpickup.orderservice.global.client.user.UserClient;
|
||||
import com.justpickup.orderservice.global.dto.Result;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.data.domain.Page;
|
||||
@@ -17,6 +23,7 @@ import org.springframework.data.domain.SliceImpl;
|
||||
import org.springframework.data.support.PageableExecutionUtils;
|
||||
import org.springframework.stereotype.Service;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
import org.springframework.util.StopWatch;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
@@ -32,16 +39,36 @@ public class OrderServiceImpl implements OrderService {
|
||||
private final OrderRepository orderRepository;
|
||||
private final OrderRepositoryCustom orderRepositoryCustom;
|
||||
private final OrderSender orderSender;
|
||||
private final StoreClient storeClient;
|
||||
private final UserClient userClient;
|
||||
|
||||
@Override
|
||||
public OrderMainDto findOrderMain(OrderSearchCondition condition, Long storeId) {
|
||||
public OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId) {
|
||||
|
||||
Result<StoreByUserIdResponse> store = storeClient.getStoreByUserId(userId);
|
||||
|
||||
// 주문 가져오기
|
||||
OrderMainResult orderMainResult = orderRepositoryCustom.findOrderMain(condition, storeId);
|
||||
OrderMainResult orderMainResult = orderRepositoryCustom.findOrderMain(condition, store.getData().getId());
|
||||
|
||||
StopWatch stopWatch = new StopWatch();
|
||||
stopWatch.start();
|
||||
int count = 0;
|
||||
// 사용자명 및 아이템 이름 가져오기
|
||||
// getUserNameAndItemName(orderDtoList);
|
||||
OrderMainDto returnDto = OrderMainDto.of(orderMainResult.getOrders(), orderMainResult.isHasNext());
|
||||
for (OrderMainDto._Order order : returnDto.getOrders()) {
|
||||
for (OrderMainDto._OrderItem orderItem : order.getOrderItems()) {
|
||||
count += 1;
|
||||
Result<GetItemResponse> item = storeClient.getItem(orderItem.getItemId());
|
||||
orderItem.changeItemName(item.getData().getName());
|
||||
}
|
||||
count += 1;
|
||||
GetCustomerResponse customerResponse = userClient.getCustomerById(order.getUserId()).getData();
|
||||
order.changeUserName(customerResponse.getUserName());
|
||||
}
|
||||
stopWatch.stop();
|
||||
log.info("Feign count = {}, [StopWatch] {}", count, stopWatch.prettyPrint());
|
||||
|
||||
return OrderMainDto.of(orderMainResult.getOrders(), orderMainResult.isHasNext());
|
||||
return returnDto;
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -97,7 +124,7 @@ public class OrderServiceImpl implements OrderService {
|
||||
.getStoreId().equals(storeId))
|
||||
throw new OrderException("장바구니에 여러 카페의 메뉴를 담을수 없습니다.");
|
||||
}else{
|
||||
orderRepository.save(Order.of(userId,userCouponId,storeId,0L,orderItem));
|
||||
orderRepository.save(Order.of(userId,userCouponId,storeId,orderItem));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,6 +4,7 @@ import com.justpickup.orderservice.domain.order.entity.OrderStatus;
|
||||
import com.justpickup.orderservice.domain.order.exception.OrderException;
|
||||
import com.justpickup.orderservice.domain.order.service.OrderService;
|
||||
import com.justpickup.orderservice.global.dto.Result;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
import lombok.RequiredArgsConstructor;
|
||||
@@ -34,7 +35,7 @@ public class OrderController {
|
||||
return ResponseEntity.ok(Result.createSuccessResult(null));
|
||||
}
|
||||
|
||||
@Data @NoArgsConstructor
|
||||
@Data @NoArgsConstructor @AllArgsConstructor
|
||||
static class PatchOrderRequest {
|
||||
private OrderStatus orderStatus;
|
||||
}
|
||||
|
||||
@@ -22,6 +22,7 @@ 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.RequestHeader;
|
||||
import org.springframework.web.bind.annotation.RequestMapping;
|
||||
import org.springframework.web.bind.annotation.RestController;
|
||||
|
||||
@@ -41,12 +42,11 @@ public class OrderOwnerApiController {
|
||||
private final PrevOrderSearchValidator prevOrderSearchValidator;
|
||||
|
||||
@GetMapping("/order-main")
|
||||
public ResponseEntity<Result> orderMain(@Valid OrderSearchCondition condition) {
|
||||
// TODO: 2022/03/10 Feign client storeId 가져오기 구현 필요
|
||||
Long userId = 1L;
|
||||
Long storeId = 1L;
|
||||
public ResponseEntity<Result> orderMain(@Valid OrderSearchCondition condition,
|
||||
@RequestHeader(value="user-id") String userHeader) {
|
||||
Long userId = Long.valueOf(userHeader);
|
||||
|
||||
OrderMainDto orderMainDto = orderService.findOrderMain(condition, storeId);
|
||||
OrderMainDto orderMainDto = orderService.findOrderMain(condition, userId);
|
||||
|
||||
OrderMainResponse orderMainResponse = new OrderMainResponse(orderMainDto);
|
||||
|
||||
|
||||
@@ -1,7 +1,6 @@
|
||||
package com.justpickup.orderservice.domain.orderItem.entity;
|
||||
|
||||
import com.justpickup.orderservice.domain.order.entity.Order;
|
||||
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
|
||||
import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption;
|
||||
import com.justpickup.orderservice.global.entity.BaseEntity;
|
||||
import lombok.AccessLevel;
|
||||
@@ -65,4 +64,11 @@ public class OrderItem extends BaseEntity {
|
||||
}
|
||||
return orderItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* 주문상품 전체 가격 조회
|
||||
*/
|
||||
public long getTotalPrice() {
|
||||
return price * count;
|
||||
}
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -0,0 +1,9 @@
|
||||
package com.justpickup.orderservice.global.client.store;
|
||||
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class StoreByUserIdResponse {
|
||||
private Long id;
|
||||
private String name;
|
||||
}
|
||||
@@ -4,10 +4,15 @@ import com.justpickup.orderservice.global.dto.Result;
|
||||
import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
import org.springframework.web.bind.annotation.RequestHeader;
|
||||
|
||||
@FeignClient(name = "STORE-SERVICE", url = "127.0.0.1:8001/store-service")
|
||||
@FeignClient("STORE-SERVICE")
|
||||
public interface StoreClient {
|
||||
|
||||
@GetMapping("/item/{itemId}")
|
||||
Result<GetItemResponse> getItem(@PathVariable("itemId") Long itemId);
|
||||
|
||||
@GetMapping("/api/owner/store/")
|
||||
Result<StoreByUserIdResponse> getStoreByUserId(@RequestHeader(value="user-id") Long userId);
|
||||
|
||||
}
|
||||
|
||||
@@ -5,9 +5,9 @@ import org.springframework.cloud.openfeign.FeignClient;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
import org.springframework.web.bind.annotation.PathVariable;
|
||||
|
||||
@FeignClient(name = "USER-SERVICE", url = "127.0.0.1:8001/user-service")
|
||||
@FeignClient("USER-SERVICE")
|
||||
public interface UserClient {
|
||||
|
||||
@GetMapping("/customer/{userId}")
|
||||
Result<GetCustomerResponse> getUser(@PathVariable("userId") Long userId);
|
||||
Result<GetCustomerResponse> getCustomerById(@PathVariable("userId") Long userId);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user