@infrab4a/connect-angular 6.0.0-alpha.0 → 6.0.0-alpha.1

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 (289) 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 +289 -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 +541 -0
  21. package/esm2020/angular-hasura-graphql.module.mjs +333 -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 +73 -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 +39 -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 +57 -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 +39 -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 +255 -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 +106 -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 +119 -0
  101. package/esm2020/services/index.mjs +10 -0
  102. package/esm2020/services/order.service.mjs +30 -0
  103. package/esm2020/services/shared/configuration.facade.mjs +29 -0
  104. package/esm2020/services/shared/index.mjs +2 -0
  105. package/esm2020/services/types/index.mjs +3 -0
  106. package/esm2020/services/types/required-checkout-data.type.mjs +2 -0
  107. package/esm2020/services/types/required-checkout-subscription-data.type.mjs +2 -0
  108. package/esm2020/types/firebase-app-config.type.mjs +2 -0
  109. package/esm2020/types/index.mjs +2 -0
  110. package/fesm2015/infrab4a-connect-angular.mjs +3372 -0
  111. package/fesm2015/infrab4a-connect-angular.mjs.map +1 -0
  112. package/fesm2020/infrab4a-connect-angular.mjs +3277 -0
  113. package/fesm2020/infrab4a-connect-angular.mjs.map +1 -0
  114. package/helpers/index.d.ts +1 -0
  115. package/helpers/mobile-operation-system-checker.helper.d.ts +3 -0
  116. package/index.d.ts +6 -0
  117. package/interfaces/catalog-strategies.interface.d.ts +31 -0
  118. package/interfaces/category-facades.interface.d.ts +6 -0
  119. package/interfaces/index.d.ts +2 -0
  120. package/package.json +24 -4
  121. package/persistence/cookie-data-persistence.d.ts +10 -0
  122. package/persistence/data-persistence.d.ts +6 -0
  123. package/persistence/index.d.ts +2 -0
  124. package/services/auth.service.d.ts +18 -0
  125. package/services/cart/cart-services.facade.d.ts +12 -0
  126. package/services/cart/index.d.ts +1 -0
  127. package/services/cart.service.d.ts +26 -0
  128. package/services/catalog/adapters/category-structure.adapter.d.ts +4 -0
  129. package/services/catalog/adapters/index.d.ts +3 -0
  130. package/services/catalog/adapters/new-category-structure.adapter.d.ts +12 -0
  131. package/services/catalog/adapters/old-category-structure.adapter.d.ts +10 -0
  132. package/services/catalog/catalog.service.d.ts +24 -0
  133. package/services/catalog/category.service.d.ts +22 -0
  134. package/services/catalog/context/catalog-search.context.d.ts +14 -0
  135. package/services/catalog/enums/index.d.ts +1 -0
  136. package/services/catalog/enums/product-sorts.enum.d.ts +9 -0
  137. package/services/catalog/facades/catalog-service.facade.d.ts +15 -0
  138. package/services/catalog/facades/catalog-strategies.facade.d.ts +10 -0
  139. package/services/catalog/facades/category-repository.facade.d.ts +9 -0
  140. package/services/catalog/facades/category-service.facade.d.ts +15 -0
  141. package/{src/services/catalog/facades/index.ts → services/catalog/facades/index.d.ts} +5 -5
  142. package/services/catalog/facades/product-catalog.facade.d.ts +10 -0
  143. package/services/catalog/helpers/brand-manager.helper.d.ts +14 -0
  144. package/services/catalog/helpers/catalog-filter.helper.d.ts +8 -0
  145. package/services/catalog/helpers/catalog-sort.helper.d.ts +7 -0
  146. package/services/catalog/helpers/index.d.ts +4 -0
  147. package/services/catalog/helpers/product-fields.helper.d.ts +7 -0
  148. package/services/catalog/index.d.ts +7 -0
  149. package/services/catalog/models/category-with-tree.model.d.ts +4 -0
  150. package/services/catalog/models/index.d.ts +1 -0
  151. package/services/catalog/services/catalog-helpers.service.d.ts +17 -0
  152. package/services/catalog/services/catalog-operations.facade.d.ts +13 -0
  153. package/services/catalog/services/catalog-repository.service.d.ts +12 -0
  154. package/{src/services/catalog/services/index.ts → services/catalog/services/index.d.ts} +4 -4
  155. package/services/catalog/services/product-management.facade.d.ts +12 -0
  156. package/services/catalog/strategies/category-search.strategy.d.ts +19 -0
  157. package/services/catalog/strategies/index.d.ts +3 -0
  158. package/services/catalog/strategies/profile-search.strategy.d.ts +14 -0
  159. package/services/catalog/strategies/term-search.strategy.d.ts +20 -0
  160. package/services/catalog/strategies/types/strategy-params.type.d.ts +58 -0
  161. package/services/catalog/types/fetch-products-options.type.d.ts +8 -0
  162. package/services/catalog/types/fetch-products-params.type.d.ts +25 -0
  163. package/services/catalog/types/fetch-products-response.type.d.ts +19 -0
  164. package/services/catalog/types/index.d.ts +5 -0
  165. package/services/catalog/types/method-params.type.d.ts +17 -0
  166. package/services/catalog/types/product-sort.type.d.ts +2 -0
  167. package/services/catalog/wishlist.service.d.ts +58 -0
  168. package/services/checkout/checkout-dependencies.facade.d.ts +10 -0
  169. package/services/checkout/checkout-repositories.facade.d.ts +9 -0
  170. package/{src/services/checkout/index.ts → services/checkout/index.d.ts} +2 -2
  171. package/services/checkout-subscription.service.d.ts +19 -0
  172. package/services/checkout.service.d.ts +30 -0
  173. package/services/coupon/coupon-repositories.facade.d.ts +10 -0
  174. package/{src/services/coupon/index.ts → services/coupon/index.d.ts} +1 -1
  175. package/services/coupon/types/coupon-params.type.d.ts +13 -0
  176. package/services/coupon.service.d.ts +36 -0
  177. package/services/helpers/index.d.ts +1 -0
  178. package/services/helpers/util.helper.d.ts +3 -0
  179. package/services/home-shop/home-shop-repositories.facade.d.ts +10 -0
  180. package/{src/services/home-shop/index.ts → services/home-shop/index.d.ts} +1 -1
  181. package/services/home-shop.service.d.ts +26 -0
  182. package/services/index.d.ts +9 -0
  183. package/services/order.service.d.ts +13 -0
  184. package/services/shared/configuration.facade.d.ts +12 -0
  185. package/services/shared/index.d.ts +1 -0
  186. package/services/types/index.d.ts +2 -0
  187. package/services/types/required-checkout-data.type.d.ts +2 -0
  188. package/services/types/required-checkout-subscription-data.type.d.ts +2 -0
  189. package/types/firebase-app-config.type.d.ts +1 -0
  190. package/types/index.d.ts +1 -0
  191. package/eslint.config.js +0 -18
  192. package/index.ts +0 -1
  193. package/karma.conf.js +0 -32
  194. package/ng-package.json +0 -8
  195. package/project.json +0 -37
  196. package/src/angular-connect.module.ts +0 -256
  197. package/src/angular-elastic-search.module.ts +0 -23
  198. package/src/angular-firebase-auth.module.ts +0 -101
  199. package/src/angular-firestore.module.ts +0 -371
  200. package/src/angular-hasura-graphql.module.ts +0 -219
  201. package/src/angular-vertex-search.module.ts +0 -23
  202. package/src/consts/backend-url.const.ts +0 -1
  203. package/src/consts/category-structure.ts +0 -1
  204. package/src/consts/default-shop.const.ts +0 -1
  205. package/src/consts/es-config.const.ts +0 -1
  206. package/src/consts/firebase-const.ts +0 -5
  207. package/src/consts/hasura-options.const.ts +0 -1
  208. package/src/consts/index.ts +0 -8
  209. package/src/consts/persistence.const.ts +0 -1
  210. package/src/consts/storage-base-url.const.ts +0 -1
  211. package/src/consts/vertex-config.const.ts +0 -1
  212. package/src/helpers/index.ts +0 -1
  213. package/src/helpers/mobile-operation-system-checker.helper.ts +0 -10
  214. package/src/index.ts +0 -6
  215. package/src/interfaces/catalog-strategies.interface.ts +0 -36
  216. package/src/interfaces/category-facades.interface.ts +0 -7
  217. package/src/interfaces/index.ts +0 -2
  218. package/src/persistence/cookie-data-persistence.ts +0 -21
  219. package/src/persistence/data-persistence.ts +0 -7
  220. package/src/persistence/index.ts +0 -2
  221. package/src/services/auth.service.ts +0 -39
  222. package/src/services/cart/cart-services.facade.ts +0 -14
  223. package/src/services/cart/index.ts +0 -1
  224. package/src/services/cart.service.ts +0 -124
  225. package/src/services/catalog/adapters/category-structure.adapter.ts +0 -5
  226. package/src/services/catalog/adapters/index.ts +0 -3
  227. package/src/services/catalog/adapters/new-category-structure.adapter.ts +0 -42
  228. package/src/services/catalog/adapters/old-category-structure.adapter.ts +0 -17
  229. package/src/services/catalog/catalog.service.ts +0 -153
  230. package/src/services/catalog/category.service.ts +0 -52
  231. package/src/services/catalog/context/catalog-search.context.ts +0 -61
  232. package/src/services/catalog/enums/index.ts +0 -1
  233. package/src/services/catalog/enums/product-sorts.enum.ts +0 -9
  234. package/src/services/catalog/facades/catalog-service.facade.ts +0 -32
  235. package/src/services/catalog/facades/catalog-strategies.facade.ts +0 -12
  236. package/src/services/catalog/facades/category-repository.facade.ts +0 -10
  237. package/src/services/catalog/facades/category-service.facade.ts +0 -25
  238. package/src/services/catalog/facades/product-catalog.facade.ts +0 -13
  239. package/src/services/catalog/helpers/brand-manager.helper.ts +0 -63
  240. package/src/services/catalog/helpers/catalog-filter.helper.ts +0 -50
  241. package/src/services/catalog/helpers/catalog-sort.helper.ts +0 -54
  242. package/src/services/catalog/helpers/index.ts +0 -4
  243. package/src/services/catalog/helpers/product-fields.helper.ts +0 -35
  244. package/src/services/catalog/index.ts +0 -7
  245. package/src/services/catalog/models/category-with-tree.model.ts +0 -7
  246. package/src/services/catalog/models/index.ts +0 -1
  247. package/src/services/catalog/services/catalog-helpers.service.ts +0 -35
  248. package/src/services/catalog/services/catalog-operations.facade.ts +0 -24
  249. package/src/services/catalog/services/catalog-repository.service.ts +0 -20
  250. package/src/services/catalog/services/product-management.facade.ts +0 -20
  251. package/src/services/catalog/strategies/category-search.strategy.ts +0 -172
  252. package/src/services/catalog/strategies/index.ts +0 -3
  253. package/src/services/catalog/strategies/profile-search.strategy.ts +0 -51
  254. package/src/services/catalog/strategies/term-search.strategy.ts +0 -178
  255. package/src/services/catalog/strategies/types/strategy-params.type.ts +0 -58
  256. package/src/services/catalog/types/fetch-products-options.type.ts +0 -10
  257. package/src/services/catalog/types/fetch-products-params.type.ts +0 -27
  258. package/src/services/catalog/types/fetch-products-response.type.ts +0 -11
  259. package/src/services/catalog/types/index.ts +0 -5
  260. package/src/services/catalog/types/method-params.type.ts +0 -21
  261. package/src/services/catalog/types/product-sort.type.ts +0 -3
  262. package/src/services/catalog/wishlist.service.ts +0 -368
  263. package/src/services/checkout/checkout-dependencies.facade.ts +0 -13
  264. package/src/services/checkout/checkout-repositories.facade.ts +0 -10
  265. package/src/services/checkout-subscription.service.ts +0 -76
  266. package/src/services/checkout.service.ts +0 -196
  267. package/src/services/coupon/coupon-repositories.facade.ts +0 -11
  268. package/src/services/coupon/types/coupon-params.type.ts +0 -15
  269. package/src/services/coupon.service.ts +0 -347
  270. package/src/services/errors/group-invalid-coupon.error.ts +0 -9
  271. package/src/services/errors/index.ts +0 -2
  272. package/src/services/errors/invalid-coupon.error.ts +0 -7
  273. package/src/services/helpers/index.ts +0 -1
  274. package/src/services/helpers/util.helper.ts +0 -17
  275. package/src/services/home-shop/home-shop-repositories.facade.ts +0 -11
  276. package/src/services/home-shop.service.ts +0 -196
  277. package/src/services/index.ts +0 -9
  278. package/src/services/order.service.ts +0 -23
  279. package/src/services/shared/configuration.facade.ts +0 -21
  280. package/src/services/shared/index.ts +0 -1
  281. package/src/services/types/index.ts +0 -2
  282. package/src/services/types/required-checkout-data.type.ts +0 -3
  283. package/src/services/types/required-checkout-subscription-data.type.ts +0 -3
  284. package/src/types/firebase-app-config.type.ts +0 -1
  285. package/src/types/index.ts +0 -1
  286. package/tsconfig.json +0 -17
  287. package/tsconfig.lib.json +0 -13
  288. package/tsconfig.lib.prod.json +0 -13
  289. package/tsconfig.spec.json +0 -17
@@ -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 { ProductRepository } 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('ProductRepository') public readonly productRepository: ProductRepository,
11
- @Inject(CATEGORY_STRUCTURE) public readonly categoryStructureAdapter: CategoryStructureAdapter,
12
- ) {}
13
- }
@@ -1,63 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { Where, isEmpty } 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
-
23
- this.brandsList[indexKey] = this.brandsList[indexKey].filter(Boolean)
24
-
25
- if (options.filters) {
26
- options.filters = {
27
- ...options.filters,
28
- brands: filterBrands,
29
- }
30
- }
31
- }
32
-
33
- getBrandsList(indexKey: string): string[] {
34
- return this.brandsList[indexKey]
35
- }
36
-
37
- buildIndexBrands(options: CatalogSearchParams): string {
38
- if (options.category) return `category-${options.category.id}`
39
-
40
- if (options.term) return `term-${options.term}`
41
-
42
- if (options.profile) return `profile-${options.profile.join(',')}`
43
-
44
- return ''
45
- }
46
-
47
- private async fetchBrandsOnly(options: CatalogSearchParams): Promise<string[]> {
48
- return this.productCatalog.productRepository
49
- .findCatalog(
50
- {
51
- fields: ['id'],
52
- filters: {
53
- published: { operator: Where.EQUALS, value: true },
54
- },
55
- options: {
56
- distinct: ['brand'],
57
- },
58
- },
59
- options.mainGender,
60
- )
61
- .then((result) => result.distinct.brand)
62
- }
63
- }
@@ -1,50 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { Product, RepositoryFindFielters, Where, set } 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.tags = { 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,35 +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
- 'miniatures',
13
- 'price',
14
- 'stock',
15
- 'published',
16
- 'CEST',
17
- 'EAN',
18
- 'NCM',
19
- 'brand',
20
- 'costPrice',
21
- 'hasVariants',
22
- 'isKit',
23
- 'sku',
24
- 'rate',
25
- 'tags',
26
- 'type',
27
- 'shoppingCount',
28
- 'gender',
29
- 'createdAt',
30
- 'label',
31
- 'outlet',
32
- 'group',
33
- ]
34
- }
35
- }
@@ -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 { 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
- 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 { 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
- 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,172 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { Product, RepositoryCacheOptions, RepositoryFindResult, Shops, Where, isEmpty } 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, shop, mainGender, 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.productRepository.findCatalog(
96
- repoParams,
97
- mainGender || (shop === Shops.MENSMARKET ? 'male' : 'female'),
98
- optionsCache,
99
- )
100
- }
101
-
102
- private async getProductIds(category: any, filters: any, optionsCache: any): Promise<string[]> {
103
- const productCatalog = this.repositoryService.getProductCatalog()
104
- const filterHelper = this.helpersService.getFilterHelper()
105
-
106
- return productCatalog.productRepository
107
- .findCatalog(
108
- {
109
- fields: ['id'],
110
- filters: {
111
- ...(await productCatalog.categoryStructureAdapter.buildProductFilterByCategory(category)),
112
- ...filterHelper.buildFilterQuery(filters || {}),
113
- },
114
- },
115
- undefined,
116
- optionsCache,
117
- )
118
- .then((products) => products.data.map((product) => product.id))
119
- }
120
-
121
- private async findAndSortByMostRelevant(
122
- params: FindAndSortByMostRelevantParams,
123
- ): Promise<RepositoryFindResult<Product>> {
124
- const { mostRelevants, productIds, filters, shop, mainGender, optionsCache, fields, limits } = params
125
- const productCatalog = this.repositoryService.getProductCatalog()
126
- const filterHelper = this.helpersService.getFilterHelper()
127
- const sortHelper = this.helpersService.getSortHelper()
128
-
129
- const mostRelevantProductsIds = [...new Set(mostRelevants.concat(productIds))]
130
- const totalResult = await productCatalog.productRepository.findCatalog(
131
- {
132
- fields,
133
- filters: {
134
- id: { operator: Where.IN, value: mostRelevantProductsIds },
135
- ...filterHelper.buildFilterQuery(filters || {}),
136
- },
137
- orderBy: sortHelper.buildSortQuery('best-sellers'),
138
- options: {
139
- minimal: ['price'],
140
- maximum: ['price'],
141
- ...(isEmpty(filters?.brands) ? { distinct: ['brand'] } : {}),
142
- },
143
- },
144
- mainGender || (shop === Shops.MENSMARKET ? 'male' : 'female'),
145
- optionsCache,
146
- )
147
-
148
- return this.sortProductsByRelevance(totalResult, mostRelevants, limits)
149
- }
150
-
151
- private sortProductsByRelevance(totalResult: any, mostRelevants: string[], limits: any) {
152
- const mostRelevantWithoutStock = totalResult.data.filter(
153
- (product: any) => mostRelevants.includes(product.id) && product.stock.quantity <= 0,
154
- )
155
- const firstProducts = totalResult.data
156
- .filter((product: any) => mostRelevants.includes(product.id) && product.stock.quantity > 0)
157
- .sort((a: any, b: any) => mostRelevants.indexOf(a.id) - mostRelevants.indexOf(b.id))
158
- const lastProducts = totalResult.data
159
- .filter((product: any) => !mostRelevants.includes(product.id))
160
- .concat(mostRelevantWithoutStock)
161
- const categoryMostRelevants = firstProducts.concat(lastProducts)
162
- const resultFinal = categoryMostRelevants.slice(limits.offset, limits.offset + limits.limit)
163
-
164
- return {
165
- data: resultFinal,
166
- count: totalResult.count,
167
- maximum: totalResult.maximum,
168
- minimal: totalResult.minimal,
169
- distinct: totalResult.distinct,
170
- }
171
- }
172
- }
@@ -1,3 +0,0 @@
1
- export * from './category-search.strategy'
2
- export * from './profile-search.strategy'
3
- export * from './term-search.strategy'
@@ -1,51 +0,0 @@
1
- import { Injectable } from '@angular/core'
2
- import { Product, RepositoryCacheOptions, RepositoryFindResult, Shops, Where } from '@infrab4a/connect'
3
-
4
- import { CatalogSearchParams, CatalogSearchStrategy } from '../../../interfaces'
5
- import { CatalogHelpersService, CatalogRepositoryService } from '../services'
6
-
7
- @Injectable()
8
- export class ProfileSearchStrategy implements CatalogSearchStrategy {
9
- constructor(
10
- private readonly repositoryService: CatalogRepositoryService,
11
- private readonly helpersService: CatalogHelpersService,
12
- ) {}
13
-
14
- async search(
15
- params: CatalogSearchParams,
16
- shop: Shops,
17
- optionsCache?: { cache?: RepositoryCacheOptions },
18
- ): Promise<RepositoryFindResult<Product>> {
19
- const { profile, filters, limits, sort, mainGender } = params
20
-
21
- if (!profile) {
22
- throw new Error('Profile is required for ProfileSearchStrategy')
23
- }
24
-
25
- const productCatalog = this.repositoryService.getProductCatalog()
26
- const filterHelper = this.helpersService.getFilterHelper()
27
- const sortHelper = this.helpersService.getSortHelper()
28
- const fieldsHelper = this.helpersService.getFieldsHelper()
29
-
30
- const repoParams = {
31
- fields: fieldsHelper.getStandardFields(),
32
- filters: {
33
- tags: { operator: Where.LIKE, value: profile },
34
- ...filterHelper.buildFilterQuery(filters || {}),
35
- },
36
- ...(sort ? { orderBy: sortHelper.buildSortQuery(sort) } : {}),
37
- limits,
38
- options: {
39
- minimal: ['price'],
40
- maximum: ['price'],
41
- distinct: ['brand'],
42
- },
43
- }
44
-
45
- return productCatalog.productRepository.findCatalog(
46
- repoParams,
47
- mainGender || (shop === Shops.MENSMARKET ? 'male' : 'female'),
48
- optionsCache,
49
- )
50
- }
51
- }