@infrab4a/connect-angular 4.0.0-beta.29 → 4.0.0-beta.30

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.
@@ -1,5 +1,10 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import { Where } from '@infrab4a/connect';
3
+ import * as i0 from "@angular/core";
1
4
  export class CatalogService {
2
- constructor() {
5
+ constructor(productRepository, categoryRepository) {
6
+ this.productRepository = productRepository;
7
+ this.categoryRepository = categoryRepository;
3
8
  this.buildFilterQuery = (category, filters) => { };
4
9
  this.buildSortQuery = (sort) => {
5
10
  const query = {
@@ -16,11 +21,31 @@ export class CatalogService {
16
21
  };
17
22
  };
18
23
  }
19
- fetchProducts(category, options) {
20
- return {
21
- products: [],
22
- pages: 1,
23
- };
24
+ async fetchProducts(category, options) {
25
+ const productsIds = category.products.length
26
+ ? category.products
27
+ : await this.categoryRepository.get({ id: category.id }).then((categoryFound) => categoryFound.products);
28
+ const limits = this.buildLimitQuery(options);
29
+ return await this.productRepository
30
+ .find({
31
+ filters: {
32
+ id: { operator: Where.IN, value: productsIds },
33
+ published: true,
34
+ },
35
+ limits,
36
+ })
37
+ .then(({ data, count: total }) => ({ products: data, pages: Math.ceil(total / limits.limit), total }));
24
38
  }
25
39
  }
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2NhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFHQSxNQUFNLE9BQU8sY0FBYztJQUEzQjtRQVdVLHFCQUFnQixHQUFHLENBQUMsUUFBa0IsRUFBRSxPQUFpQixFQUFPLEVBQUUsR0FBRSxDQUFDLENBQUE7UUFFckUsbUJBQWMsR0FBRyxDQUFDLElBQWlCLEVBQThCLEVBQUU7WUFDekUsTUFBTSxLQUFLLEdBQStCO2dCQUN4QyxLQUFLLEVBQUUsTUFBTTtnQkFDYixNQUFNLEVBQUUsS0FBSzthQUNkLENBQUE7WUFFRCxPQUFPLEtBQUssQ0FBQTtRQUNkLENBQUMsQ0FBQTtRQUVPLG9CQUFlLEdBQUcsQ0FBQyxPQUE0QyxFQUF1QyxFQUFFO1lBQzlHLE1BQU0sS0FBSyxHQUFHLE9BQU8sRUFBRSxPQUFPLElBQUksRUFBRSxDQUFBO1lBRXBDLE9BQU87Z0JBQ0wsS0FBSztnQkFDTCxNQUFNLEVBQUUsQ0FBQyxDQUFDLE9BQU8sRUFBRSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSzthQUMzQyxDQUFBO1FBQ0gsQ0FBQyxDQUFBO0lBQ0gsQ0FBQztJQTdCQyxhQUFhLENBQ1gsUUFBa0IsRUFDbEIsT0FBbUY7UUFFbkYsT0FBTztZQUNMLFFBQVEsRUFBRSxFQUFFO1lBQ1osS0FBSyxFQUFFLENBQUM7U0FDVCxDQUFBO0lBQ0gsQ0FBQztDQXFCRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENhdGVnb3J5LCBQcm9kdWN0LCBSZXBvc2l0b3J5T3JkZXJCeSB9IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0L3NyYydcbmltcG9ydCB7IFByb2R1Y3RTb3J0IH0gZnJvbSAnLi90eXBlcy9wcm9kdWN0LXNvcnQudHlwZSdcblxuZXhwb3J0IGNsYXNzIENhdGFsb2dTZXJ2aWNlIHtcbiAgZmV0Y2hQcm9kdWN0cyhcbiAgICBjYXRlZ29yeTogQ2F0ZWdvcnksXG4gICAgb3B0aW9uczogeyBwYWdlPzogbnVtYmVyOyBwZXJQYWdlPzogbnVtYmVyOyBmaWx0ZXJzOiBzdHJpbmdbXTsgc29ydD86IFByb2R1Y3RTb3J0IH0sXG4gICk6IHsgcHJvZHVjdHM6IFByb2R1Y3RbXTsgcGFnZXM6IG51bWJlciB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgcHJvZHVjdHM6IFtdLFxuICAgICAgcGFnZXM6IDEsXG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlclF1ZXJ5ID0gKGNhdGVnb3J5OiBDYXRlZ29yeSwgZmlsdGVyczogc3RyaW5nW10pOiBhbnkgPT4ge31cblxuICBwcml2YXRlIGJ1aWxkU29ydFF1ZXJ5ID0gKHNvcnQ6IFByb2R1Y3RTb3J0KTogUmVwb3NpdG9yeU9yZGVyQnk8UHJvZHVjdD4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBSZXBvc2l0b3J5T3JkZXJCeTxQcm9kdWN0PiA9IHtcbiAgICAgIHN0b2NrOiAnZGVzYycsXG4gICAgICBnZW5kZXI6ICdhc2MnLFxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExpbWl0UXVlcnkgPSAob3B0aW9uczogeyBwYWdlPzogbnVtYmVyOyBwZXJQYWdlPzogbnVtYmVyIH0pOiB7IGxpbWl0PzogbnVtYmVyOyBvZmZzZXQ/OiBudW1iZXIgfSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zPy5wZXJQYWdlIHx8IDIwXG5cbiAgICByZXR1cm4ge1xuICAgICAgbGltaXQsXG4gICAgICBvZmZzZXQ6ICgob3B0aW9ucz8ucGFnZSB8fCAxKSAtIDEpICogbGltaXQsXG4gICAgfVxuICB9XG59XG4iXX0=
40
+ CatalogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, deps: [{ token: 'ProductRepository' }, { token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
41
+ CatalogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService });
42
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, decorators: [{
43
+ type: Injectable
44
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
45
+ type: Inject,
46
+ args: ['ProductRepository']
47
+ }] }, { type: undefined, decorators: [{
48
+ type: Inject,
49
+ args: ['CategoryRepository']
50
+ }] }]; } });
51
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0YWxvZy5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC1hbmd1bGFyL3NyYy9zZXJ2aWNlcy9jYXRhbG9nL2NhdGFsb2cuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQStFLEtBQUssRUFBRSxNQUFNLG1CQUFtQixDQUFBOztBQUl0SCxNQUFNLE9BQU8sY0FBYztJQUN6QixZQUNnRCxpQkFBb0MsRUFDbkMsa0JBQXNDO1FBRHZDLHNCQUFpQixHQUFqQixpQkFBaUIsQ0FBbUI7UUFDbkMsdUJBQWtCLEdBQWxCLGtCQUFrQixDQUFvQjtRQXVCL0UscUJBQWdCLEdBQUcsQ0FBQyxRQUFrQixFQUFFLE9BQWlCLEVBQU8sRUFBRSxHQUFFLENBQUMsQ0FBQTtRQUVyRSxtQkFBYyxHQUFHLENBQUMsSUFBaUIsRUFBOEIsRUFBRTtZQUN6RSxNQUFNLEtBQUssR0FBK0I7Z0JBQ3hDLEtBQUssRUFBRSxNQUFNO2dCQUNiLE1BQU0sRUFBRSxLQUFLO2FBQ2QsQ0FBQTtZQUVELE9BQU8sS0FBSyxDQUFBO1FBQ2QsQ0FBQyxDQUFBO1FBRU8sb0JBQWUsR0FBRyxDQUFDLE9BQTRDLEVBQXVDLEVBQUU7WUFDOUcsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLE9BQU8sSUFBSSxFQUFFLENBQUE7WUFFcEMsT0FBTztnQkFDTCxLQUFLO2dCQUNMLE1BQU0sRUFBRSxDQUFDLENBQUMsT0FBTyxFQUFFLElBQUksSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxLQUFLO2FBQzNDLENBQUE7UUFDSCxDQUFDLENBQUE7SUF4Q0UsQ0FBQztJQUVKLEtBQUssQ0FBQyxhQUFhLENBQ2pCLFFBQWtCLEVBQ2xCLE9BQXFGO1FBRXJGLE1BQU0sV0FBVyxHQUFHLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTTtZQUMxQyxDQUFDLENBQUMsUUFBUSxDQUFDLFFBQVE7WUFDbkIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLGtCQUFrQixDQUFDLEdBQUcsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxhQUFhLEVBQUUsRUFBRSxDQUFDLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQTtRQUMxRyxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBRTVDLE9BQU8sTUFBTSxJQUFJLENBQUMsaUJBQWlCO2FBQ2hDLElBQUksQ0FBQztZQUNKLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLEVBQUUsRUFBRSxLQUFLLEVBQUUsV0FBVyxFQUFFO2dCQUM5QyxTQUFTLEVBQUUsSUFBSTthQUNoQjtZQUNELE1BQU07U0FDUCxDQUFDO2FBQ0QsSUFBSSxDQUFDLENBQUMsRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLEtBQUssRUFBRSxDQUFDLENBQUMsQ0FBQTtJQUMxRyxDQUFDOzsyR0F4QlUsY0FBYyxrQkFFZixtQkFBbUIsYUFDbkIsb0JBQW9COytHQUhuQixjQUFjOzJGQUFkLGNBQWM7a0JBRDFCLFVBQVU7OzBCQUdOLE1BQU07MkJBQUMsbUJBQW1COzswQkFDMUIsTUFBTTsyQkFBQyxvQkFBb0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHsgQ2F0ZWdvcnksIENhdGVnb3J5UmVwb3NpdG9yeSwgUHJvZHVjdCwgUHJvZHVjdFJlcG9zaXRvcnksIFJlcG9zaXRvcnlPcmRlckJ5LCBXaGVyZSB9IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgUHJvZHVjdFNvcnQgfSBmcm9tICcuL3R5cGVzL3Byb2R1Y3Qtc29ydC50eXBlJ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2F0YWxvZ1NlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdQcm9kdWN0UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgcHJvZHVjdFJlcG9zaXRvcnk6IFByb2R1Y3RSZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoJ0NhdGVnb3J5UmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY2F0ZWdvcnlSZXBvc2l0b3J5OiBDYXRlZ29yeVJlcG9zaXRvcnksXG4gICkge31cblxuICBhc3luYyBmZXRjaFByb2R1Y3RzKFxuICAgIGNhdGVnb3J5OiBDYXRlZ29yeSxcbiAgICBvcHRpb25zPzogeyBwYWdlPzogbnVtYmVyOyBwZXJQYWdlPzogbnVtYmVyOyBmaWx0ZXJzPzogc3RyaW5nW107IHNvcnQ/OiBQcm9kdWN0U29ydCB9LFxuICApOiBQcm9taXNlPHsgcHJvZHVjdHM6IFByb2R1Y3RbXTsgcGFnZXM6IG51bWJlcjsgdG90YWw6IG51bWJlciB9PiB7XG4gICAgY29uc3QgcHJvZHVjdHNJZHMgPSBjYXRlZ29yeS5wcm9kdWN0cy5sZW5ndGhcbiAgICAgID8gY2F0ZWdvcnkucHJvZHVjdHNcbiAgICAgIDogYXdhaXQgdGhpcy5jYXRlZ29yeVJlcG9zaXRvcnkuZ2V0KHsgaWQ6IGNhdGVnb3J5LmlkIH0pLnRoZW4oKGNhdGVnb3J5Rm91bmQpID0+IGNhdGVnb3J5Rm91bmQucHJvZHVjdHMpXG4gICAgY29uc3QgbGltaXRzID0gdGhpcy5idWlsZExpbWl0UXVlcnkob3B0aW9ucylcblxuICAgIHJldHVybiBhd2FpdCB0aGlzLnByb2R1Y3RSZXBvc2l0b3J5XG4gICAgICAuZmluZCh7XG4gICAgICAgIGZpbHRlcnM6IHtcbiAgICAgICAgICBpZDogeyBvcGVyYXRvcjogV2hlcmUuSU4sIHZhbHVlOiBwcm9kdWN0c0lkcyB9LFxuICAgICAgICAgIHB1Ymxpc2hlZDogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgICAgbGltaXRzLFxuICAgICAgfSlcbiAgICAgIC50aGVuKCh7IGRhdGEsIGNvdW50OiB0b3RhbCB9KSA9PiAoeyBwcm9kdWN0czogZGF0YSwgcGFnZXM6IE1hdGguY2VpbCh0b3RhbCAvIGxpbWl0cy5saW1pdCksIHRvdGFsIH0pKVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZEZpbHRlclF1ZXJ5ID0gKGNhdGVnb3J5OiBDYXRlZ29yeSwgZmlsdGVyczogc3RyaW5nW10pOiBhbnkgPT4ge31cblxuICBwcml2YXRlIGJ1aWxkU29ydFF1ZXJ5ID0gKHNvcnQ6IFByb2R1Y3RTb3J0KTogUmVwb3NpdG9yeU9yZGVyQnk8UHJvZHVjdD4gPT4ge1xuICAgIGNvbnN0IHF1ZXJ5OiBSZXBvc2l0b3J5T3JkZXJCeTxQcm9kdWN0PiA9IHtcbiAgICAgIHN0b2NrOiAnZGVzYycsXG4gICAgICBnZW5kZXI6ICdhc2MnLFxuICAgIH1cblxuICAgIHJldHVybiBxdWVyeVxuICB9XG5cbiAgcHJpdmF0ZSBidWlsZExpbWl0UXVlcnkgPSAob3B0aW9uczogeyBwYWdlPzogbnVtYmVyOyBwZXJQYWdlPzogbnVtYmVyIH0pOiB7IGxpbWl0PzogbnVtYmVyOyBvZmZzZXQ/OiBudW1iZXIgfSA9PiB7XG4gICAgY29uc3QgbGltaXQgPSBvcHRpb25zPy5wZXJQYWdlIHx8IDIwXG5cbiAgICByZXR1cm4ge1xuICAgICAgbGltaXQsXG4gICAgICBvZmZzZXQ6ICgob3B0aW9ucz8ucGFnZSB8fCAxKSAtIDEpICogbGltaXQsXG4gICAgfVxuICB9XG59XG4iXX0=
@@ -1,9 +1,29 @@
1
+ import { Inject, Injectable } from '@angular/core';
2
+ import * as i0 from "@angular/core";
1
3
  export class CategoryService {
2
- fetchSubCategories(category) {
3
- return [];
4
+ constructor(categoryFilterRepository) {
5
+ this.categoryFilterRepository = categoryFilterRepository;
4
6
  }
5
- fetchFilterOptions(category, filters) {
7
+ async fetchSubCategories(category) {
6
8
  return [];
7
9
  }
10
+ async fetchFilterOptions(category, filters) {
11
+ const categoryFilters = category.filters && category.filters.length
12
+ ? category.filters
13
+ : await this.categoryFilterRepository
14
+ .find({ filters: { categoryId: +category.id } })
15
+ .then(({ data }) => data.map((categoryFilter) => categoryFilter.filter));
16
+ return filters?.length
17
+ ? categoryFilters.filter((categoryFilter) => !filters || !filters.length || categoryFilter.options.some((option) => filters.includes(option.id)))
18
+ : categoryFilters;
19
+ }
8
20
  }
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvY2F0YWxvZy9jYXRlZ29yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUlBLE1BQU0sT0FBTyxlQUFlO0lBQzFCLGtCQUFrQixDQUFDLFFBQWtCO1FBQ25DLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELGtCQUFrQixDQUFDLFFBQWtCLEVBQUUsT0FBa0I7UUFDdkQsT0FBTyxFQUFFLENBQUE7SUFDWCxDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDYXRlZ29yeSwgRmlsdGVyIH0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5cbmltcG9ydCB7IENhdGVnb3J5V2l0aFRyZWUgfSBmcm9tICcuL21vZGVscydcblxuZXhwb3J0IGNsYXNzIENhdGVnb3J5U2VydmljZSB7XG4gIGZldGNoU3ViQ2F0ZWdvcmllcyhjYXRlZ29yeTogQ2F0ZWdvcnkpOiBDYXRlZ29yeVdpdGhUcmVlW10ge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgZmV0Y2hGaWx0ZXJPcHRpb25zKGNhdGVnb3J5OiBDYXRlZ29yeSwgZmlsdGVycz86IHN0cmluZ1tdKTogRmlsdGVyW10ge1xuICAgIHJldHVybiBbXVxuICB9XG59XG4iXX0=
21
+ CategoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, deps: [{ token: 'CategoryFilterRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
22
+ CategoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService });
23
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, decorators: [{
24
+ type: Injectable
25
+ }], ctorParameters: function () { return [{ type: undefined, decorators: [{
26
+ type: Inject,
27
+ args: ['CategoryFilterRepository']
28
+ }] }]; } });
29
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3QtYW5ndWxhci9zcmMvc2VydmljZXMvY2F0YWxvZy9jYXRlZ29yeS5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOztBQU1sRCxNQUFNLE9BQU8sZUFBZTtJQUMxQixZQUN1RCx3QkFBa0Q7UUFBbEQsNkJBQXdCLEdBQXhCLHdCQUF3QixDQUEwQjtJQUN0RyxDQUFDO0lBRUosS0FBSyxDQUFDLGtCQUFrQixDQUFDLFFBQWtCO1FBQ3pDLE9BQU8sRUFBRSxDQUFBO0lBQ1gsQ0FBQztJQUVELEtBQUssQ0FBQyxrQkFBa0IsQ0FBQyxRQUFrQixFQUFFLE9BQWtCO1FBQzdELE1BQU0sZUFBZSxHQUNuQixRQUFRLENBQUMsT0FBTyxJQUFJLFFBQVEsQ0FBQyxPQUFPLENBQUMsTUFBTTtZQUN6QyxDQUFDLENBQUMsUUFBUSxDQUFDLE9BQU87WUFDbEIsQ0FBQyxDQUFDLE1BQU0sSUFBSSxDQUFDLHdCQUF3QjtpQkFDaEMsSUFBSSxDQUFDLEVBQUUsT0FBTyxFQUFFLEVBQUUsVUFBVSxFQUFFLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUM7aUJBQy9DLElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxjQUFjLEVBQUUsRUFBRSxDQUFDLGNBQWMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFBO1FBRWhGLE9BQU8sT0FBTyxFQUFFLE1BQU07WUFDcEIsQ0FBQyxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQ3BCLENBQUMsY0FBYyxFQUFFLEVBQUUsQ0FDakIsQ0FBQyxPQUFPLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxJQUFJLGNBQWMsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUN0RztZQUNILENBQUMsQ0FBQyxlQUFlLENBQUE7SUFDckIsQ0FBQzs7NEdBdkJVLGVBQWUsa0JBRWhCLDBCQUEwQjtnSEFGekIsZUFBZTsyRkFBZixlQUFlO2tCQUQzQixVQUFVOzswQkFHTixNQUFNOzJCQUFDLDBCQUEwQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdCwgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnXG5pbXBvcnQgeyBDYXRlZ29yeSwgQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5LCBGaWx0ZXIgfSBmcm9tICdAaW5mcmFiNGEvY29ubmVjdCdcblxuaW1wb3J0IHsgQ2F0ZWdvcnlXaXRoVHJlZSB9IGZyb20gJy4vbW9kZWxzJ1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlTZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgnQ2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjYXRlZ29yeUZpbHRlclJlcG9zaXRvcnk6IENhdGVnb3J5RmlsdGVyUmVwb3NpdG9yeSxcbiAgKSB7fVxuXG4gIGFzeW5jIGZldGNoU3ViQ2F0ZWdvcmllcyhjYXRlZ29yeTogQ2F0ZWdvcnkpOiBQcm9taXNlPENhdGVnb3J5V2l0aFRyZWVbXT4ge1xuICAgIHJldHVybiBbXVxuICB9XG5cbiAgYXN5bmMgZmV0Y2hGaWx0ZXJPcHRpb25zKGNhdGVnb3J5OiBDYXRlZ29yeSwgZmlsdGVycz86IHN0cmluZ1tdKTogUHJvbWlzZTxGaWx0ZXJbXT4ge1xuICAgIGNvbnN0IGNhdGVnb3J5RmlsdGVycyA9XG4gICAgICBjYXRlZ29yeS5maWx0ZXJzICYmIGNhdGVnb3J5LmZpbHRlcnMubGVuZ3RoXG4gICAgICAgID8gY2F0ZWdvcnkuZmlsdGVyc1xuICAgICAgICA6IGF3YWl0IHRoaXMuY2F0ZWdvcnlGaWx0ZXJSZXBvc2l0b3J5XG4gICAgICAgICAgICAuZmluZCh7IGZpbHRlcnM6IHsgY2F0ZWdvcnlJZDogK2NhdGVnb3J5LmlkIH0gfSlcbiAgICAgICAgICAgIC50aGVuKCh7IGRhdGEgfSkgPT4gZGF0YS5tYXAoKGNhdGVnb3J5RmlsdGVyKSA9PiBjYXRlZ29yeUZpbHRlci5maWx0ZXIpKVxuXG4gICAgcmV0dXJuIGZpbHRlcnM/Lmxlbmd0aFxuICAgICAgPyBjYXRlZ29yeUZpbHRlcnMuZmlsdGVyKFxuICAgICAgICAgIChjYXRlZ29yeUZpbHRlcikgPT5cbiAgICAgICAgICAgICFmaWx0ZXJzIHx8ICFmaWx0ZXJzLmxlbmd0aCB8fCBjYXRlZ29yeUZpbHRlci5vcHRpb25zLnNvbWUoKG9wdGlvbikgPT4gZmlsdGVycy5pbmNsdWRlcyhvcHRpb24uaWQpKSxcbiAgICAgICAgKVxuICAgICAgOiBjYXRlZ29yeUZpbHRlcnNcbiAgfVxufVxuIl19
@@ -1418,7 +1418,9 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImpor
1418
1418
  } });
1419
1419
 
1420
1420
  class CatalogService {
1421
- constructor() {
1421
+ constructor(productRepository, categoryRepository) {
1422
+ this.productRepository = productRepository;
1423
+ this.categoryRepository = categoryRepository;
1422
1424
  this.buildFilterQuery = (category, filters) => { };
1423
1425
  this.buildSortQuery = (sort) => {
1424
1426
  const query = {
@@ -1436,21 +1438,69 @@ class CatalogService {
1436
1438
  };
1437
1439
  }
1438
1440
  fetchProducts(category, options) {
1439
- return {
1440
- products: [],
1441
- pages: 1,
1442
- };
1441
+ return __awaiter(this, void 0, void 0, function* () {
1442
+ const productsIds = category.products.length
1443
+ ? category.products
1444
+ : yield this.categoryRepository.get({ id: category.id }).then((categoryFound) => categoryFound.products);
1445
+ const limits = this.buildLimitQuery(options);
1446
+ return yield this.productRepository
1447
+ .find({
1448
+ filters: {
1449
+ id: { operator: Where.IN, value: productsIds },
1450
+ published: true,
1451
+ },
1452
+ limits,
1453
+ })
1454
+ .then(({ data, count: total }) => ({ products: data, pages: Math.ceil(total / limits.limit), total }));
1455
+ });
1443
1456
  }
1444
1457
  }
1458
+ CatalogService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, deps: [{ token: 'ProductRepository' }, { token: 'CategoryRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
1459
+ CatalogService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService });
1460
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CatalogService, decorators: [{
1461
+ type: Injectable
1462
+ }], ctorParameters: function () {
1463
+ return [{ type: undefined, decorators: [{
1464
+ type: Inject,
1465
+ args: ['ProductRepository']
1466
+ }] }, { type: undefined, decorators: [{
1467
+ type: Inject,
1468
+ args: ['CategoryRepository']
1469
+ }] }];
1470
+ } });
1445
1471
 
1446
1472
  class CategoryService {
1473
+ constructor(categoryFilterRepository) {
1474
+ this.categoryFilterRepository = categoryFilterRepository;
1475
+ }
1447
1476
  fetchSubCategories(category) {
1448
- return [];
1477
+ return __awaiter(this, void 0, void 0, function* () {
1478
+ return [];
1479
+ });
1449
1480
  }
1450
1481
  fetchFilterOptions(category, filters) {
1451
- return [];
1482
+ return __awaiter(this, void 0, void 0, function* () {
1483
+ const categoryFilters = category.filters && category.filters.length
1484
+ ? category.filters
1485
+ : yield this.categoryFilterRepository
1486
+ .find({ filters: { categoryId: +category.id } })
1487
+ .then(({ data }) => data.map((categoryFilter) => categoryFilter.filter));
1488
+ return (filters === null || filters === void 0 ? void 0 : filters.length)
1489
+ ? categoryFilters.filter((categoryFilter) => !filters || !filters.length || categoryFilter.options.some((option) => filters.includes(option.id)))
1490
+ : categoryFilters;
1491
+ });
1452
1492
  }
1453
1493
  }
1494
+ CategoryService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, deps: [{ token: 'CategoryFilterRepository' }], target: i0.ɵɵFactoryTarget.Injectable });
1495
+ CategoryService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService });
1496
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.0", ngImport: i0, type: CategoryService, decorators: [{
1497
+ type: Injectable
1498
+ }], ctorParameters: function () {
1499
+ return [{ type: undefined, decorators: [{
1500
+ type: Inject,
1501
+ args: ['CategoryFilterRepository']
1502
+ }] }];
1503
+ } });
1454
1504
 
1455
1505
  var ProductSorts;
1456
1506
  (function (ProductSorts) {