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 java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
@Service
@RequiredArgsConstructor
@@ -246,37 +247,41 @@ public class OrderServiceImpl implements OrderService {
GetCustomerResponse customerInfo = userClient.getCustomerById(order.getUserId()).getData();
Set<Long> itemIds = new HashSet<>();
Set<Long> itemOptionIds = new HashSet<>();
// 아이템 이름 및 옵션 이름 가져오기
for (OrderItem orderItem : orderItemsWithOptions) {
itemIds.add(orderItem.getItemId());
for (OrderItemOption orderItemOption : orderItem.getOrderItemOptions()) {
itemOptionIds.add(orderItemOption.getItemOptionId());
}
}
Map<Long, String> itemNameMap = storeClient.getItemNameMap(itemIds);
Map<Long, ItemOptionsResponse> itemOptionMap = storeClient.getItemOptionMap(itemOptionIds);
Map<Long, GetItemResponse> itemAndItemOptionMap = storeClient.getItemAndItemOptionMap(itemIds);
List<OrderDetailItem> orderDetailItems = orderItemsWithOptions.stream()
.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()
.stream()
.map(orderItemOption -> {
// 옵션 아이디에 해당하는 아이템 옵션 객체 가져오기
ItemOptionsResponse itemOptionsResponse = itemOptionMap.get(orderItemOption.getItemOptionId());
GetItemResponse.ItemOptionDto itemOptionDto =
itemOptionMap.get(orderItemOption.getItemOptionId());
return OrderDetailItemOption.of(
orderItemOption,
itemOptionsResponse.getName(),
itemOptionsResponse.getOptionType()
itemOptionDto.getName(),
itemOptionDto.getOptionType()
);
})
.collect(toList());
// 아이템 아이디에 해당하는 아이템 이름 가져오기
String itemName = itemNameMap.get(orderItem.getItemId());
String itemName = itemResponse.getName();
return OrderDetailItem.of(orderItem, itemName, orderDetailItemOptions);
})
.collect(toList());

View File

@@ -34,9 +34,6 @@ public interface StoreClient {
@GetMapping("/api/customer/items/{itemId}")
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) {
List<GetStoreResponse> storeResponses = this.getStoreAllById(storeIds).getData();
return storeResponses.stream()
@@ -53,11 +50,11 @@ public interface StoreClient {
);
}
default Map<Long, ItemOptionsResponse> getItemOptionMap(Iterable<Long> itemOptionIds) {
List<ItemOptionsResponse> itemOptionsResponses = this.getItemOptions(itemOptionIds).getData();
return itemOptionsResponses.stream()
default Map<Long, GetItemResponse> getItemAndItemOptionMap(Iterable<Long> itemIds) {
List<GetItemResponse> responses = this.getItemAndItemOptions(itemIds).getData();
return responses.stream()
.collect(
toMap(ItemOptionsResponse::getId, itemOptionsResponse -> itemOptionsResponse)
toMap(GetItemResponse::getId, getItemsResponse -> getItemsResponse)
);
}
}