Advertisement
Guest User

Untitled

a guest
May 24th, 2019
102
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.56 KB | None | 0 0
  1. package ee.telia.sales.product;
  2.  
  3. import ee.telia.sales.config.ProductApiProperties;
  4. import ee.telia.sales.order.OrderApiRepository;
  5. import ee.telia.sales.order.OrderApiService;
  6. import ee.telia.sales.order.model.ProductSummaryPageResponse;
  7. import ee.telia.sales.order.model.ProductSummaryResponse;
  8. import ee.telia.sales.product.action.model.Action;
  9. import ee.telia.sales.product.characteristic.CharacteristicService;
  10. import ee.telia.sales.product.config.ProductApiConfigKey;
  11. import ee.telia.sales.product.config.ProductApiConfigService;
  12. import ee.telia.sales.product.model.*;
  13. import ee.telia.sales.product.notice.strategy.ProductNoticeFactory;
  14. import ee.telia.sales.strategy.allowedaction.ActionFactory;
  15. import ee.telia.sales.strategy.product.ProductFactory;
  16. import ee.telia.sales.strategy.product.price.ProductPriceFactory;
  17. import lombok.RequiredArgsConstructor;
  18. import org.springframework.core.env.Environment;
  19. import org.springframework.stereotype.Service;
  20.  
  21. import java.util.List;
  22.  
  23. import static ee.telia.sales.order.model.ProductCategoryCode.TV_TEENUSED;
  24. import static ee.telia.sales.order.model.ProductState.TERMINATED;
  25. import static ee.telia.sales.product.config.ProductApiConfigKey.*;
  26. import static java.util.stream.Collectors.toList;
  27. import static org.apache.commons.lang3.StringUtils.EMPTY;
  28.  
  29. @Service
  30. @RequiredArgsConstructor
  31. public class ProductService {
  32. private final ActionFactory actionFactory;
  33. private final CharacteristicService characteristicService;
  34. private final ProductApiConfigService configService;
  35. private final Environment environment;
  36. private final OrderApiRepository orderApiRepository;
  37. private final OrderApiService orderApiService;
  38. private final ProductFactory productFactory;
  39. private final ProductApiProperties properties;
  40. private final ProductPriceFactory priceFactory;
  41. private final ProductNoticeFactory noticeFactory;
  42. private final ReplaceWithChildrenService replaceWithChildrenService;
  43.  
  44. public static final String KEY_START_CATEGORY = "category.";
  45.  
  46. ProductsPage getProducts(ProductSearchConstraints searchConstraints, Long size, Long page) {
  47. ProductSummaryPageResponse summariesPage = orderApiRepository.getProductSummaries(searchConstraints.toQueryString(), size, page);
  48.  
  49. List<ProductSummaryResponse> summaries;
  50.  
  51. if (searchConstraints.getEndAfter() != null) {
  52. summaries = filterClosedProducts(summariesPage.getProductSummaries());
  53. } else {
  54. summaries = summariesPage.getProductSummaries();
  55. }
  56.  
  57. ProductQueryDetailsHolder queryDetails = ProductQueryDetailsHolder.builder()
  58. .productSummaries(summaries)
  59. .categoryCodes(searchConstraints.getProductCategoryCodes())
  60. .endAfter(searchConstraints.getEndAfter())
  61. .build();
  62.  
  63. List<Product> products = toProducts(queryDetails);
  64.  
  65. return new ProductsPage(products, summariesPage.hasNextPage());
  66. }
  67.  
  68. private List<ProductSummaryResponse> filterClosedProducts(List<ProductSummaryResponse> products) {
  69. return products.stream()
  70. .filter(summary -> summary.hasState(TERMINATED))
  71. .collect(toList());
  72. }
  73.  
  74. ProductDetails getProductDetails(Long rootProductId, ProductDetailsConstraints constraints) {
  75. ProductSummaryResponse rootProductSummary = orderApiService.getDetailedProductSummary(rootProductId, constraints.getOrigin());
  76.  
  77. if (rootProductSummary == null) {
  78. return ProductDetails.empty();
  79. }
  80.  
  81. List<Action> rootProductActions = actionFactory.getActions(rootProductSummary);
  82.  
  83. return ProductDetails.builder()
  84. .actions(rootProductActions)
  85. .children(getChildrenProducts(rootProductSummary, constraints))
  86. .characteristics(characteristicService.getCharacteristicsBasedOnStrategy(rootProductSummary))
  87. .prices(priceFactory.getPrices(rootProductSummary))
  88. .notices(noticeFactory.createDetailsNotices(rootProductSummary))
  89. .build();
  90. }
  91.  
  92. private List<Product> getChildrenProducts(ProductSummaryResponse rootProductSummary, ProductDetailsConstraints detailsConstraints) {
  93. List<ProductSummaryResponse> childSummaries = orderApiService.getProductChildren(rootProductSummary, detailsConstraints.getCatalogCode());
  94. ProductQueryDetailsHolder queryDetails = ProductQueryDetailsHolder.builder()
  95. .productSummaries(childSummaries)
  96. .rootProductSummary(rootProductSummary)
  97. .catalogCode(detailsConstraints.getCatalogCode())
  98. .build();
  99.  
  100. return toProducts(queryDetails);
  101. }
  102.  
  103. List<OrderLink> getOrderLinks(String category) {
  104. String codes = configService.getConfigValue(ORDER_LINK_CATEGORIES.format(category)).orElse(null);
  105. List<String> orderCodes = null != codes ? List.of(codes.trim().split(",")) : List.of();
  106.  
  107. return orderCodes.stream().map(orderCode -> {
  108. OrderLink.OrderLinkBuilder orderLinkBuilder = OrderLink.builder()
  109. .orderCode(orderCode)
  110. .name(ORDER_LINK_NAME.format(orderCode))
  111. .title(ORDER_LINK_TITLE.format(orderCode))
  112. .icon(configService.getConfigValue(CATEGORY_ICON.format(orderCode)).orElse("#plus-round"));
  113.  
  114. //TODO: feature flag and IF case will be removed after MYSE-380 is done
  115. if (TV_TEENUSED.toString().equals(orderCode) && properties.isNewUrlForTvServices()) {
  116. orderLinkBuilder
  117. .url(getOrderLinkNewUrl(orderCode));
  118. } else {
  119. orderLinkBuilder
  120. .isExternal(configService.getConfigValue(CATEGORY_EXTERNAL.format(orderCode)).map(Boolean::valueOf).orElse(true))
  121. .url(getOrderLinkUrl(orderCode));
  122. }
  123.  
  124. return orderLinkBuilder.build();
  125. }).collect(toList());
  126. }
  127.  
  128. private List<Product> toProducts(ProductQueryDetailsHolder queryDetails) {
  129. return replaceWithChildrenService.replaceWithChildren(queryDetails).stream()
  130. .map(productSummary -> productFactory.getProduct(productSummary, queryDetails.getRootProductSummary()))
  131. .collect(toList());
  132. }
  133.  
  134. private String getOrderLinkNewUrl(String code) {
  135. return getUrlHost(ORDER_LINK_NEW_BASE_URL_CODE, code) + getUrlPath(ORDER_LINK_NEW_URL_PATH, code);
  136. }
  137.  
  138. private String getOrderLinkUrl(String code) {
  139. return getUrlHost(ORDER_LINK_BASE_URL_CODE, code) + getUrlPath(ORDER_LINK_URL_PATH, code);
  140. }
  141.  
  142. private String getUrlHost(ProductApiConfigKey hostTemplate, String code) {
  143. String hostCode = configService.getConfigValue(hostTemplate.format(code)).orElse(EMPTY);
  144. return environment.getProperty(BASE_URL.format(hostCode), EMPTY);
  145. }
  146.  
  147. private String getUrlPath(ProductApiConfigKey pathTemplate, String code) {
  148. return configService.getConfigValue(pathTemplate.format(code)).orElse(EMPTY);
  149. }
  150. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement