refactor(order): 주문 상세보기 API 리팩토링

- 아이템 정보 API를 통해 아이템 옵션까지 동시에 가져오도록 변경
This commit is contained in:
bum12ark
2022-03-21 18:09:39 +09:00
parent 74f2dc461f
commit 2bc63c92ac
2 changed files with 19 additions and 17 deletions

View File

@@ -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());

View File

@@ -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)
); );
} }
} }