@infrab4a/connect 0.4.5 → 0.4.7-beta.0

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,2 +1,2 @@
1
1
  export {};
2
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkucmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3Qvc3JjL2xpYi9kb21haW4vY2F0YWxvZy9yZXBvc2l0b3JpZXMvY2F0ZWdvcnkucmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnknXG5pbXBvcnQgeyBDcnVkUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2dlbmVyYWwvcmVwb3NpdG9yeS9jcnVkLnJlcG9zaXRvcnknXG5cbmV4cG9ydCBpbnRlcmZhY2UgQ2F0ZWdvcnlSZXBvc2l0b3J5IGV4dGVuZHMgQ3J1ZFJlcG9zaXRvcnk8Q2F0ZWdvcnk+IHt9XG4iXX0=
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnkucmVwb3NpdG9yeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2Nvbm5lY3Qvc3JjL2xpYi9kb21haW4vY2F0YWxvZy9yZXBvc2l0b3JpZXMvY2F0ZWdvcnkucmVwb3NpdG9yeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2F0ZWdvcnkgfSBmcm9tICcuLi9tb2RlbHMvY2F0ZWdvcnknXG5pbXBvcnQgeyBDcnVkUmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uL2dlbmVyYWwvcmVwb3NpdG9yeS9jcnVkLnJlcG9zaXRvcnknXG5pbXBvcnQgeyBTaG9wcyB9IGZyb20gJy4uL21vZGVscy9lbnVtcy9zaG9wcy5lbnVtJ1xuaW1wb3J0IHsgUHJvZHVjdCB9IGZyb20gJy4uL21vZGVscydcblxuZXhwb3J0IGludGVyZmFjZSBDYXRlZ29yeVJlcG9zaXRvcnkgZXh0ZW5kcyBDcnVkUmVwb3NpdG9yeTxDYXRlZ29yeT4ge1xuICBnZXRDYXRlZ29yeUJ5U2x1ZyhzbHVnOiBzdHJpbmcsIHNob3A6IFNob3BzKTogUHJvbWlzZTxDYXRlZ29yeT5cbiAgZ2V0Q2F0ZWdvcmllc0ZvckhvbWUoY2F0ZWdvcnlJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmcsIHByb2R1Y3RzOiBQcm9kdWN0W10gfVtdPlxufVxuIl19
@@ -0,0 +1,7 @@
1
+ export class DuplicatedResultsError extends Error {
2
+ constructor(message) {
3
+ super(message);
4
+ this.message = message;
5
+ }
6
+ }
7
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZHVwbGljYXRlZC1yZXN1bHRzLmVycm9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvbGliL2Vycm9ycy9kdXBsaWNhdGVkLXJlc3VsdHMuZXJyb3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsTUFBTSxPQUFPLHNCQUF1QixTQUFRLEtBQUs7SUFDL0MsWUFBcUIsT0FBTztRQUMxQixLQUFLLENBQUMsT0FBTyxDQUFDLENBQUE7UUFESyxZQUFPLEdBQVAsT0FBTyxDQUFBO0lBRTVCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCBjbGFzcyBEdXBsaWNhdGVkUmVzdWx0c0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBtZXNzYWdlKSB7XG4gICAgc3VwZXIobWVzc2FnZSlcbiAgfVxufVxuIl19
@@ -1,4 +1,5 @@
1
1
  export * from './invalid-argument.error';
2
2
  export * from './required-argument.error';
3
3
  export * from './not-found.error';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9saWIvZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUE7QUFDeEMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLG1CQUFtQixDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0ICogZnJvbSAnLi9pbnZhbGlkLWFyZ3VtZW50LmVycm9yJ1xuZXhwb3J0ICogZnJvbSAnLi9yZXF1aXJlZC1hcmd1bWVudC5lcnJvcidcbmV4cG9ydCAqIGZyb20gJy4vbm90LWZvdW5kLmVycm9yJ1xuIl19
4
+ export * from './duplicated-results.error';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9saWIvZXJyb3JzL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLGNBQWMsMEJBQTBCLENBQUE7QUFDeEMsY0FBYywyQkFBMkIsQ0FBQTtBQUN6QyxjQUFjLG1CQUFtQixDQUFBO0FBQ2pDLGNBQWMsNEJBQTRCLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2ludmFsaWQtYXJndW1lbnQuZXJyb3InXG5leHBvcnQgKiBmcm9tICcuL3JlcXVpcmVkLWFyZ3VtZW50LmVycm9yJ1xuZXhwb3J0ICogZnJvbSAnLi9ub3QtZm91bmQuZXJyb3InXG5leHBvcnQgKiBmcm9tICcuL2R1cGxpY2F0ZWQtcmVzdWx0cy5lcnJvcidcbiJdfQ==
@@ -1,6 +1,8 @@
1
+ import { __awaiter } from "tslib";
1
2
  import { Base } from '../../../../../utils';
2
3
  import { Category } from '../../../../../domain';
3
4
  import { withCrudFirestore, withFirestore, withHelpers } from '../../mixins';
5
+ import { DuplicatedResultsError, NotFoundError } from '../../../../../errors';
4
6
  export class CategoryFirestoreRepository extends withCrudFirestore(withHelpers(withFirestore(Base))) {
5
7
  constructor(firestore) {
6
8
  super();
@@ -8,5 +10,41 @@ export class CategoryFirestoreRepository extends withCrudFirestore(withHelpers(w
8
10
  this.collectionName = 'categories';
9
11
  this.model = Category;
10
12
  }
13
+ getCategoryBySlug(slug, shop) {
14
+ return this.collection(this.collectionName)
15
+ .where("slug", "==", slug)
16
+ .where("shop", "==", shop)
17
+ .where("published", "==", true)
18
+ .get().then(snap => {
19
+ if (snap.size > 1)
20
+ throw new DuplicatedResultsError("Query returned duplicated values");
21
+ if (snap.empty)
22
+ throw new NotFoundError(`Document with slug ${slug} not found`);
23
+ return snap.docs[0].data();
24
+ }).catch(error => error);
25
+ }
26
+ getCategoriesForHome(categoryIds) {
27
+ return __awaiter(this, void 0, void 0, function* () {
28
+ const categorySnap = yield this.collection(this.collectionName)
29
+ .where("id", "in", categoryIds)
30
+ .where("published", "==", true)
31
+ .get();
32
+ if (categorySnap.empty)
33
+ throw new NotFoundError("Categories not found");
34
+ const categories = categorySnap.docs.map(doc => doc.data());
35
+ const homeSections = [];
36
+ for (const category of categories) {
37
+ const productSnap = yield this.collection("products")
38
+ .where("categories", "array-contains", category.id)
39
+ .where("published", "==", true)
40
+ .where("stock.quantity", ">", 1)
41
+ .limit(4)
42
+ .get();
43
+ const products = productSnap.docs.map(doc => doc.data());
44
+ homeSections.push({ title: category.name, products });
45
+ }
46
+ return homeSections;
47
+ });
48
+ }
11
49
  }
12
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZmlyZXN0b3JlLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9saWIvaW5mcmEvZmlyZWJhc2UvZmlyZXN0b3JlL3JlcG9zaXRvcmllcy9jYXRhbG9nL2NhdGVnb3J5LWZpcmVzdG9yZS5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUVBLE9BQU8sRUFBRSxJQUFJLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUMzQyxPQUFPLEVBQUUsUUFBUSxFQUFzQixNQUFNLHVCQUF1QixDQUFBO0FBRXBFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLE1BQU0sY0FBYyxDQUFBO0FBRTVFLE1BQU0sT0FBTywyQkFDWCxTQUFRLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQVcsSUFBSSxDQUFDLENBQUMsQ0FBQztJQUdyRSxZQUFxQixTQUE0QjtRQUMvQyxLQUFLLEVBQUUsQ0FBQTtRQURZLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBRS9DLElBQUksQ0FBQyxjQUFjLEdBQUcsWUFBWSxDQUFBO1FBQ2xDLElBQUksQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFBO0lBQ3ZCLENBQUM7Q0FDRiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEZpcmViYXNlRmlyZXN0b3JlIH0gZnJvbSAnQGZpcmViYXNlL2ZpcmVzdG9yZS10eXBlcydcblxuaW1wb3J0IHsgQmFzZSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL3V0aWxzJ1xuaW1wb3J0IHsgQ2F0ZWdvcnksIENhdGVnb3J5UmVwb3NpdG9yeSB9IGZyb20gJy4uLy4uLy4uLy4uLy4uL2RvbWFpbidcblxuaW1wb3J0IHsgd2l0aENydWRGaXJlc3RvcmUsIHdpdGhGaXJlc3RvcmUsIHdpdGhIZWxwZXJzIH0gZnJvbSAnLi4vLi4vbWl4aW5zJ1xuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlGaXJlc3RvcmVSZXBvc2l0b3J5XG4gIGV4dGVuZHMgd2l0aENydWRGaXJlc3RvcmUod2l0aEhlbHBlcnMod2l0aEZpcmVzdG9yZTxDYXRlZ29yeT4oQmFzZSkpKVxuICBpbXBsZW1lbnRzIENhdGVnb3J5UmVwb3NpdG9yeVxue1xuICBjb25zdHJ1Y3RvcihyZWFkb25seSBmaXJlc3RvcmU6IEZpcmViYXNlRmlyZXN0b3JlKSB7XG4gICAgc3VwZXIoKVxuICAgIHRoaXMuY29sbGVjdGlvbk5hbWUgPSAnY2F0ZWdvcmllcydcbiAgICB0aGlzLm1vZGVsID0gQ2F0ZWdvcnlcbiAgfVxufVxuIl19
50
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2F0ZWdvcnktZmlyZXN0b3JlLnJlcG9zaXRvcnkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0L3NyYy9saWIvaW5mcmEvZmlyZWJhc2UvZmlyZXN0b3JlL3JlcG9zaXRvcmllcy9jYXRhbG9nL2NhdGVnb3J5LWZpcmVzdG9yZS5yZXBvc2l0b3J5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sc0JBQXNCLENBQUE7QUFDM0MsT0FBTyxFQUFFLFFBQVEsRUFBc0MsTUFBTSx1QkFBdUIsQ0FBQTtBQUVwRixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsYUFBYSxFQUFFLFdBQVcsRUFBRSxNQUFNLGNBQWMsQ0FBQTtBQUM1RSxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsYUFBYSxFQUFFLE1BQU0sdUJBQXVCLENBQUE7QUFFN0UsTUFBTSxPQUFPLDJCQUNYLFNBQVEsaUJBQWlCLENBQUMsV0FBVyxDQUFDLGFBQWEsQ0FBVyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBRXJFLFlBQXFCLFNBQTRCO1FBQy9DLEtBQUssRUFBRSxDQUFBO1FBRFksY0FBUyxHQUFULFNBQVMsQ0FBbUI7UUFFL0MsSUFBSSxDQUFDLGNBQWMsR0FBRyxZQUFZLENBQUE7UUFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxRQUFRLENBQUE7SUFDdkIsQ0FBQztJQUVELGlCQUFpQixDQUFDLElBQVksRUFBRSxJQUFXO1FBQ3pDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsY0FBYyxDQUFDO2FBQ3hDLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSSxFQUFFLElBQUksQ0FBQzthQUN6QixLQUFLLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7YUFDekIsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO2FBQzlCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRTtZQUVqQixJQUFJLElBQUksQ0FBQyxJQUFJLEdBQUcsQ0FBQztnQkFDZixNQUFNLElBQUksc0JBQXNCLENBQUMsa0NBQWtDLENBQUMsQ0FBQztZQUV2RSxJQUFJLElBQUksQ0FBQyxLQUFLO2dCQUNaLE1BQU0sSUFBSSxhQUFhLENBQUMsc0JBQXNCLElBQUksWUFBWSxDQUFDLENBQUE7WUFFakUsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksRUFBRSxDQUFBO1FBQzVCLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFBO0lBQzVCLENBQUM7SUFFSyxvQkFBb0IsQ0FBQyxXQUFxQjs7WUFFOUMsTUFBTSxZQUFZLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUM7aUJBQzVELEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQztpQkFDOUIsS0FBSyxDQUFDLFdBQVcsRUFBRSxJQUFJLEVBQUUsSUFBSSxDQUFDO2lCQUM5QixHQUFHLEVBQUUsQ0FBQTtZQUVSLElBQUksWUFBWSxDQUFDLEtBQUs7Z0JBQ3BCLE1BQU0sSUFBSSxhQUFhLENBQUMsc0JBQXNCLENBQUMsQ0FBQTtZQUVqRCxNQUFNLFVBQVUsR0FBRyxZQUFZLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFBO1lBRTNELE1BQU0sWUFBWSxHQUFHLEVBQUUsQ0FBQTtZQUV2QixLQUFLLE1BQU0sUUFBUSxJQUFJLFVBQVUsRUFBRTtnQkFDakMsTUFBTSxXQUFXLEdBQUcsTUFBTSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQztxQkFDbEQsS0FBSyxDQUFDLFlBQVksRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLENBQUMsRUFBRSxDQUFDO3FCQUNsRCxLQUFLLENBQUMsV0FBVyxFQUFFLElBQUksRUFBRSxJQUFJLENBQUM7cUJBQzlCLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO3FCQUMvQixLQUFLLENBQUMsQ0FBQyxDQUFDO3FCQUNSLEdBQUcsRUFBRSxDQUFBO2dCQUVSLE1BQU0sUUFBUSxHQUFHLFdBQVcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUE7Z0JBRXhELFlBQVksQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsUUFBUSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO2FBQ3REO1lBRUQsT0FBTyxZQUFZLENBQUM7UUFDdEIsQ0FBQztLQUFBO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaXJlYmFzZUZpcmVzdG9yZSB9IGZyb20gJ0BmaXJlYmFzZS9maXJlc3RvcmUtdHlwZXMnXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscydcbmltcG9ydCB7IENhdGVnb3J5LCBDYXRlZ29yeVJlcG9zaXRvcnksIFByb2R1Y3QsIFNob3BzIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluJ1xuXG5pbXBvcnQgeyB3aXRoQ3J1ZEZpcmVzdG9yZSwgd2l0aEZpcmVzdG9yZSwgd2l0aEhlbHBlcnMgfSBmcm9tICcuLi8uLi9taXhpbnMnXG5pbXBvcnQgeyBEdXBsaWNhdGVkUmVzdWx0c0Vycm9yLCBOb3RGb3VuZEVycm9yIH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZXJyb3JzJ1xuXG5leHBvcnQgY2xhc3MgQ2F0ZWdvcnlGaXJlc3RvcmVSZXBvc2l0b3J5XG4gIGV4dGVuZHMgd2l0aENydWRGaXJlc3RvcmUod2l0aEhlbHBlcnMod2l0aEZpcmVzdG9yZTxDYXRlZ29yeT4oQmFzZSkpKVxuICBpbXBsZW1lbnRzIENhdGVnb3J5UmVwb3NpdG9yeSB7XG4gIGNvbnN0cnVjdG9yKHJlYWRvbmx5IGZpcmVzdG9yZTogRmlyZWJhc2VGaXJlc3RvcmUpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb2xsZWN0aW9uTmFtZSA9ICdjYXRlZ29yaWVzJ1xuICAgIHRoaXMubW9kZWwgPSBDYXRlZ29yeVxuICB9XG5cbiAgZ2V0Q2F0ZWdvcnlCeVNsdWcoc2x1Zzogc3RyaW5nLCBzaG9wOiBTaG9wcyk6IFByb21pc2U8Q2F0ZWdvcnk+IHtcbiAgICByZXR1cm4gdGhpcy5jb2xsZWN0aW9uKHRoaXMuY29sbGVjdGlvbk5hbWUpXG4gICAgICAud2hlcmUoXCJzbHVnXCIsIFwiPT1cIiwgc2x1ZylcbiAgICAgIC53aGVyZShcInNob3BcIiwgXCI9PVwiLCBzaG9wKVxuICAgICAgLndoZXJlKFwicHVibGlzaGVkXCIsIFwiPT1cIiwgdHJ1ZSlcbiAgICAgIC5nZXQoKS50aGVuKHNuYXAgPT4ge1xuXG4gICAgICAgIGlmIChzbmFwLnNpemUgPiAxKVxuICAgICAgICAgIHRocm93IG5ldyBEdXBsaWNhdGVkUmVzdWx0c0Vycm9yKFwiUXVlcnkgcmV0dXJuZWQgZHVwbGljYXRlZCB2YWx1ZXNcIik7XG5cbiAgICAgICAgaWYgKHNuYXAuZW1wdHkpXG4gICAgICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoYERvY3VtZW50IHdpdGggc2x1ZyAke3NsdWd9IG5vdCBmb3VuZGApXG5cbiAgICAgICAgcmV0dXJuIHNuYXAuZG9jc1swXS5kYXRhKClcbiAgICAgIH0pLmNhdGNoKGVycm9yID0+IGVycm9yKVxuICB9XG5cbiAgYXN5bmMgZ2V0Q2F0ZWdvcmllc0ZvckhvbWUoY2F0ZWdvcnlJZHM6IHN0cmluZ1tdKTogUHJvbWlzZTx7IHRpdGxlOiBzdHJpbmcsIHByb2R1Y3RzOiBQcm9kdWN0W10gfVtdPiB7XG5cbiAgICBjb25zdCBjYXRlZ29yeVNuYXAgPSBhd2FpdCB0aGlzLmNvbGxlY3Rpb24odGhpcy5jb2xsZWN0aW9uTmFtZSlcbiAgICAgIC53aGVyZShcImlkXCIsIFwiaW5cIiwgY2F0ZWdvcnlJZHMpXG4gICAgICAud2hlcmUoXCJwdWJsaXNoZWRcIiwgXCI9PVwiLCB0cnVlKVxuICAgICAgLmdldCgpXG5cbiAgICBpZiAoY2F0ZWdvcnlTbmFwLmVtcHR5KVxuICAgICAgdGhyb3cgbmV3IE5vdEZvdW5kRXJyb3IoXCJDYXRlZ29yaWVzIG5vdCBmb3VuZFwiKVxuXG4gICAgY29uc3QgY2F0ZWdvcmllcyA9IGNhdGVnb3J5U25hcC5kb2NzLm1hcChkb2MgPT4gZG9jLmRhdGEoKSlcblxuICAgIGNvbnN0IGhvbWVTZWN0aW9ucyA9IFtdXG5cbiAgICBmb3IgKGNvbnN0IGNhdGVnb3J5IG9mIGNhdGVnb3JpZXMpIHtcbiAgICAgIGNvbnN0IHByb2R1Y3RTbmFwID0gYXdhaXQgdGhpcy5jb2xsZWN0aW9uKFwicHJvZHVjdHNcIilcbiAgICAgICAgLndoZXJlKFwiY2F0ZWdvcmllc1wiLCBcImFycmF5LWNvbnRhaW5zXCIsIGNhdGVnb3J5LmlkKVxuICAgICAgICAud2hlcmUoXCJwdWJsaXNoZWRcIiwgXCI9PVwiLCB0cnVlKVxuICAgICAgICAud2hlcmUoXCJzdG9jay5xdWFudGl0eVwiLCBcIj5cIiwgMSlcbiAgICAgICAgLmxpbWl0KDQpXG4gICAgICAgIC5nZXQoKVxuXG4gICAgICBjb25zdCBwcm9kdWN0cyA9IHByb2R1Y3RTbmFwLmRvY3MubWFwKGRvYyA9PiBkb2MuZGF0YSgpKVxuXG4gICAgICBob21lU2VjdGlvbnMucHVzaCh7IHRpdGxlOiBjYXRlZ29yeS5uYW1lLCBwcm9kdWN0cyB9KVxuICAgIH1cblxuICAgIHJldHVybiBob21lU2VjdGlvbnM7XG4gIH1cbn1cbiJdfQ==
@@ -6,9 +6,9 @@ export class ProductVariantFirestoreRepository extends withSubCollection(withCru
6
6
  super();
7
7
  this.firestore = firestore;
8
8
  this.parentRepository = parentRepository;
9
- this.collectionName = 'Variants';
9
+ this.collectionName = 'variants';
10
10
  this.parentIdField = 'productId';
11
11
  this.model = Variant;
12
12
  }
13
13
  }
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50LWZpcmVzdG9yZS5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvbGliL2luZnJhL2ZpcmViYXNlL2ZpcmVzdG9yZS9yZXBvc2l0b3JpZXMvY2F0YWxvZy9wcm9kdWN0LXZhcmlhbnQtZmlyZXN0b3JlLnJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFxQixNQUFNLHVCQUF1QixDQUFBO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBSS9GLE1BQU0sT0FBTyxpQ0FDWCxTQUFRLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUdoRyxZQUFxQixTQUE0QixFQUFXLGdCQUE0QztRQUN0RyxLQUFLLEVBQUUsQ0FBQTtRQURZLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBQVcscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE0QjtRQUV0RyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQTtJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaXJlYmFzZUZpcmVzdG9yZSB9IGZyb20gJ0BmaXJlYmFzZS9maXJlc3RvcmUtdHlwZXMnXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscydcbmltcG9ydCB7IFByb2R1Y3QsIFZhcmlhbnQsIFZhcmlhbnRSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgd2l0aENydWRGaXJlc3RvcmUsIHdpdGhGaXJlc3RvcmUsIHdpdGhIZWxwZXJzLCB3aXRoU3ViQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL21peGlucydcblxuaW1wb3J0IHsgUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnkgfSBmcm9tICcuL3Byb2R1Y3QtZmlyZXN0b3JlLnJlcG9zaXRvcnknXG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0VmFyaWFudEZpcmVzdG9yZVJlcG9zaXRvcnlcbiAgZXh0ZW5kcyB3aXRoU3ViQ29sbGVjdGlvbih3aXRoQ3J1ZEZpcmVzdG9yZSh3aXRoSGVscGVycyh3aXRoRmlyZXN0b3JlPFZhcmlhbnQ+KEJhc2UpKSksIFByb2R1Y3QpXG4gIGltcGxlbWVudHMgVmFyaWFudFJlcG9zaXRvcnlcbntcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZmlyZXN0b3JlOiBGaXJlYmFzZUZpcmVzdG9yZSwgcmVhZG9ubHkgcGFyZW50UmVwb3NpdG9yeTogUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnkpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb2xsZWN0aW9uTmFtZSA9ICdWYXJpYW50cydcbiAgICB0aGlzLnBhcmVudElkRmllbGQgPSAncHJvZHVjdElkJ1xuICAgIHRoaXMubW9kZWwgPSBWYXJpYW50XG4gIH1cbn1cbiJdfQ==
14
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC12YXJpYW50LWZpcmVzdG9yZS5yZXBvc2l0b3J5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvY29ubmVjdC9zcmMvbGliL2luZnJhL2ZpcmViYXNlL2ZpcmVzdG9yZS9yZXBvc2l0b3JpZXMvY2F0YWxvZy9wcm9kdWN0LXZhcmlhbnQtZmlyZXN0b3JlLnJlcG9zaXRvcnkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBRUEsT0FBTyxFQUFFLElBQUksRUFBRSxNQUFNLHNCQUFzQixDQUFBO0FBQzNDLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTyxFQUFxQixNQUFNLHVCQUF1QixDQUFBO0FBQzNFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxhQUFhLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sY0FBYyxDQUFBO0FBSS9GLE1BQU0sT0FBTyxpQ0FDWCxTQUFRLGlCQUFpQixDQUFDLGlCQUFpQixDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQVUsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLE9BQU8sQ0FBQztJQUdoRyxZQUFxQixTQUE0QixFQUFXLGdCQUE0QztRQUN0RyxLQUFLLEVBQUUsQ0FBQTtRQURZLGNBQVMsR0FBVCxTQUFTLENBQW1CO1FBQVcscUJBQWdCLEdBQWhCLGdCQUFnQixDQUE0QjtRQUV0RyxJQUFJLENBQUMsY0FBYyxHQUFHLFVBQVUsQ0FBQTtRQUNoQyxJQUFJLENBQUMsYUFBYSxHQUFHLFdBQVcsQ0FBQTtRQUNoQyxJQUFJLENBQUMsS0FBSyxHQUFHLE9BQU8sQ0FBQTtJQUN0QixDQUFDO0NBQ0YiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBGaXJlYmFzZUZpcmVzdG9yZSB9IGZyb20gJ0BmaXJlYmFzZS9maXJlc3RvcmUtdHlwZXMnXG5cbmltcG9ydCB7IEJhc2UgfSBmcm9tICcuLi8uLi8uLi8uLi8uLi91dGlscydcbmltcG9ydCB7IFByb2R1Y3QsIFZhcmlhbnQsIFZhcmlhbnRSZXBvc2l0b3J5IH0gZnJvbSAnLi4vLi4vLi4vLi4vLi4vZG9tYWluJ1xuaW1wb3J0IHsgd2l0aENydWRGaXJlc3RvcmUsIHdpdGhGaXJlc3RvcmUsIHdpdGhIZWxwZXJzLCB3aXRoU3ViQ29sbGVjdGlvbiB9IGZyb20gJy4uLy4uL21peGlucydcblxuaW1wb3J0IHsgUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnkgfSBmcm9tICcuL3Byb2R1Y3QtZmlyZXN0b3JlLnJlcG9zaXRvcnknXG5cbmV4cG9ydCBjbGFzcyBQcm9kdWN0VmFyaWFudEZpcmVzdG9yZVJlcG9zaXRvcnlcbiAgZXh0ZW5kcyB3aXRoU3ViQ29sbGVjdGlvbih3aXRoQ3J1ZEZpcmVzdG9yZSh3aXRoSGVscGVycyh3aXRoRmlyZXN0b3JlPFZhcmlhbnQ+KEJhc2UpKSksIFByb2R1Y3QpXG4gIGltcGxlbWVudHMgVmFyaWFudFJlcG9zaXRvcnlcbntcbiAgY29uc3RydWN0b3IocmVhZG9ubHkgZmlyZXN0b3JlOiBGaXJlYmFzZUZpcmVzdG9yZSwgcmVhZG9ubHkgcGFyZW50UmVwb3NpdG9yeTogUHJvZHVjdEZpcmVzdG9yZVJlcG9zaXRvcnkpIHtcbiAgICBzdXBlcigpXG4gICAgdGhpcy5jb2xsZWN0aW9uTmFtZSA9ICd2YXJpYW50cydcbiAgICB0aGlzLnBhcmVudElkRmllbGQgPSAncHJvZHVjdElkJ1xuICAgIHRoaXMubW9kZWwgPSBWYXJpYW50XG4gIH1cbn1cbiJdfQ==
@@ -518,6 +518,13 @@ class NotFoundError extends Error {
518
518
  }
519
519
  }
520
520
 
521
+ class DuplicatedResultsError extends Error {
522
+ constructor(message) {
523
+ super(message);
524
+ this.message = message;
525
+ }
526
+ }
527
+
521
528
  const withFirestore = (MixinBase) => {
522
529
  return class extends MixinBase {
523
530
  constructor(...args) {
@@ -839,6 +846,42 @@ class CategoryFirestoreRepository extends withCrudFirestore(withHelpers(withFire
839
846
  this.collectionName = 'categories';
840
847
  this.model = Category;
841
848
  }
849
+ getCategoryBySlug(slug, shop) {
850
+ return this.collection(this.collectionName)
851
+ .where("slug", "==", slug)
852
+ .where("shop", "==", shop)
853
+ .where("published", "==", true)
854
+ .get().then(snap => {
855
+ if (snap.size > 1)
856
+ throw new DuplicatedResultsError("Query returned duplicated values");
857
+ if (snap.empty)
858
+ throw new NotFoundError(`Document with slug ${slug} not found`);
859
+ return snap.docs[0].data();
860
+ }).catch(error => error);
861
+ }
862
+ getCategoriesForHome(categoryIds) {
863
+ return __awaiter(this, void 0, void 0, function* () {
864
+ const categorySnap = yield this.collection(this.collectionName)
865
+ .where("id", "in", categoryIds)
866
+ .where("published", "==", true)
867
+ .get();
868
+ if (categorySnap.empty)
869
+ throw new NotFoundError("Categories not found");
870
+ const categories = categorySnap.docs.map(doc => doc.data());
871
+ const homeSections = [];
872
+ for (const category of categories) {
873
+ const productSnap = yield this.collection("products")
874
+ .where("categories", "array-contains", category.id)
875
+ .where("published", "==", true)
876
+ .where("stock.quantity", ">", 1)
877
+ .limit(4)
878
+ .get();
879
+ const products = productSnap.docs.map(doc => doc.data());
880
+ homeSections.push({ title: category.name, products });
881
+ }
882
+ return homeSections;
883
+ });
884
+ }
842
885
  }
843
886
 
844
887
  class ProductFirestoreRepository extends withCrudFirestore(withHelpers(withFirestore(Base))) {
@@ -855,7 +898,7 @@ class ProductVariantFirestoreRepository extends withSubCollection(withCrudFirest
855
898
  super();
856
899
  this.firestore = firestore;
857
900
  this.parentRepository = parentRepository;
858
- this.collectionName = 'Variants';
901
+ this.collectionName = 'variants';
859
902
  this.parentIdField = 'productId';
860
903
  this.model = Variant;
861
904
  }
@@ -971,5 +1014,5 @@ class AuthenticationFirebaseAuthService {
971
1014
  * Generated bundle index. Do not edit.
972
1015
  */
973
1016
 
974
- export { Address, Area, Authentication, AuthenticationFirebaseAuthService, Base, BaseModel, BeardSizes, BeautyProfile, BillingStatus, Buy2Win, Buy2WinFirestoreRepository, Category, CategoryFirestoreRepository, Checkout, CheckoutFirestoreRepository, CheckoutSubscription, CheckoutSubscriptionFirestoreRepository, CheckoutTypes, Coupon, CouponFirestoreRepository, CouponSubtypes, CouponTypes, Edition, EditionStatus, Exclusivities, FinancialCoupon, HairTypes, Home, HomeFirestoreRepository, InvalidArgumentError, LineItem, NotFoundError, OfficePosition, Order, OrderFirestoreRepository, OrderStatus, Payment, PaymentFirestoreRepository, PaymentType, Product, ProductFirestoreRepository, ProductVariantFirestoreRepository, RequiredArgumentError, ShippingMethod, ShopMenu, ShopMenuFirestoreRepository, Shops, SignInMethods, SignOut, Status, Subscription, SubscriptionEditionFirestoreRepository, SubscriptionFirestoreRepository, SubscriptionPayment, SubscriptionPaymentFirestoreRepository, SubscriptionPlan, SubscriptionPlanFirestoreRepository, UnauthorizedError, UpdateOptionActions, User, UserAddress, UserAddressFirestoreRepository, UserBeautyProfileFirestoreRepository, UserFirestoreRepository, UserType, Variant, Where, withCreateFirestore, withCrudFirestore, withDeleteFirestore, withFindFirestore, withFirestore, withGetFirestore, withHelpers, withSubCollection, withUpdateFirestore };
1017
+ export { Address, Area, Authentication, AuthenticationFirebaseAuthService, Base, BaseModel, BeardSizes, BeautyProfile, BillingStatus, Buy2Win, Buy2WinFirestoreRepository, Category, CategoryFirestoreRepository, Checkout, CheckoutFirestoreRepository, CheckoutSubscription, CheckoutSubscriptionFirestoreRepository, CheckoutTypes, Coupon, CouponFirestoreRepository, CouponSubtypes, CouponTypes, DuplicatedResultsError, Edition, EditionStatus, Exclusivities, FinancialCoupon, HairTypes, Home, HomeFirestoreRepository, InvalidArgumentError, LineItem, NotFoundError, OfficePosition, Order, OrderFirestoreRepository, OrderStatus, Payment, PaymentFirestoreRepository, PaymentType, Product, ProductFirestoreRepository, ProductVariantFirestoreRepository, RequiredArgumentError, ShippingMethod, ShopMenu, ShopMenuFirestoreRepository, Shops, SignInMethods, SignOut, Status, Subscription, SubscriptionEditionFirestoreRepository, SubscriptionFirestoreRepository, SubscriptionPayment, SubscriptionPaymentFirestoreRepository, SubscriptionPlan, SubscriptionPlanFirestoreRepository, UnauthorizedError, UpdateOptionActions, User, UserAddress, UserAddressFirestoreRepository, UserBeautyProfileFirestoreRepository, UserFirestoreRepository, UserType, Variant, Where, withCreateFirestore, withCrudFirestore, withDeleteFirestore, withFindFirestore, withFirestore, withGetFirestore, withHelpers, withSubCollection, withUpdateFirestore };
975
1018
  //# sourceMappingURL=infrab4a-connect.js.map