feat(order): Just Pick-up 주문내역 Feign 클라이언트 로직 추가

- 아이템 id와 유저 id들을 Set으로 묶어 한번에 통신하게 변경
- Map을 사용하여 id를 key로 map을 name으로 가지게 생성
This commit is contained in:
bum12ark
2022-03-16 19:45:56 +09:00
parent 33cea67e88
commit 826a8050ee
8 changed files with 131 additions and 31 deletions

View File

@@ -0,0 +1,61 @@
package com.justpickup.orderservice.domain.order.dto;
import com.justpickup.orderservice.domain.order.entity.Order;
import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
import lombok.AccessLevel;
import lombok.Getter;
import lombok.NoArgsConstructor;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
@Getter
@NoArgsConstructor(access = AccessLevel.PROTECTED)
public class OrderHistoryDto {
private Long id;
private LocalDateTime orderTime;
private long price;
private OrderStatus orderStatus;
private Long storeId;
private String storeName;
private List<_OrderHistoryItem> orderItems = new ArrayList<>();
@Getter
public static class _OrderHistoryItem {
private Long id;
private Long itemId;
private String itemName;
public static _OrderHistoryItem of(OrderItem orderItem) {
_OrderHistoryItem orderHistoryItem = new _OrderHistoryItem();
orderHistoryItem.id = orderItem.getId();
orderHistoryItem.itemId = orderItem.getItemId();
return orderHistoryItem;
}
public void changeItemName(String itemName) {
this.itemName = itemName;
}
}
public static OrderHistoryDto of(Order order) {
OrderHistoryDto orderHistoryDto = new OrderHistoryDto();
orderHistoryDto.id = order.getId();
orderHistoryDto.orderTime = order.getOrderTime();
orderHistoryDto.price = order.getOrderPrice();
orderHistoryDto.orderStatus = order.getOrderStatus();
orderHistoryDto.storeId = order.getUserId();
orderHistoryDto.orderItems = order.getOrderItems().stream()
.map(_OrderHistoryItem::of)
.collect(Collectors.toList());
return orderHistoryDto;
}
public void changeStoreName(String storeName) {
this.storeName = storeName;
}
}

View File

@@ -103,7 +103,7 @@ public class OrderRepositoryCustom {
public SliceImpl<Order> findOrderHistory(Pageable pageable, Long userId) { public SliceImpl<Order> findOrderHistory(Pageable pageable, Long userId) {
List<Order> contents = queryFactory List<Order> contents = queryFactory
.selectFrom(order) .selectFrom(order)
.join(order.transaction).fetchJoin() .leftJoin(order.transaction).fetchJoin()
.where( .where(
order.userId.eq(userId) order.userId.eq(userId)
) )

View File

@@ -10,10 +10,9 @@ import org.springframework.data.domain.SliceImpl;
public interface OrderService { public interface OrderService {
OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId); OrderMainDto findOrderMain(OrderSearchCondition condition, Long userId);
Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId); Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId);
SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId); SliceImpl<OrderHistoryDto> findOrderHistory(Pageable pageable, Long userId);
void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId); void addItemToBasket(OrderItemDto orderItemDto,Long storeId, Long userId);
FetchOrderDto fetchOrder(Long userId); FetchOrderDto fetchOrder(Long userId);
void saveOrder(Long userId); void saveOrder(Long userId);
void modifyOrder(Long userId, OrderStatus orderStatus); void modifyOrder(Long userId, OrderStatus orderStatus);
} }

View File

@@ -10,6 +10,7 @@ import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
import com.justpickup.orderservice.domain.orderItem.entity.OrderItem; import com.justpickup.orderservice.domain.orderItem.entity.OrderItem;
import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption; import com.justpickup.orderservice.domain.orderItemOption.entity.OrderItemOption;
import com.justpickup.orderservice.global.client.store.GetItemsResponse; import com.justpickup.orderservice.global.client.store.GetItemsResponse;
import com.justpickup.orderservice.global.client.store.GetStoreResponse;
import com.justpickup.orderservice.global.client.store.StoreByUserIdResponse; import com.justpickup.orderservice.global.client.store.StoreByUserIdResponse;
import com.justpickup.orderservice.global.client.store.StoreClient; import com.justpickup.orderservice.global.client.store.StoreClient;
import com.justpickup.orderservice.global.client.user.GetCustomerResponse; import com.justpickup.orderservice.global.client.user.GetCustomerResponse;
@@ -139,17 +140,45 @@ public class OrderServiceImpl implements OrderService {
} }
@Override @Override
public SliceImpl<OrderDto> findOrderHistory(Pageable pageable, Long userId) { public SliceImpl<OrderHistoryDto> findOrderHistory(Pageable pageable, Long userId) {
SliceImpl<Order> orderHistory = orderRepositoryCustom.findOrderHistory(pageable, userId); SliceImpl<Order> orderHistory = orderRepositoryCustom.findOrderHistory(pageable, userId);
List<OrderDto> contents = orderHistory.getContent() List<OrderHistoryDto> orderHistoryDtoList = orderHistory.getContent()
.stream() .stream()
.map(OrderDto::createFullField) .map(OrderHistoryDto::of)
.collect(toList()); .collect(toList());
// TODO: 2022/03/07 Feign Client 통신 Set<Long> storeIds = new HashSet<>();
Set<Long> itemIds = new HashSet<>();
for (OrderHistoryDto orderHistoryDto : orderHistoryDtoList) {
storeIds.add(orderHistoryDto.getStoreId());
for (OrderHistoryDto._OrderHistoryItem orderItem : orderHistoryDto.getOrderItems()) {
itemIds.add(orderItem.getItemId());
}
}
return new SliceImpl<>(contents, pageable, orderHistory.hasNext()); Map<Long, String> storeNameMap = this.getStoreNameMap(storeIds);
Map<Long, String> itemNameMap = this.getItemNameMap(itemIds);
for (OrderHistoryDto orderHistoryDto : orderHistoryDtoList) {
String userName = storeNameMap.get(orderHistoryDto.getStoreId());
orderHistoryDto.changeStoreName(userName);
for (OrderHistoryDto._OrderHistoryItem orderItem : orderHistoryDto.getOrderItems()) {
String itemName = itemNameMap.get(orderItem.getItemId());
orderItem.changeItemName(itemName);
}
}
return new SliceImpl<>(orderHistoryDtoList, pageable, orderHistory.hasNext());
}
private Map<Long, String> getStoreNameMap(Set<Long> storeIds) {
List<GetStoreResponse> storeResponses = storeClient.getStoreAllById(storeIds).getData();
Map<Long, String> storeMap = storeResponses.stream()
.collect(
toMap(GetStoreResponse::getId, GetStoreResponse::getName)
);
return storeMap;
} }
@Override @Override

View File

@@ -1,7 +1,7 @@
package com.justpickup.orderservice.domain.order.web; package com.justpickup.orderservice.domain.order.web;
import com.justpickup.orderservice.domain.order.dto.FetchOrderDto; import com.justpickup.orderservice.domain.order.dto.FetchOrderDto;
import com.justpickup.orderservice.domain.order.dto.OrderDto; import com.justpickup.orderservice.domain.order.dto.OrderHistoryDto;
import com.justpickup.orderservice.domain.order.entity.OrderStatus; import com.justpickup.orderservice.domain.order.entity.OrderStatus;
import com.justpickup.orderservice.domain.order.service.OrderService; import com.justpickup.orderservice.domain.order.service.OrderService;
import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto; import com.justpickup.orderservice.domain.orderItem.dto.OrderItemDto;
@@ -36,7 +36,7 @@ public class OrderCustomerApiController {
@PageableDefault(page = 0, size = 3) Pageable pageable) { @PageableDefault(page = 0, size = 3) Pageable pageable) {
Long userId = Long.parseLong(userHeader); Long userId = Long.parseLong(userHeader);
SliceImpl<OrderDto> orderHistory = orderService.findOrderHistory(pageable, userId); SliceImpl<OrderHistoryDto> orderHistory = orderService.findOrderHistory(pageable, userId);
OrderHistoryResponse orderHistoryResponse = OrderHistoryResponse orderHistoryResponse =
new OrderHistoryResponse(orderHistory.getContent(), orderHistory.hasNext()); new OrderHistoryResponse(orderHistory.getContent(), orderHistory.hasNext());
@@ -47,45 +47,45 @@ public class OrderCustomerApiController {
@Data @NoArgsConstructor @Data @NoArgsConstructor
static class OrderHistoryResponse { static class OrderHistoryResponse {
private List<_Order> orders; private List<_OrderResponse> orders;
private boolean hasNext; private boolean hasNext;
public OrderHistoryResponse(List<OrderDto> orders, boolean hasNext) { public OrderHistoryResponse(List<OrderHistoryDto> orders, boolean hasNext) {
this.orders = orders.stream().map(_Order::new).collect(Collectors.toList()); this.orders = orders.stream().map(_OrderResponse::new).collect(Collectors.toList());
this.hasNext = hasNext; this.hasNext = hasNext;
} }
@Data @Data
static class _Order { static class _OrderResponse {
private Long orderId; private Long orderId;
private String orderTime; private String orderTime;
private OrderStatus orderStatus; private OrderStatus orderStatus;
private String storeName; private String storeName;
private Long orderPrice; private Long orderPrice;
private List<_OrderItem> orderItems; private List<_OrderItemResponse> orderItems;
public _Order(OrderDto orderDto) { public _OrderResponse(OrderHistoryDto orderHistoryDto) {
this.orderId = orderDto.getId(); this.orderId = orderHistoryDto.getId();
this.orderTime = orderDto.getOrderTime() this.orderTime = orderHistoryDto.getOrderTime()
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm")); .format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm"));
this.orderStatus = orderDto.getOrderStatus(); this.orderStatus = orderHistoryDto.getOrderStatus();
this.storeName = orderDto.getStoreId().toString(); this.storeName = orderHistoryDto.getStoreName();
this.orderPrice = orderDto.getOrderPrice(); this.orderPrice = orderHistoryDto.getPrice();
this.orderItems = orderDto.getOrderItemDtoList() this.orderItems = orderHistoryDto.getOrderItems()
.stream() .stream()
.map(_OrderItem::new) .map(_OrderItemResponse::new)
.collect(Collectors.toList()); .collect(Collectors.toList());
} }
} }
@Data @Data
static class _OrderItem { static class _OrderItemResponse {
private Long orderItemId; private Long orderItemId;
private String orderItemName; private String orderItemName;
public _OrderItem(OrderItemDto orderItemDto) { public _OrderItemResponse(OrderHistoryDto._OrderHistoryItem orderHistoryItem) {
this.orderItemId = orderItemDto.getItemId(); this.orderItemId = orderHistoryItem.getItemId();
this.orderItemName = orderItemDto.getItemId().toString(); this.orderItemName = orderHistoryItem.getItemName();
} }
} }
} }
@@ -174,6 +174,4 @@ public class OrderCustomerApiController {
return ResponseEntity.status(HttpStatus.CREATED).body(Result.createSuccessResult(null)); return ResponseEntity.status(HttpStatus.CREATED).body(Result.createSuccessResult(null));
} }
} }

View File

@@ -52,8 +52,8 @@ public class SqlCommandLineRunner implements CommandLineRunner {
Long userCouponId = null; Long userCouponId = null;
for (int i = 0; i <= 100; i++) { for (int i = 0; i <= 100; i++) {
// if (i % 2 == 0) userId = 2L; if (i % 2 == 0) userId = 2L;
// else userId = 3L; else userId = 3L;
List<Order> orders = new ArrayList<>(); List<Order> orders = new ArrayList<>();
_Store[] stores = objectMapper.readValue(storeJson, _Store[].class); _Store[] stores = objectMapper.readValue(storeJson, _Store[].class);

View File

@@ -0,0 +1,10 @@
package com.justpickup.orderservice.global.client.store;
import lombok.Data;
@Data
public class GetStoreResponse {
private Long id;
private String name;
private String phoneNumber;
}

View File

@@ -19,4 +19,7 @@ public interface StoreClient {
@GetMapping("/api/owner/store/") @GetMapping("/api/owner/store/")
Result<StoreByUserIdResponse> getStoreByUserId(@RequestHeader(value="user-id") Long userId); Result<StoreByUserIdResponse> getStoreByUserId(@RequestHeader(value="user-id") Long userId);
@GetMapping("/stores/{storeId}")
Result<List<GetStoreResponse>> getStoreAllById(@PathVariable("storeId") Iterable<Long> storeIds);
} }