refactor(order): Feign Client default 사용 방식으로 변경

- 기존 Service에 종속적이던 Feign Client 코드를 default를 사용함으로써 캡슐화
This commit is contained in:
bum12ark
2022-03-17 15:27:40 +09:00
parent d1b969b657
commit 9d0a10b6c5
3 changed files with 44 additions and 36 deletions

View File

@@ -9,8 +9,10 @@ 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.*;
import com.justpickup.orderservice.global.client.user.GetCustomerResponse;
import com.justpickup.orderservice.global.client.store.GetItemResponse;
import com.justpickup.orderservice.global.client.store.GetStoreReseponse;
import com.justpickup.orderservice.global.client.store.StoreByUserIdResponse;
import com.justpickup.orderservice.global.client.store.StoreClient;
import com.justpickup.orderservice.global.client.user.UserClient;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
@@ -25,7 +27,6 @@ import java.util.*;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toList;
import static java.util.stream.Collectors.toMap;
@Service
@RequiredArgsConstructor
@@ -35,7 +36,6 @@ 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;
@@ -63,10 +63,10 @@ public class OrderServiceImpl implements OrderService {
}
// item name 가져오기
Map<Long, String> itemNameMap = getItemNameMap(itemIds);
Map<Long, String> itemNameMap = storeClient.getItemNameMap(itemIds);
// user name 가져오기
Map<Long, String> userNameMap = getUserNameMap(userIds);
Map<Long, String> userNameMap = userClient.getUserNameMap(userIds);
// 해당 ID에 맞게 이름 설정해주기
for (OrderMainDto._Order order : orders) {
@@ -81,22 +81,6 @@ public class OrderServiceImpl implements OrderService {
return returnDto;
}
private Map<Long, String> getUserNameMap(Iterable<Long> userIds) {
List<GetCustomerResponse> userResponses = userClient.getCustomers(userIds).getData();
return userResponses.stream()
.collect(
toMap(GetCustomerResponse::getUserId, GetCustomerResponse::getUserName)
);
}
private Map<Long, String> getItemNameMap(Iterable<Long> itemIds) {
List<GetItemsResponse> itemResponses = storeClient.getItems(itemIds).getData();
return itemResponses.stream()
.collect(
toMap(GetItemsResponse::getId, GetItemsResponse::getName)
);
}
@Override
public Page<PrevOrderDto> findPrevOrderMain(PrevOrderSearch search, Pageable pageable, Long userId) {
StoreByUserIdResponse store = storeClient.getStoreByUserId(userId).getData();
@@ -120,10 +104,10 @@ public class OrderServiceImpl implements OrderService {
}
// item name 가져오기
Map<Long, String> itemNameMap = getItemNameMap(itemIds);
Map<Long, String> itemNameMap = storeClient.getItemNameMap(itemIds);
// user name 가져오기
Map<Long, String> userNameMap = getUserNameMap(userIds);
Map<Long, String> userNameMap = userClient.getUserNameMap(userIds);
for (PrevOrderDto prevOrderDto : prevOrderDtoList) {
String userName = userNameMap.get(prevOrderDto.getUserId());
@@ -155,8 +139,8 @@ public class OrderServiceImpl implements OrderService {
}
}
Map<Long, String> storeNameMap = this.getStoreNameMap(storeIds);
Map<Long, String> itemNameMap = this.getItemNameMap(itemIds);
Map<Long, String> storeNameMap = storeClient.getStoreNameMap(storeIds);
Map<Long, String> itemNameMap = storeClient.getItemNameMap(itemIds);
for (OrderHistoryDto orderHistoryDto : orderHistoryDtoList) {
String userName = storeNameMap.get(orderHistoryDto.getStoreId());
@@ -170,15 +154,6 @@ public class OrderServiceImpl implements OrderService {
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
@Transactional
public void addItemToBasket(OrderItemDto orderItemDto, Long storeId, Long userId) {
@@ -234,7 +209,6 @@ public class OrderServiceImpl implements OrderService {
,orderItem))
.collect(Collectors.toList());
FetchOrderDto fetchOrderDto = FetchOrderDto.builder()
.userId(order.getUserId())
.orderPrice(order.getOrderPrice())

View File

@@ -1,5 +1,6 @@
package com.justpickup.orderservice.global.client.store;
import com.justpickup.orderservice.global.client.user.GetCustomerResponse;
import com.justpickup.orderservice.global.dto.Result;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
@@ -7,6 +8,10 @@ import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestHeader;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static java.util.stream.Collectors.toMap;
@FeignClient("STORE-SERVICE")
public interface StoreClient {
@@ -29,4 +34,22 @@ public interface StoreClient {
@GetMapping("/api/customer/items/{itemId}")
Result<List<GetItemResponse>> getItemAndItemOptions(@PathVariable(value = "itemId") List<Long> itemIds);
default Map<Long, String> getStoreNameMap(Set<Long> storeIds) {
List<GetStoreResponse> storeResponses = this.getStoreAllById(storeIds).getData();
Map<Long, String> storeMap = storeResponses.stream()
.collect(
toMap(GetStoreResponse::getId, GetStoreResponse::getName)
);
return storeMap;
}
default Map<Long, String> getItemNameMap(Iterable<Long> itemIds) {
List<GetItemsResponse> itemResponses = this.getItems(itemIds).getData();
return itemResponses.stream()
.collect(
toMap(GetItemsResponse::getId, GetItemsResponse::getName)
);
}
}

View File

@@ -6,6 +6,9 @@ import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import java.util.List;
import java.util.Map;
import static java.util.stream.Collectors.toMap;
@FeignClient("USER-SERVICE")
public interface UserClient {
@@ -15,4 +18,12 @@ public interface UserClient {
@GetMapping("/customers/{userIds}")
Result<List<GetCustomerResponse>> getCustomers(@PathVariable("userIds") Iterable<Long> userIds);
default Map<Long, String> getUserNameMap(Iterable<Long> userIds) {
List<GetCustomerResponse> userResponses = this.getCustomers(userIds).getData();
return userResponses.stream()
.collect(
toMap(GetCustomerResponse::getUserId, GetCustomerResponse::getUserName)
);
}
}