@infrab4a/connect-angular 5.8.12 → 5.8.13

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (301) hide show
  1. package/angular-connect.module.d.ts +36 -0
  2. package/angular-elastic-search.module.d.ts +9 -0
  3. package/angular-firebase-auth.module.d.ts +11 -0
  4. package/angular-firestore.module.d.ts +17 -0
  5. package/angular-hasura-graphql.module.d.ts +14 -0
  6. package/angular-vertex-search.module.d.ts +9 -0
  7. package/consts/backend-url.const.d.ts +1 -0
  8. package/consts/category-structure.d.ts +1 -0
  9. package/consts/default-shop.const.d.ts +1 -0
  10. package/consts/es-config.const.d.ts +1 -0
  11. package/consts/firebase-const.d.ts +4 -0
  12. package/consts/hasura-options.const.d.ts +1 -0
  13. package/consts/index.d.ts +8 -0
  14. package/consts/persistence.const.d.ts +1 -0
  15. package/consts/storage-base-url.const.d.ts +1 -0
  16. package/consts/vertex-config.const.d.ts +1 -0
  17. package/esm2020/angular-connect.module.mjs +293 -0
  18. package/esm2020/angular-elastic-search.module.mjs +34 -0
  19. package/esm2020/angular-firebase-auth.module.mjs +141 -0
  20. package/esm2020/angular-firestore.module.mjs +611 -0
  21. package/esm2020/angular-hasura-graphql.module.mjs +421 -0
  22. package/esm2020/angular-vertex-search.module.mjs +34 -0
  23. package/esm2020/consts/backend-url.const.mjs +2 -0
  24. package/esm2020/consts/category-structure.mjs +2 -0
  25. package/esm2020/consts/default-shop.const.mjs +2 -0
  26. package/esm2020/consts/es-config.const.mjs +2 -0
  27. package/esm2020/consts/firebase-const.mjs +5 -0
  28. package/esm2020/consts/hasura-options.const.mjs +2 -0
  29. package/esm2020/consts/index.mjs +9 -0
  30. package/esm2020/consts/persistence.const.mjs +2 -0
  31. package/esm2020/consts/storage-base-url.const.mjs +2 -0
  32. package/esm2020/consts/vertex-config.const.mjs +2 -0
  33. package/esm2020/helpers/index.mjs +2 -0
  34. package/esm2020/helpers/mobile-operation-system-checker.helper.mjs +7 -0
  35. package/esm2020/index.mjs +7 -0
  36. package/esm2020/infrab4a-connect-angular.mjs +5 -0
  37. package/esm2020/interfaces/catalog-strategies.interface.mjs +2 -0
  38. package/esm2020/interfaces/category-facades.interface.mjs +2 -0
  39. package/esm2020/interfaces/index.mjs +3 -0
  40. package/esm2020/persistence/cookie-data-persistence.mjs +22 -0
  41. package/esm2020/persistence/data-persistence.mjs +2 -0
  42. package/esm2020/persistence/index.mjs +3 -0
  43. package/esm2020/services/auth.service.mjs +37 -0
  44. package/esm2020/services/cart/cart-services.facade.mjs +21 -0
  45. package/esm2020/services/cart/index.mjs +2 -0
  46. package/esm2020/services/cart.service.mjs +84 -0
  47. package/esm2020/services/catalog/adapters/category-structure.adapter.mjs +2 -0
  48. package/esm2020/services/catalog/adapters/index.mjs +4 -0
  49. package/esm2020/services/catalog/adapters/new-category-structure.adapter.mjs +43 -0
  50. package/esm2020/services/catalog/adapters/old-category-structure.adapter.mjs +23 -0
  51. package/esm2020/services/catalog/catalog.service.mjs +111 -0
  52. package/esm2020/services/catalog/category.service.mjs +42 -0
  53. package/esm2020/services/catalog/context/catalog-search.context.mjs +40 -0
  54. package/esm2020/services/catalog/enums/index.mjs +2 -0
  55. package/esm2020/services/catalog/enums/product-sorts.enum.mjs +11 -0
  56. package/esm2020/services/catalog/facades/catalog-service.facade.mjs +32 -0
  57. package/esm2020/services/catalog/facades/catalog-strategies.facade.mjs +17 -0
  58. package/esm2020/services/catalog/facades/category-repository.facade.mjs +20 -0
  59. package/esm2020/services/catalog/facades/category-service.facade.mjs +30 -0
  60. package/esm2020/services/catalog/facades/index.mjs +6 -0
  61. package/esm2020/services/catalog/facades/product-catalog.facade.mjs +21 -0
  62. package/esm2020/services/catalog/helpers/brand-manager.helper.mjs +62 -0
  63. package/esm2020/services/catalog/helpers/catalog-filter.helper.mjs +44 -0
  64. package/esm2020/services/catalog/helpers/catalog-sort.helper.mjs +52 -0
  65. package/esm2020/services/catalog/helpers/index.mjs +5 -0
  66. package/esm2020/services/catalog/helpers/product-fields.helper.mjs +43 -0
  67. package/esm2020/services/catalog/index.mjs +8 -0
  68. package/esm2020/services/catalog/models/category-with-tree.model.mjs +10 -0
  69. package/esm2020/services/catalog/models/index.mjs +2 -0
  70. package/esm2020/services/catalog/services/catalog-helpers.service.mjs +33 -0
  71. package/esm2020/services/catalog/services/catalog-operations.facade.mjs +26 -0
  72. package/esm2020/services/catalog/services/catalog-repository.service.mjs +25 -0
  73. package/esm2020/services/catalog/services/index.mjs +5 -0
  74. package/esm2020/services/catalog/services/product-management.facade.mjs +25 -0
  75. package/esm2020/services/catalog/strategies/category-search.strategy.mjs +133 -0
  76. package/esm2020/services/catalog/strategies/index.mjs +4 -0
  77. package/esm2020/services/catalog/strategies/profile-search.strategy.mjs +42 -0
  78. package/esm2020/services/catalog/strategies/term-search.strategy.mjs +126 -0
  79. package/esm2020/services/catalog/strategies/types/strategy-params.type.mjs +2 -0
  80. package/esm2020/services/catalog/types/fetch-products-options.type.mjs +2 -0
  81. package/esm2020/services/catalog/types/fetch-products-params.type.mjs +2 -0
  82. package/esm2020/services/catalog/types/fetch-products-response.type.mjs +2 -0
  83. package/esm2020/services/catalog/types/index.mjs +6 -0
  84. package/esm2020/services/catalog/types/method-params.type.mjs +2 -0
  85. package/esm2020/services/catalog/types/product-sort.type.mjs +2 -0
  86. package/esm2020/services/catalog/wishlist.service.mjs +258 -0
  87. package/esm2020/services/checkout/checkout-dependencies.facade.mjs +20 -0
  88. package/esm2020/services/checkout/checkout-repositories.facade.mjs +20 -0
  89. package/esm2020/services/checkout/index.mjs +3 -0
  90. package/esm2020/services/checkout-subscription.service.mjs +55 -0
  91. package/esm2020/services/checkout.service.mjs +131 -0
  92. package/esm2020/services/coupon/coupon-repositories.facade.mjs +24 -0
  93. package/esm2020/services/coupon/index.mjs +2 -0
  94. package/esm2020/services/coupon/types/coupon-params.type.mjs +2 -0
  95. package/esm2020/services/coupon.service.mjs +248 -0
  96. package/esm2020/services/helpers/index.mjs +2 -0
  97. package/esm2020/services/helpers/util.helper.mjs +18 -0
  98. package/esm2020/services/home-shop/home-shop-repositories.facade.mjs +24 -0
  99. package/esm2020/services/home-shop/index.mjs +2 -0
  100. package/esm2020/services/home-shop.service.mjs +130 -0
  101. package/esm2020/services/index.mjs +12 -0
  102. package/esm2020/services/order-product-review.service.mjs +126 -0
  103. package/esm2020/services/order-recurrence.service.mjs +76 -0
  104. package/esm2020/services/order.service.mjs +30 -0
  105. package/esm2020/services/shared/configuration.facade.mjs +29 -0
  106. package/esm2020/services/shared/index.mjs +2 -0
  107. package/esm2020/services/types/index.mjs +5 -0
  108. package/esm2020/services/types/pending-product-review.type.mjs +2 -0
  109. package/esm2020/services/types/product-review-create.type.mjs +2 -0
  110. package/esm2020/services/types/required-checkout-data.type.mjs +2 -0
  111. package/esm2020/services/types/required-checkout-subscription-data.type.mjs +2 -0
  112. package/esm2020/types/firebase-app-config.type.mjs +2 -0
  113. package/esm2020/types/index.mjs +2 -0
  114. package/fesm2015/infrab4a-connect-angular.mjs +3786 -0
  115. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
  116. package/fesm2020/infrab4a-connect-angular.mjs +3688 -0
  117. package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
  118. package/helpers/index.d.ts +1 -0
  119. package/helpers/mobile-operation-system-checker.helper.d.ts +3 -0
  120. package/index.d.ts +6 -0
  121. package/interfaces/catalog-strategies.interface.d.ts +31 -0
  122. package/interfaces/category-facades.interface.d.ts +6 -0
  123. package/interfaces/index.d.ts +2 -0
  124. package/package.json +24 -4
  125. package/persistence/cookie-data-persistence.d.ts +10 -0
  126. package/persistence/data-persistence.d.ts +6 -0
  127. package/persistence/index.d.ts +2 -0
  128. package/services/auth.service.d.ts +18 -0
  129. package/services/cart/cart-services.facade.d.ts +12 -0
  130. package/services/cart/index.d.ts +1 -0
  131. package/services/cart.service.d.ts +27 -0
  132. package/services/catalog/adapters/category-structure.adapter.d.ts +4 -0
  133. package/services/catalog/adapters/index.d.ts +3 -0
  134. package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -0
  135. package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -0
  136. package/services/catalog/catalog.service.d.ts +24 -0
  137. package/services/catalog/category.service.d.ts +23 -0
  138. package/services/catalog/context/catalog-search.context.d.ts +14 -0
  139. package/services/catalog/enums/index.d.ts +1 -0
  140. package/services/catalog/enums/product-sorts.enum.d.ts +9 -0
  141. package/services/catalog/facades/catalog-service.facade.d.ts +15 -0
  142. package/services/catalog/facades/catalog-strategies.facade.d.ts +10 -0
  143. package/services/catalog/facades/category-repository.facade.d.ts +9 -0
  144. package/services/catalog/facades/category-service.facade.d.ts +15 -0
  145. package/{src/services/catalog/facades/index.ts → services/catalog/facades/index.d.ts} +5 -5
  146. package/services/catalog/facades/product-catalog.facade.d.ts +10 -0
  147. package/services/catalog/helpers/brand-manager.helper.d.ts +14 -0
  148. package/services/catalog/helpers/catalog-filter.helper.d.ts +8 -0
  149. package/services/catalog/helpers/catalog-sort.helper.d.ts +7 -0
  150. package/services/catalog/helpers/index.d.ts +4 -0
  151. package/services/catalog/helpers/product-fields.helper.d.ts +7 -0
  152. package/services/catalog/index.d.ts +7 -0
  153. package/services/catalog/models/category-with-tree.model.d.ts +4 -0
  154. package/services/catalog/models/index.d.ts +1 -0
  155. package/services/catalog/services/catalog-helpers.service.d.ts +17 -0
  156. package/services/catalog/services/catalog-operations.facade.d.ts +13 -0
  157. package/services/catalog/services/catalog-repository.service.d.ts +12 -0
  158. package/{src/services/catalog/services/index.ts → services/catalog/services/index.d.ts} +4 -4
  159. package/services/catalog/services/product-management.facade.d.ts +12 -0
  160. package/services/catalog/strategies/category-search.strategy.d.ts +19 -0
  161. package/services/catalog/strategies/index.d.ts +3 -0
  162. package/services/catalog/strategies/profile-search.strategy.d.ts +14 -0
  163. package/services/catalog/strategies/term-search.strategy.d.ts +20 -0
  164. package/services/catalog/strategies/types/strategy-params.type.d.ts +59 -0
  165. package/services/catalog/types/fetch-products-options.type.d.ts +8 -0
  166. package/services/catalog/types/fetch-products-params.type.d.ts +25 -0
  167. package/services/catalog/types/fetch-products-response.type.d.ts +19 -0
  168. package/services/catalog/types/index.d.ts +5 -0
  169. package/services/catalog/types/method-params.type.d.ts +17 -0
  170. package/services/catalog/types/product-sort.type.d.ts +2 -0
  171. package/services/catalog/wishlist.service.d.ts +60 -0
  172. package/services/checkout/checkout-dependencies.facade.d.ts +10 -0
  173. package/services/checkout/checkout-repositories.facade.d.ts +9 -0
  174. package/{src/services/checkout/index.ts → services/checkout/index.d.ts} +2 -2
  175. package/services/checkout-subscription.service.d.ts +19 -0
  176. package/services/checkout.service.d.ts +33 -0
  177. package/services/coupon/coupon-repositories.facade.d.ts +10 -0
  178. package/{src/services/coupon/index.ts → services/coupon/index.d.ts} +1 -1
  179. package/services/coupon/types/coupon-params.type.d.ts +13 -0
  180. package/services/coupon.service.d.ts +36 -0
  181. package/services/helpers/index.d.ts +1 -0
  182. package/services/helpers/util.helper.d.ts +3 -0
  183. package/services/home-shop/home-shop-repositories.facade.d.ts +10 -0
  184. package/{src/services/home-shop/index.ts → services/home-shop/index.d.ts} +1 -1
  185. package/services/home-shop.service.d.ts +34 -0
  186. package/services/index.d.ts +11 -0
  187. package/services/order-product-review.service.d.ts +18 -0
  188. package/services/order-recurrence.service.d.ts +25 -0
  189. package/services/order.service.d.ts +13 -0
  190. package/services/shared/configuration.facade.d.ts +12 -0
  191. package/services/shared/index.d.ts +1 -0
  192. package/services/types/index.d.ts +4 -0
  193. package/services/types/pending-product-review.type.d.ts +12 -0
  194. package/services/types/product-review-create.type.d.ts +14 -0
  195. package/services/types/required-checkout-data.type.d.ts +2 -0
  196. package/services/types/required-checkout-subscription-data.type.d.ts +2 -0
  197. package/types/firebase-app-config.type.d.ts +1 -0
  198. package/types/index.d.ts +1 -0
  199. package/eslint.config.js +0 -18
  200. package/index.ts +0 -1
  201. package/karma.conf.js +0 -32
  202. package/ng-package.json +0 -8
  203. package/project.json +0 -37
  204. package/src/angular-connect.module.ts +0 -270
  205. package/src/angular-elastic-search.module.ts +0 -23
  206. package/src/angular-firebase-auth.module.ts +0 -101
  207. package/src/angular-firestore.module.ts +0 -416
  208. package/src/angular-hasura-graphql.module.ts +0 -269
  209. package/src/angular-vertex-search.module.ts +0 -23
  210. package/src/consts/backend-url.const.ts +0 -1
  211. package/src/consts/category-structure.ts +0 -1
  212. package/src/consts/default-shop.const.ts +0 -1
  213. package/src/consts/es-config.const.ts +0 -1
  214. package/src/consts/firebase-const.ts +0 -5
  215. package/src/consts/hasura-options.const.ts +0 -1
  216. package/src/consts/index.ts +0 -8
  217. package/src/consts/persistence.const.ts +0 -1
  218. package/src/consts/storage-base-url.const.ts +0 -1
  219. package/src/consts/vertex-config.const.ts +0 -1
  220. package/src/helpers/index.ts +0 -1
  221. package/src/helpers/mobile-operation-system-checker.helper.ts +0 -10
  222. package/src/index.ts +0 -6
  223. package/src/interfaces/catalog-strategies.interface.ts +0 -36
  224. package/src/interfaces/category-facades.interface.ts +0 -7
  225. package/src/interfaces/index.ts +0 -2
  226. package/src/persistence/cookie-data-persistence.ts +0 -21
  227. package/src/persistence/data-persistence.ts +0 -7
  228. package/src/persistence/index.ts +0 -2
  229. package/src/services/auth.service.ts +0 -39
  230. package/src/services/cart/cart-services.facade.ts +0 -14
  231. package/src/services/cart/index.ts +0 -1
  232. package/src/services/cart.service.ts +0 -148
  233. package/src/services/catalog/adapters/category-structure.adapter.ts +0 -5
  234. package/src/services/catalog/adapters/index.ts +0 -3
  235. package/src/services/catalog/adapters/new-category-structure.adapter.ts +0 -42
  236. package/src/services/catalog/adapters/old-category-structure.adapter.ts +0 -17
  237. package/src/services/catalog/catalog.service.ts +0 -153
  238. package/src/services/catalog/category.service.ts +0 -56
  239. package/src/services/catalog/context/catalog-search.context.ts +0 -59
  240. package/src/services/catalog/enums/index.ts +0 -1
  241. package/src/services/catalog/enums/product-sorts.enum.ts +0 -9
  242. package/src/services/catalog/facades/catalog-service.facade.ts +0 -32
  243. package/src/services/catalog/facades/catalog-strategies.facade.ts +0 -12
  244. package/src/services/catalog/facades/category-repository.facade.ts +0 -10
  245. package/src/services/catalog/facades/category-service.facade.ts +0 -25
  246. package/src/services/catalog/facades/product-catalog.facade.ts +0 -13
  247. package/src/services/catalog/helpers/brand-manager.helper.ts +0 -69
  248. package/src/services/catalog/helpers/catalog-filter.helper.ts +0 -50
  249. package/src/services/catalog/helpers/catalog-sort.helper.ts +0 -54
  250. package/src/services/catalog/helpers/index.ts +0 -4
  251. package/src/services/catalog/helpers/product-fields.helper.ts +0 -39
  252. package/src/services/catalog/index.ts +0 -7
  253. package/src/services/catalog/models/category-with-tree.model.ts +0 -7
  254. package/src/services/catalog/models/index.ts +0 -1
  255. package/src/services/catalog/services/catalog-helpers.service.ts +0 -35
  256. package/src/services/catalog/services/catalog-operations.facade.ts +0 -24
  257. package/src/services/catalog/services/catalog-repository.service.ts +0 -20
  258. package/src/services/catalog/services/product-management.facade.ts +0 -20
  259. package/src/services/catalog/strategies/category-search.strategy.ts +0 -168
  260. package/src/services/catalog/strategies/index.ts +0 -3
  261. package/src/services/catalog/strategies/profile-search.strategy.ts +0 -51
  262. package/src/services/catalog/strategies/term-search.strategy.ts +0 -163
  263. package/src/services/catalog/strategies/types/strategy-params.type.ts +0 -59
  264. package/src/services/catalog/types/fetch-products-options.type.ts +0 -10
  265. package/src/services/catalog/types/fetch-products-params.type.ts +0 -27
  266. package/src/services/catalog/types/fetch-products-response.type.ts +0 -11
  267. package/src/services/catalog/types/index.ts +0 -5
  268. package/src/services/catalog/types/method-params.type.ts +0 -21
  269. package/src/services/catalog/types/product-sort.type.ts +0 -3
  270. package/src/services/catalog/wishlist.service.ts +0 -364
  271. package/src/services/checkout/checkout-dependencies.facade.ts +0 -13
  272. package/src/services/checkout/checkout-repositories.facade.ts +0 -10
  273. package/src/services/checkout-subscription.service.ts +0 -76
  274. package/src/services/checkout.service.ts +0 -236
  275. package/src/services/coupon/coupon-repositories.facade.ts +0 -11
  276. package/src/services/coupon/types/coupon-params.type.ts +0 -15
  277. package/src/services/coupon.service.ts +0 -347
  278. package/src/services/errors/group-invalid-coupon.error.ts +0 -9
  279. package/src/services/errors/index.ts +0 -2
  280. package/src/services/errors/invalid-coupon.error.ts +0 -7
  281. package/src/services/helpers/index.ts +0 -1
  282. package/src/services/helpers/util.helper.ts +0 -17
  283. package/src/services/home-shop/home-shop-repositories.facade.ts +0 -11
  284. package/src/services/home-shop.service.ts +0 -210
  285. package/src/services/index.ts +0 -12
  286. package/src/services/order-product-review.service.ts +0 -135
  287. package/src/services/order-recurrence.service.ts +0 -121
  288. package/src/services/order.service.ts +0 -23
  289. package/src/services/shared/configuration.facade.ts +0 -21
  290. package/src/services/shared/index.ts +0 -1
  291. package/src/services/types/index.ts +0 -4
  292. package/src/services/types/pending-product-review.type.ts +0 -12
  293. package/src/services/types/product-review-create.type.ts +0 -15
  294. package/src/services/types/required-checkout-data.type.ts +0 -3
  295. package/src/services/types/required-checkout-subscription-data.type.ts +0 -3
  296. package/src/types/firebase-app-config.type.ts +0 -1
  297. package/src/types/index.ts +0 -1
  298. package/tsconfig.json +0 -17
  299. package/tsconfig.lib.json +0 -13
  300. package/tsconfig.lib.prod.json +0 -13
  301. package/tsconfig.spec.json +0 -17
@@ -1,59 +0,0 @@
1
- import { Product, RepositoryCacheOptions, RepositoryFindResult, Shops } from '@infrab4a/connect'
2
-
3
- import { CatalogSearchParams, CatalogSearchStrategy } from '../../../interfaces'
4
-
5
- export class CatalogSearchContext {
6
- private strategies = new Map<string, CatalogSearchStrategy>()
7
-
8
- constructor(
9
- private readonly categoryStrategy: CatalogSearchStrategy,
10
- private readonly termStrategy: CatalogSearchStrategy,
11
- private readonly profileStrategy: CatalogSearchStrategy,
12
- ) {
13
- this.initializeStrategies()
14
- }
15
-
16
- async executeSearch(
17
- params: CatalogSearchParams,
18
- shop: Shops,
19
- optionsCache?: { cache?: RepositoryCacheOptions },
20
- ): Promise<RepositoryFindResult<Product>> {
21
- const strategy = this.selectStrategy(params)
22
-
23
- return strategy.search(params, shop, optionsCache)
24
- }
25
-
26
- private initializeStrategies(): void {
27
- this.strategies.set('category', this.categoryStrategy)
28
- this.strategies.set('term', this.termStrategy)
29
- this.strategies.set('profile', this.profileStrategy)
30
- }
31
-
32
- private selectStrategy(params: CatalogSearchParams): CatalogSearchStrategy {
33
- if (params.category) {
34
- const strategy = this.strategies.get('category')
35
-
36
- if (!strategy) throw new Error('Category strategy not found')
37
-
38
- return strategy
39
- }
40
-
41
- if (params.term) {
42
- const strategy = this.strategies.get('term')
43
-
44
- if (!strategy) throw new Error('Term strategy not found')
45
-
46
- return strategy
47
- }
48
-
49
- if (params.profile?.length) {
50
- const strategy = this.strategies.get('profile')
51
-
52
- if (!strategy) throw new Error('Profile strategy not found')
53
-
54
- return strategy
55
- }
56
-
57
- throw new Error('No valid search strategy found for the given parameters')
58
- }
59
- }
@@ -1 +0,0 @@
1
- export * from './product-sorts.enum'
@@ -1,9 +0,0 @@
1
- export enum ProductSorts {
2
- MOST_RELEVANT = 'most-relevant',
3
- BEST_SELLER = 'best-sellers',
4
- BIGGEST_PRICE = 'biggest-price',
5
- LOWEST_PRICE = 'lowest-price',
6
- BIGGEST_DISCOUNT = 'biggest-discount',
7
- BEST_RATING = 'best-rating',
8
- NEWS = 'news',
9
- }
@@ -1,32 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core'
2
- import { Shops } from '@infrab4a/connect'
3
-
4
- import { DEFAULT_SHOP } from '../../../consts'
5
- import { CatalogService } from '../catalog.service'
6
- import { CatalogSearchContext } from '../context/catalog-search.context'
7
- import { CatalogHelpersService } from '../services'
8
-
9
- import { CatalogStrategiesFacade } from './catalog-strategies.facade'
10
-
11
- @Injectable()
12
- export class CatalogServiceFacade {
13
- private catalogService: CatalogService
14
-
15
- constructor(
16
- private readonly helpersService: CatalogHelpersService,
17
- private readonly strategiesFacade: CatalogStrategiesFacade,
18
- @Inject(DEFAULT_SHOP) private readonly shop: Shops,
19
- ) {
20
- const searchContext = new CatalogSearchContext(
21
- this.strategiesFacade.categoryStrategy,
22
- this.strategiesFacade.termStrategy,
23
- this.strategiesFacade.profileStrategy,
24
- )
25
-
26
- this.catalogService = new CatalogService(searchContext, this.helpersService, this.shop)
27
- }
28
-
29
- getCatalogService(): CatalogService {
30
- return this.catalogService
31
- }
32
- }
@@ -1,12 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
-
3
- import { CategorySearchStrategy, ProfileSearchStrategy, TermSearchStrategy } from '../strategies'
4
-
5
- @Injectable()
6
- export class CatalogStrategiesFacade {
7
- constructor(
8
- public readonly categoryStrategy: CategorySearchStrategy,
9
- public readonly termStrategy: TermSearchStrategy,
10
- public readonly profileStrategy: ProfileSearchStrategy,
11
- ) {}
12
- }
@@ -1,10 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core'
2
- import { CategoryFilterRepository, CategoryRepository } from '@infrab4a/connect'
3
-
4
- @Injectable()
5
- export class CategoryRepositoryFacade {
6
- constructor(
7
- @Inject('CategoryRepository') public readonly categoryRepository: CategoryRepository,
8
- @Inject('CategoryFilterRepository') public readonly categoryFilterRepository: CategoryFilterRepository,
9
- ) {}
10
- }
@@ -1,25 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core'
2
- import { Shops } from '@infrab4a/connect'
3
-
4
- import { DEFAULT_SHOP } from '../../../consts'
5
- import { CategoryService } from '../category.service'
6
-
7
- import { CategoryRepositoryFacade } from './category-repository.facade'
8
- import { ProductCatalogFacade } from './product-catalog.facade'
9
-
10
- @Injectable()
11
- export class CategoryServiceFacade {
12
- private categoryService: CategoryService
13
-
14
- constructor(
15
- private readonly categoryRepositoryFacade: CategoryRepositoryFacade,
16
- private readonly productCatalogFacade: ProductCatalogFacade,
17
- @Inject(DEFAULT_SHOP) private readonly shop: Shops,
18
- ) {
19
- this.categoryService = new CategoryService(this.categoryRepositoryFacade, this.productCatalogFacade, this.shop)
20
- }
21
-
22
- getCategoryService(): CategoryService {
23
- return this.categoryService
24
- }
25
- }
@@ -1,13 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core'
2
- import { ProductCatalogRepository } from '@infrab4a/connect'
3
-
4
- import { CATEGORY_STRUCTURE } from '../../../consts'
5
- import { CategoryStructureAdapter } from '../adapters'
6
-
7
- @Injectable()
8
- export class ProductCatalogFacade {
9
- constructor(
10
- @Inject('ProductCatalogRepository') public readonly productCatalogRepository: ProductCatalogRepository,
11
- @Inject(CATEGORY_STRUCTURE) public readonly categoryStructureAdapter: CategoryStructureAdapter,
12
- ) {}
13
- }
@@ -1,69 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { isEmpty, Where } from '@infrab4a/connect'
3
-
4
- import { CatalogSearchParams } from '../../../interfaces'
5
- import { ProductCatalogFacade } from '../facades'
6
-
7
- @Injectable()
8
- export class BrandManagerHelper {
9
- private brandsList: Record<string, string[]> = {}
10
-
11
- constructor(private readonly productCatalog: ProductCatalogFacade) {}
12
-
13
- async setBrandsList(options: CatalogSearchParams, brands: string[]): Promise<void> {
14
- const filterBrands = options.filters?.brands
15
- const indexKey = this.buildIndexBrands(options)
16
-
17
- if (isEmpty(brands) && options.filters) {
18
- delete options.filters.brands
19
- }
20
-
21
- this.brandsList[indexKey] = this.brandsList[indexKey] || brands || (await this.fetchBrandsOnly(options))
22
- this.brandsList[indexKey] = this.brandsList[indexKey].filter(Boolean)
23
-
24
- if (options.filters) {
25
- options.filters = {
26
- ...options.filters,
27
- brands: filterBrands,
28
- }
29
- }
30
- }
31
-
32
- getBrandsList(indexKey: string): string[] {
33
- return this.brandsList[indexKey]
34
- }
35
-
36
- buildIndexBrands(options: CatalogSearchParams): string {
37
- if (options.category) return `category-${options.category.id}`
38
-
39
- if (options.term) return `term-${options.term}`
40
-
41
- if (options.profile) return `profile-${options.profile.join(',')}`
42
-
43
- return ''
44
- }
45
-
46
- private async fetchBrandsOnly(options: CatalogSearchParams): Promise<string[]> {
47
- let filters = {}
48
-
49
- if (options.category) {
50
- filters = await this.productCatalog.categoryStructureAdapter.buildProductFilterByCategory(options.category)
51
- }
52
-
53
- return this.productCatalog.productCatalogRepository
54
- .findCatalog(
55
- {
56
- fields: ['id'],
57
- filters: {
58
- ...filters,
59
- published: { operator: Where.EQUALS, value: true },
60
- },
61
- options: {
62
- distinct: ['brand'],
63
- },
64
- },
65
- options.mainGender,
66
- )
67
- .then((result) => result.distinct.brand)
68
- }
69
- }
@@ -1,50 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { Product, RepositoryFindFielters, set, Where } from '@infrab4a/connect'
3
-
4
- import { CatalogFilters } from '../../../interfaces'
5
-
6
- @Injectable()
7
- export class CatalogFilterHelper {
8
- buildFilterQuery(filters: CatalogFilters): RepositoryFindFielters<Product> {
9
- const filterQuery = {} as RepositoryFindFielters<Product>
10
-
11
- if (filters.clubDiscount?.length) {
12
- set(filterQuery, 'price.subscriberDiscountPercentage', {
13
- operator: Where.IN,
14
- value: filters.clubDiscount,
15
- })
16
- }
17
-
18
- if (filters.brands?.length) {
19
- filterQuery.brand = { operator: Where.IN, value: filters.brands }
20
- }
21
-
22
- if (filters.gender?.length) {
23
- filterQuery.gender = { operator: Where.IN, value: filters.gender }
24
- }
25
-
26
- if (filters.prices?.min || filters.prices?.max) {
27
- const priceField = filters.prices.subscriberPrice ? 'price.subscriberPrice' : 'price.price'
28
- const priceFilters = [
29
- ...(filters.prices.min ? [{ operator: Where.GTE, value: Math.floor(filters.prices.min) }] : []),
30
- ...(filters.prices.max ? [{ operator: Where.LTE, value: Math.ceil(filters.prices.max) }] : []),
31
- ]
32
-
33
- set(filterQuery, priceField, priceFilters)
34
- }
35
-
36
- if (filters.rate) {
37
- filterQuery.rate = { operator: Where.GTE, value: filters.rate }
38
- }
39
-
40
- if (filters.tags?.length) {
41
- filterQuery.tagsProfile = { operator: Where.LIKE, value: filters.tags }
42
- }
43
-
44
- if (filters.customOptions?.length) {
45
- filterQuery.filters = { operator: Where.LIKE, value: filters.customOptions }
46
- }
47
-
48
- return filterQuery
49
- }
50
- }
@@ -1,54 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { Product, RepositoryOrderBy } from '@infrab4a/connect'
3
-
4
- @Injectable()
5
- export class CatalogSortHelper {
6
- buildSortQuery(sort: string): RepositoryOrderBy<Product> {
7
- if (!sort || sort === 'most-relevant') return {}
8
-
9
- switch (sort) {
10
- case 'best-sellers':
11
- return {
12
- shoppingCount: 'desc',
13
- rate: 'desc',
14
- stock: 'desc',
15
- name: 'asc',
16
- }
17
-
18
- case 'biggest-price':
19
- return {
20
- subscriberPrice: 'desc',
21
- rate: 'desc',
22
- shoppingCount: 'desc',
23
- } as any
24
-
25
- case 'lowest-price':
26
- return {
27
- subscriberPrice: 'asc',
28
- rate: 'desc',
29
- shoppingCount: 'desc',
30
- } as any
31
-
32
- case 'best-rating':
33
- return {
34
- rate: 'desc',
35
- shoppingCount: 'desc',
36
- stock: 'desc',
37
- name: 'asc',
38
- }
39
-
40
- case 'news':
41
- return { createdAt: 'desc' }
42
-
43
- case 'biggest-discount':
44
- return {
45
- subscriberDiscountPercentage: 'desc',
46
- rate: 'desc',
47
- shoppingCount: 'desc',
48
- } as any
49
-
50
- default:
51
- return {}
52
- }
53
- }
54
- }
@@ -1,4 +0,0 @@
1
- export * from './brand-manager.helper'
2
- export * from './catalog-filter.helper'
3
- export * from './catalog-sort.helper'
4
- export * from './product-fields.helper'
@@ -1,39 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { NonFunctionPropertyNames, Product } from '@infrab4a/connect'
3
-
4
- @Injectable()
5
- export class ProductFieldsHelper {
6
- getStandardFields(): NonFunctionPropertyNames<Product>[] {
7
- return [
8
- 'id',
9
- 'name',
10
- 'slug',
11
- 'images',
12
- 'imagesCard',
13
- 'miniatures',
14
- 'price',
15
- 'stock',
16
- 'published',
17
- 'CEST',
18
- 'EAN',
19
- 'NCM',
20
- 'brand',
21
- 'costPrice',
22
- 'hasVariants',
23
- 'isKit',
24
- 'sku',
25
- 'rate',
26
- 'tagsProfile',
27
- 'tagsCollection',
28
- 'type',
29
- 'shoppingCount',
30
- 'gender',
31
- 'createdAt',
32
- 'label',
33
- 'outlet',
34
- 'group',
35
- 'variantSlug',
36
- 'filters',
37
- ]
38
- }
39
- }
@@ -1,7 +0,0 @@
1
- export * from './adapters'
2
- export * from './catalog.service'
3
- export * from './category.service'
4
- export * from './enums'
5
- export * from './models'
6
- export * from './types'
7
- export * from './wishlist.service'
@@ -1,7 +0,0 @@
1
- import { Type } from 'class-transformer'
2
- import { Category } from '@infrab4a/connect'
3
-
4
- export class CategoryWithTree extends Category {
5
- @Type(() => CategoryWithTree)
6
- children?: CategoryWithTree[]
7
- }
@@ -1 +0,0 @@
1
- export * from './category-with-tree.model'
@@ -1,35 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
-
3
- import { ProductServicesFacade } from '../../../interfaces'
4
- import { BrandManagerHelper, CatalogFilterHelper, CatalogSortHelper, ProductFieldsHelper } from '../helpers'
5
-
6
- import { CatalogOperationsFacade } from './catalog-operations.facade'
7
- import { ProductManagementFacade } from './product-management.facade'
8
-
9
- @Injectable()
10
- export class CatalogHelpersService {
11
- constructor(
12
- private readonly catalogOperations: CatalogOperationsFacade,
13
- private readonly productManagement: ProductManagementFacade,
14
- ) {}
15
-
16
- getFilterHelper(): CatalogFilterHelper {
17
- return this.catalogOperations.getFilterHelper()
18
- }
19
-
20
- getSortHelper(): CatalogSortHelper {
21
- return this.catalogOperations.getSortHelper()
22
- }
23
-
24
- getFieldsHelper(): ProductFieldsHelper {
25
- return this.catalogOperations.getFieldsHelper()
26
- }
27
-
28
- getBrandManager(): BrandManagerHelper {
29
- return this.productManagement.getBrandManager()
30
- }
31
-
32
- getProductServices(): ProductServicesFacade {
33
- return this.productManagement.getProductServices()
34
- }
35
- }
@@ -1,24 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
-
3
- import { CatalogFilterHelper, CatalogSortHelper, ProductFieldsHelper } from '../helpers'
4
-
5
- @Injectable()
6
- export class CatalogOperationsFacade {
7
- constructor(
8
- private readonly filterHelper: CatalogFilterHelper,
9
- private readonly sortHelper: CatalogSortHelper,
10
- private readonly fieldsHelper: ProductFieldsHelper,
11
- ) {}
12
-
13
- getFilterHelper(): CatalogFilterHelper {
14
- return this.filterHelper
15
- }
16
-
17
- getSortHelper(): CatalogSortHelper {
18
- return this.sortHelper
19
- }
20
-
21
- getFieldsHelper(): ProductFieldsHelper {
22
- return this.fieldsHelper
23
- }
24
- }
@@ -1,20 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core'
2
-
3
- import { ProductServicesFacade } from '../../../interfaces'
4
- import { ProductCatalogFacade } from '../facades'
5
-
6
- @Injectable()
7
- export class CatalogRepositoryService {
8
- constructor(
9
- private readonly productCatalog: ProductCatalogFacade,
10
- @Inject('ProductServicesFacade') private readonly productServices: ProductServicesFacade,
11
- ) {}
12
-
13
- getProductCatalog(): ProductCatalogFacade {
14
- return this.productCatalog
15
- }
16
-
17
- getProductServices(): ProductServicesFacade {
18
- return this.productServices
19
- }
20
- }
@@ -1,20 +0,0 @@
1
- import { Inject, Injectable } from '@angular/core'
2
-
3
- import { ProductServicesFacade } from '../../../interfaces'
4
- import { BrandManagerHelper } from '../helpers'
5
-
6
- @Injectable()
7
- export class ProductManagementFacade {
8
- constructor(
9
- private readonly brandManager: BrandManagerHelper,
10
- @Inject('ProductServicesFacade') private readonly productServices: ProductServicesFacade,
11
- ) {}
12
-
13
- getBrandManager(): BrandManagerHelper {
14
- return this.brandManager
15
- }
16
-
17
- getProductServices(): ProductServicesFacade {
18
- return this.productServices
19
- }
20
- }
@@ -1,168 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { isEmpty, Product, RepositoryCacheOptions, RepositoryFindResult, Shops, Where } from '@infrab4a/connect'
3
-
4
- import { CatalogSearchParams, CatalogSearchStrategy } from '../../../interfaces'
5
- import { CatalogHelpersService, CatalogRepositoryService } from '../services'
6
-
7
- import {
8
- FindAndSortByMostRelevantParams,
9
- SearchDefaultParams,
10
- SearchWithMostRelevantParams,
11
- } from './types/strategy-params.type'
12
-
13
- @Injectable()
14
- export class CategorySearchStrategy implements CatalogSearchStrategy {
15
- constructor(
16
- private readonly repositoryService: CatalogRepositoryService,
17
- private readonly helpersService: CatalogHelpersService,
18
- ) {}
19
-
20
- async search(
21
- params: CatalogSearchParams,
22
- shop: Shops,
23
- optionsCache?: { cache?: RepositoryCacheOptions },
24
- ): Promise<RepositoryFindResult<Product>> {
25
- const { category, filters, limits, sort, mainGender } = params
26
-
27
- if (!category) {
28
- throw new Error('Category is required for CategorySearchStrategy')
29
- }
30
-
31
- const fields = this.helpersService.getFieldsHelper().getStandardFields()
32
-
33
- if (sort === 'most-relevant') {
34
- return this.searchWithMostRelevant({
35
- category,
36
- filters,
37
- limits,
38
- shop,
39
- mainGender,
40
- optionsCache,
41
- fields,
42
- })
43
- }
44
-
45
- return this.searchDefault({
46
- category,
47
- filters,
48
- limits,
49
- shop,
50
- mainGender,
51
- sort,
52
- optionsCache,
53
- fields,
54
- })
55
- }
56
-
57
- private async searchWithMostRelevant(params: SearchWithMostRelevantParams) {
58
- const { category, filters, shop, optionsCache } = params
59
- const mostRelevant = category.isWishlist ? [] : category.getMostRelevantByShop(shop)
60
- const productsIds = await this.getProductIds(category, filters, optionsCache)
61
-
62
- return this.findAndSortByMostRelevant({
63
- mostRelevants: mostRelevant,
64
- productIds: productsIds,
65
- filters: params.filters,
66
- limits: params.limits,
67
- shop: params.shop,
68
- mainGender: params.mainGender,
69
- optionsCache: params.optionsCache,
70
- fields: params.fields,
71
- })
72
- }
73
-
74
- private async searchDefault(params: SearchDefaultParams) {
75
- const { category, filters, limits, sort, optionsCache, fields } = params
76
- const productCatalog = this.repositoryService.getProductCatalog()
77
- const filterHelper = this.helpersService.getFilterHelper()
78
- const sortHelper = this.helpersService.getSortHelper()
79
-
80
- const repoParams = {
81
- fields,
82
- filters: {
83
- ...(await productCatalog.categoryStructureAdapter.buildProductFilterByCategory(category)),
84
- ...filterHelper.buildFilterQuery(filters || {}),
85
- },
86
- ...(sort ? { orderBy: sortHelper.buildSortQuery(sort) } : {}),
87
- limits,
88
- options: {
89
- minimal: ['price'],
90
- maximum: ['price'],
91
- distinct: ['brand'],
92
- },
93
- }
94
-
95
- return productCatalog.productCatalogRepository.findCatalog(repoParams, null, optionsCache)
96
- }
97
-
98
- private async getProductIds(category: any, filters: any, optionsCache: any): Promise<string[]> {
99
- const productCatalog = this.repositoryService.getProductCatalog()
100
- const filterHelper = this.helpersService.getFilterHelper()
101
-
102
- return productCatalog.productCatalogRepository
103
- .findCatalog(
104
- {
105
- fields: ['id'],
106
- filters: {
107
- ...(await productCatalog.categoryStructureAdapter.buildProductFilterByCategory(category)),
108
- ...filterHelper.buildFilterQuery(filters || {}),
109
- },
110
- },
111
- undefined,
112
- optionsCache,
113
- )
114
- .then((products) => products.data.map((product) => product.id))
115
- }
116
-
117
- private async findAndSortByMostRelevant(
118
- params: FindAndSortByMostRelevantParams,
119
- ): Promise<RepositoryFindResult<Product>> {
120
- const { mostRelevants, productIds, filters, shop, mainGender, optionsCache, fields, limits } = params
121
- const productCatalog = this.repositoryService.getProductCatalog()
122
- const filterHelper = this.helpersService.getFilterHelper()
123
- const sortHelper = this.helpersService.getSortHelper()
124
-
125
- const mostRelevantProductsIds = [...new Set(mostRelevants.concat(productIds))]
126
- const totalResult = await productCatalog.productCatalogRepository.findCatalog(
127
- {
128
- fields,
129
- filters: {
130
- id: { operator: Where.IN, value: mostRelevantProductsIds },
131
- ...filterHelper.buildFilterQuery(filters || {}),
132
- },
133
- orderBy: sortHelper.buildSortQuery('best-sellers'),
134
- options: {
135
- minimal: ['price'],
136
- maximum: ['price'],
137
- ...(isEmpty(filters?.brands) ? { distinct: ['brand'] } : {}),
138
- },
139
- },
140
- mainGender || (shop === Shops.MENSMARKET ? 'male' : 'female'),
141
- optionsCache,
142
- )
143
-
144
- return this.sortProductsByRelevance(totalResult, mostRelevants, limits)
145
- }
146
-
147
- private sortProductsByRelevance(totalResult: any, mostRelevants: string[], limits: any) {
148
- const mostRelevantWithoutStock = totalResult.data.filter(
149
- (product: any) => mostRelevants.includes(product.id) && product.stock.quantity <= 0,
150
- )
151
- const firstProducts = totalResult.data
152
- .filter((product: any) => mostRelevants.includes(product.id) && product.stock.quantity > 0)
153
- .sort((a: any, b: any) => mostRelevants.indexOf(a.id) - mostRelevants.indexOf(b.id))
154
- const lastProducts = totalResult.data
155
- .filter((product: any) => !mostRelevants.includes(product.id))
156
- .concat(mostRelevantWithoutStock)
157
- const categoryMostRelevants = firstProducts.concat(lastProducts)
158
- const resultFinal = categoryMostRelevants.slice(limits.offset, limits.offset + limits.limit)
159
-
160
- return {
161
- data: resultFinal,
162
- count: totalResult.count,
163
- maximum: totalResult.maximum,
164
- minimal: totalResult.minimal,
165
- distinct: totalResult.distinct,
166
- }
167
- }
168
- }