11. Собрать DTO экрана корзины в BFF
Условие задачи:
Необходимо реализовать BFF-сервис для экрана корзины.
Сервис должен получить корзину пользователя и рекомендации из двух внешних сервисов, объединить данные и вернуть единый DTO для клиентского приложения.
Код:
@FeignClient(
name = "cart-service",
url = "http://shopping-cart"
)
public interface ShoppingCartServiceClient {
@GetMapping("/api/v1/shopping-cart")
CartDto getClientCart();
}
@FeignClient(
name = "recommendations-service",
url = "http://recommendations"
)
public interface RecommendationsServiceClient {
@GetMapping("/api/v1/recommendations")
List<RecommendationDto> getClientRecommendations();
}
public record ClientCartScreenDto(
CartDto cart,
List<RecommendationDto> recommendations
) {
}
@Service
public class ClientCartScreenService {
public ClientCartScreenDto getScreenData() {
// код тут
}
}
Спойлеры к решению
Подсказки
💡 Внедри оба Feign-клиента через конструктор.
💡 Получи корзину с помощью
💡 Получи рекомендации с помощью
💡 Объедини результаты в
💡 Получи корзину с помощью
getClientCart().💡 Получи рекомендации с помощью
getClientRecommendations().💡 Объедини результаты в
ClientCartScreenDto.Решение
@Service
public class ClientCartScreenService {
private final ShoppingCartServiceClient cartClient;
private final RecommendationsServiceClient recommendationsClient;
public ClientCartScreenService(
ShoppingCartServiceClient cartClient,
RecommendationsServiceClient recommendationsClient
) {
this.cartClient = cartClient;
this.recommendationsClient = recommendationsClient;
}
public ClientCartScreenDto getScreenData() {
CartDto cart = cartClient.getClientCart();
List<RecommendationDto> recommendations =
recommendationsClient.getClientRecommendations();
return new ClientCartScreenDto(cart, recommendations);
}
}
BFF вызывает два внешних сервиса и формирует DTO со всеми данными, необходимыми для отображения экрана корзины.