refactor(order): 주문 상세보기 API 리팩토링
- 아이템 정보 API를 통해 아이템 옵션까지 동시에 가져오도록 변경
This commit is contained in:
@@ -27,6 +27,7 @@ import java.util.stream.Collectors;
|
|||||||
|
|
||||||
import static com.justpickup.orderservice.domain.order.dto.OrderDetailDto.*;
|
import static com.justpickup.orderservice.domain.order.dto.OrderDetailDto.*;
|
||||||
import static java.util.stream.Collectors.toList;
|
import static java.util.stream.Collectors.toList;
|
||||||
|
import static java.util.stream.Collectors.toMap;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
@@ -246,37 +247,41 @@ public class OrderServiceImpl implements OrderService {
|
|||||||
GetCustomerResponse customerInfo = userClient.getCustomerById(order.getUserId()).getData();
|
GetCustomerResponse customerInfo = userClient.getCustomerById(order.getUserId()).getData();
|
||||||
|
|
||||||
Set<Long> itemIds = new HashSet<>();
|
Set<Long> itemIds = new HashSet<>();
|
||||||
Set<Long> itemOptionIds = new HashSet<>();
|
|
||||||
|
|
||||||
// 아이템 이름 및 옵션 이름 가져오기
|
// 아이템 이름 및 옵션 이름 가져오기
|
||||||
for (OrderItem orderItem : orderItemsWithOptions) {
|
for (OrderItem orderItem : orderItemsWithOptions) {
|
||||||
itemIds.add(orderItem.getItemId());
|
itemIds.add(orderItem.getItemId());
|
||||||
for (OrderItemOption orderItemOption : orderItem.getOrderItemOptions()) {
|
|
||||||
itemOptionIds.add(orderItemOption.getItemOptionId());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Map<Long, String> itemNameMap = storeClient.getItemNameMap(itemIds);
|
Map<Long, GetItemResponse> itemAndItemOptionMap = storeClient.getItemAndItemOptionMap(itemIds);
|
||||||
Map<Long, ItemOptionsResponse> itemOptionMap = storeClient.getItemOptionMap(itemOptionIds);
|
|
||||||
|
|
||||||
List<OrderDetailItem> orderDetailItems = orderItemsWithOptions.stream()
|
List<OrderDetailItem> orderDetailItems = orderItemsWithOptions.stream()
|
||||||
.map(orderItem -> {
|
.map(orderItem -> {
|
||||||
// 주문 상세 옵션 생성
|
// 주문 상세 옵션 생성
|
||||||
|
GetItemResponse itemResponse = itemAndItemOptionMap.get(orderItem.getItemId());
|
||||||
|
|
||||||
|
// 아이템 옵션 맵 생성
|
||||||
|
Map<Long, GetItemResponse.ItemOptionDto> itemOptionMap = itemResponse.getItemOptions().stream()
|
||||||
|
.collect(
|
||||||
|
toMap(GetItemResponse.ItemOptionDto::getId, itemOptionDto -> itemOptionDto)
|
||||||
|
);
|
||||||
|
|
||||||
List<OrderDetailItemOption> orderDetailItemOptions = orderItem.getOrderItemOptions()
|
List<OrderDetailItemOption> orderDetailItemOptions = orderItem.getOrderItemOptions()
|
||||||
.stream()
|
.stream()
|
||||||
.map(orderItemOption -> {
|
.map(orderItemOption -> {
|
||||||
// 옵션 아이디에 해당하는 아이템 옵션 객체 가져오기
|
// 옵션 아이디에 해당하는 아이템 옵션 객체 가져오기
|
||||||
ItemOptionsResponse itemOptionsResponse = itemOptionMap.get(orderItemOption.getItemOptionId());
|
GetItemResponse.ItemOptionDto itemOptionDto =
|
||||||
|
itemOptionMap.get(orderItemOption.getItemOptionId());
|
||||||
|
|
||||||
return OrderDetailItemOption.of(
|
return OrderDetailItemOption.of(
|
||||||
orderItemOption,
|
orderItemOption,
|
||||||
itemOptionsResponse.getName(),
|
itemOptionDto.getName(),
|
||||||
itemOptionsResponse.getOptionType()
|
itemOptionDto.getOptionType()
|
||||||
);
|
);
|
||||||
})
|
})
|
||||||
.collect(toList());
|
.collect(toList());
|
||||||
// 아이템 아이디에 해당하는 아이템 이름 가져오기
|
// 아이템 아이디에 해당하는 아이템 이름 가져오기
|
||||||
String itemName = itemNameMap.get(orderItem.getItemId());
|
String itemName = itemResponse.getName();
|
||||||
return OrderDetailItem.of(orderItem, itemName, orderDetailItemOptions);
|
return OrderDetailItem.of(orderItem, itemName, orderDetailItemOptions);
|
||||||
})
|
})
|
||||||
.collect(toList());
|
.collect(toList());
|
||||||
|
|||||||
@@ -34,9 +34,6 @@ public interface StoreClient {
|
|||||||
@GetMapping("/api/customer/items/{itemId}")
|
@GetMapping("/api/customer/items/{itemId}")
|
||||||
Result<List<GetItemResponse>> getItemAndItemOptions(@PathVariable(value = "itemId") Iterable<Long> itemIds);
|
Result<List<GetItemResponse>> getItemAndItemOptions(@PathVariable(value = "itemId") Iterable<Long> itemIds);
|
||||||
|
|
||||||
@GetMapping("/item-options/{itemOptionIds}")
|
|
||||||
Result<List<ItemOptionsResponse>> getItemOptions(@PathVariable(value = "itemOptionIds") Iterable<Long> itemOptionIds);
|
|
||||||
|
|
||||||
default Map<Long, String> getStoreNameMap(Set<Long> storeIds) {
|
default Map<Long, String> getStoreNameMap(Set<Long> storeIds) {
|
||||||
List<GetStoreResponse> storeResponses = this.getStoreAllById(storeIds).getData();
|
List<GetStoreResponse> storeResponses = this.getStoreAllById(storeIds).getData();
|
||||||
return storeResponses.stream()
|
return storeResponses.stream()
|
||||||
@@ -53,11 +50,11 @@ public interface StoreClient {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
default Map<Long, ItemOptionsResponse> getItemOptionMap(Iterable<Long> itemOptionIds) {
|
default Map<Long, GetItemResponse> getItemAndItemOptionMap(Iterable<Long> itemIds) {
|
||||||
List<ItemOptionsResponse> itemOptionsResponses = this.getItemOptions(itemOptionIds).getData();
|
List<GetItemResponse> responses = this.getItemAndItemOptions(itemIds).getData();
|
||||||
return itemOptionsResponses.stream()
|
return responses.stream()
|
||||||
.collect(
|
.collect(
|
||||||
toMap(ItemOptionsResponse::getId, itemOptionsResponse -> itemOptionsResponse)
|
toMap(GetItemResponse::getId, getItemsResponse -> getItemsResponse)
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user