@infrab4a/connect-angular 0.14.2-beta.3 → 0.14.2
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.
- package/bundles/infrab4a-connect-angular.umd.js +90 -69
- package/bundles/infrab4a-connect-angular.umd.js.map +1 -1
- package/esm2015/angular-firestore.module.js +6 -6
- package/esm2015/services/cart.service.js +27 -10
- package/esm2015/services/checkout-subscription.service.js +27 -3
- package/esm2015/services/checkout.service.js +14 -3
- package/esm2015/services/coupon.service.js +17 -45
- package/fesm2015/infrab4a-connect-angular.js +78 -55
- package/fesm2015/infrab4a-connect-angular.js.map +1 -1
- package/package.json +2 -2
- package/services/cart.service.d.ts +8 -2
- package/services/checkout-subscription.service.d.ts +3 -1
- package/services/checkout.service.d.ts +2 -3
- package/services/coupon.service.d.ts +3 -6
|
@@ -1,22 +1,20 @@
|
|
|
1
|
-
import { __awaiter } from "tslib";
|
|
2
1
|
import { Inject, Injectable } from '@angular/core';
|
|
3
|
-
import {
|
|
4
|
-
import { from, throwError } from 'rxjs';
|
|
2
|
+
import { Exclusivities, FinancialCoupon, NotFoundError, Shops, Where, } from '@infrab4a/connect';
|
|
3
|
+
import { from, throwError, of } from 'rxjs';
|
|
5
4
|
import { concatMap, map } from 'rxjs/operators';
|
|
6
5
|
import { DEFAULT_SHOP } from '../consts';
|
|
7
|
-
import { InvalidCouponError } from './errors';
|
|
6
|
+
import { GroupInvalidCouponError, InvalidCouponError } from './errors';
|
|
8
7
|
import * as i0 from "@angular/core";
|
|
9
8
|
import * as i1 from "@infrab4a/connect";
|
|
10
9
|
export class CouponService {
|
|
11
|
-
constructor(couponRepository, defaultShop
|
|
10
|
+
constructor(couponRepository, defaultShop) {
|
|
12
11
|
this.couponRepository = couponRepository;
|
|
13
12
|
this.defaultShop = defaultShop;
|
|
14
|
-
this.orderRepository = orderRepository;
|
|
15
13
|
this.emailIsFromCollaborator = (userEmail) => !!(userEmail === null || userEmail === void 0 ? void 0 : userEmail.match(/@b4a.com.br/g));
|
|
16
14
|
this.separateValidCoupons = (coupons, userEmail) => coupons
|
|
17
15
|
.map((coupon) => {
|
|
18
16
|
try {
|
|
19
|
-
if (!(coupon
|
|
17
|
+
if (!FinancialCoupon.isFinancialCoupon(coupon))
|
|
20
18
|
throw new InvalidCouponError('Coupon is not valid');
|
|
21
19
|
if (this.isValidCoupon(coupon, userEmail))
|
|
22
20
|
return coupon;
|
|
@@ -25,21 +23,25 @@ export class CouponService {
|
|
|
25
23
|
return error;
|
|
26
24
|
}
|
|
27
25
|
})
|
|
28
|
-
.reduce((current, coupon) => (Object.assign(Object.assign({}, current), (coupon
|
|
26
|
+
.reduce((current, coupon) => (Object.assign(Object.assign({}, current), (FinancialCoupon.isFinancialCoupon(coupon)
|
|
29
27
|
? { valids: [...current.valids, coupon] }
|
|
30
28
|
: { invalids: [...current.invalids, coupon] }))), {
|
|
31
29
|
valids: [],
|
|
32
30
|
invalids: [],
|
|
33
31
|
});
|
|
34
32
|
}
|
|
35
|
-
checkCoupon(nickname, userEmail, checkoutType
|
|
33
|
+
checkCoupon(nickname, userEmail, checkoutType) {
|
|
36
34
|
return from(this.couponRepository.find([
|
|
37
35
|
{
|
|
38
36
|
nickname: { operator: Where.EQUALS, value: nickname },
|
|
39
|
-
|
|
40
|
-
|
|
37
|
+
shopAvailability: { operator: Where.EQUALS, value: this.defaultShop },
|
|
38
|
+
checkoutType: { operator: Where.EQUALS, value: checkoutType },
|
|
41
39
|
},
|
|
42
|
-
])).pipe(concatMap((coupons) =>
|
|
40
|
+
])).pipe(concatMap((coupons) => coupons.count < 1 ? throwError(() => new NotFoundError('Coupon not found')) : of(coupons.data)), map((coupons) => this.separateValidCoupons(coupons, userEmail)), map(({ valids, invalids }) => {
|
|
41
|
+
if (!valids.length)
|
|
42
|
+
throw new GroupInvalidCouponError(invalids);
|
|
43
|
+
return valids;
|
|
44
|
+
}));
|
|
43
45
|
}
|
|
44
46
|
isValidCoupon(coupon, userEmail) {
|
|
45
47
|
if (!this.emailIsFromCollaborator(userEmail) && coupon.exclusivityType === Exclusivities.COLLABORATORS)
|
|
@@ -48,37 +50,10 @@ export class CouponService {
|
|
|
48
50
|
throw new InvalidCouponError('Coupon is not valid for user');
|
|
49
51
|
if ((coupon === null || coupon === void 0 ? void 0 : coupon.expiresIn) < new Date())
|
|
50
52
|
throw new InvalidCouponError('Coupon is expired');
|
|
51
|
-
return
|
|
52
|
-
}
|
|
53
|
-
checkCouponRules(coupons, checkoutType, plan) {
|
|
54
|
-
// coupons.count < 1 ? return throwError(() => new NotFoundError('Coupon not found')) : return of(coupons.data);
|
|
55
|
-
if (coupons.count < 1)
|
|
56
|
-
return throwError(() => new NotFoundError('Coupon not found'));
|
|
57
|
-
const isInShop = coupons.data.find((c) => c.shopAvailability == Shops.ALL || c.shopAvailability == this.defaultShop);
|
|
58
|
-
if (!isInShop)
|
|
59
|
-
return throwError(() => new NotFoundError('Coupon not found'));
|
|
60
|
-
const isCheckoutType = coupons.data.find((c) => c.checkoutType == CheckoutTypes.ALL || c.checkoutType == checkoutType);
|
|
61
|
-
if (!isCheckoutType)
|
|
62
|
-
return throwError(() => new NotFoundError('Coupon not found'));
|
|
63
|
-
if (checkoutType === CheckoutTypes.ALL || checkoutType === CheckoutTypes.SUBSCRIPTION) {
|
|
64
|
-
//regra
|
|
65
|
-
}
|
|
66
|
-
return coupons.data;
|
|
67
|
-
}
|
|
68
|
-
checkCouponUseLimit(coupons, userEmail) {
|
|
69
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
70
|
-
const coupon = coupons.shift();
|
|
71
|
-
const orders = yield this.orderRepository.find([{ coupon: { id: coupon.id } }]);
|
|
72
|
-
const ordersUserCoupon = orders.data.filter((o) => o.user.email == userEmail);
|
|
73
|
-
if (orders.data.length >= (coupon.useLimit || Infinity))
|
|
74
|
-
return throwError(() => new Error('Coupon já usou tudo'));
|
|
75
|
-
if (ordersUserCoupon.length >= coupon.useLimitPerUser)
|
|
76
|
-
return throwError(() => new Error('Usuário Coupon já usou tudo'));
|
|
77
|
-
return coupon;
|
|
78
|
-
});
|
|
53
|
+
return true;
|
|
79
54
|
}
|
|
80
55
|
}
|
|
81
|
-
CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }
|
|
56
|
+
CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
82
57
|
CouponService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, providedIn: 'root' });
|
|
83
58
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, decorators: [{
|
|
84
59
|
type: Injectable,
|
|
@@ -91,8 +66,5 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
|
|
|
91
66
|
}] }, { type: i1.Shops, decorators: [{
|
|
92
67
|
type: Inject,
|
|
93
68
|
args: [DEFAULT_SHOP]
|
|
94
|
-
}] }, { type: undefined, decorators: [{
|
|
95
|
-
type: Inject,
|
|
96
|
-
args: ['OrderRepository']
|
|
97
69
|
}] }]; } });
|
|
98
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUNsRCxPQUFPLEVBQ0wsYUFBYSxFQUNiLE1BQU0sRUFFTixhQUFhLEVBQ2IsYUFBYSxFQUViLEtBQUssRUFDTCxLQUFLLEdBQ04sTUFBTSxtQkFBbUIsQ0FBQTtBQUMxQixPQUFPLEVBQUUsSUFBSSxFQUFjLFVBQVUsRUFBdUIsTUFBTSxNQUFNLENBQUE7QUFDeEUsT0FBTyxFQUFFLFNBQVMsRUFBRSxHQUFHLEVBQVksTUFBTSxnQkFBZ0IsQ0FBQTtBQUV6RCxPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sV0FBVyxDQUFBO0FBRXhDLE9BQU8sRUFBMkIsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUE7OztBQUt0RSxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUMrQyxnQkFBa0MsRUFDeEMsV0FBa0IsRUFDYixlQUFnQztRQUYvQixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBQ2Isb0JBQWUsR0FBZixlQUFlLENBQWlCO1FBcUN0RSw0QkFBdUIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUEsQ0FBQTtRQUU1Rix5QkFBb0IsR0FBRyxDQUM3QixPQUFpQixFQUNqQixTQUFpQixFQUNxQyxFQUFFLENBQ3hELE9BQU87YUFDSixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNkLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLENBQUMsTUFB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QU8sVUFBVSxDQUFDLEdBQUcsRUFBRSxDQUFDLElBQUksS0FBSyxDQUFDLHFCQUFxQixDQUFDLENBQUMsQ0FBQTtZQUVsSCxJQUFJLGdCQUFnQixDQUFDLE1BQU0sSUFBSSxNQUFNLENBQUMsZUFBZTtnQkFDbkQsT0FBTyxVQUFVLENBQUMsR0FBRyxFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsNkJBQTZCLENBQUMsQ0FBQyxDQUFBO1lBRW5FLE9BQU8sTUFBTSxDQUFBO1FBQ2YsQ0FBQztLQUFBOzsyR0F2R1UsYUFBYSxrQkFFZCxrQkFBa0IsYUFDbEIsWUFBWSxhQUNaLGlCQUFpQjsrR0FKaEIsYUFBYSxjQUZaLE1BQU07NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsTUFBTTsyQkFBQyxZQUFZOzswQkFDbkIsTUFBTTsyQkFBQyxpQkFBaUIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJ1xuaW1wb3J0IHtcbiAgQ2hlY2tvdXRUeXBlcyxcbiAgQ291cG9uLFxuICBDb3Vwb25SZXBvc2l0b3J5LFxuICBFeGNsdXNpdml0aWVzLFxuICBOb3RGb3VuZEVycm9yLFxuICBPcmRlclJlcG9zaXRvcnksXG4gIFNob3BzLFxuICBXaGVyZSxcbn0gZnJvbSAnQGluZnJhYjRhL2Nvbm5lY3QnXG5pbXBvcnQgeyBmcm9tLCBPYnNlcnZhYmxlLCB0aHJvd0Vycm9yLCBvZiwgT2JzZXJ2YWJsZUlucHV0IH0gZnJvbSAncnhqcydcbmltcG9ydCB7IGNvbmNhdE1hcCwgbWFwLCBtZXJnZU1hcCB9IGZyb20gJ3J4anMvb3BlcmF0b3JzJ1xuXG5pbXBvcnQgeyBERUZBVUxUX1NIT1AgfSBmcm9tICcuLi9jb25zdHMnXG5cbmltcG9ydCB7IEdyb3VwSW52YWxpZENvdXBvbkVycm9yLCBJbnZhbGlkQ291cG9uRXJyb3IgfSBmcm9tICcuL2Vycm9ycydcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCcsXG59KVxuZXhwb3J0IGNsYXNzIENvdXBvblNlcnZpY2Uge1xuICBjb25zdHJ1Y3RvcihcbiAgICBASW5qZWN0KCdDb3Vwb25SZXBvc2l0b3J5JykgcHJpdmF0ZSByZWFkb25seSBjb3Vwb25SZXBvc2l0b3J5OiBDb3Vwb25SZXBvc2l0b3J5LFxuICAgIEBJbmplY3QoREVGQVVMVF9TSE9QKSBwcml2YXRlIHJlYWRvbmx5IGRlZmF1bHRTaG9wOiBTaG9wcyxcbiAgICBASW5qZWN0KCdPcmRlclJlcG9zaXRvcnknKSBwcml2YXRlIHJlYWRvbmx5IG9yZGVyUmVwb3NpdG9yeTogT3JkZXJSZXBvc2l0b3J5LFxuICApIHt9XG5cbiAgY2hlY2tDb3Vwb24obmlja25hbWU6IHN0cmluZywgdXNlckVtYWlsOiBzdHJpbmcsIGNoZWNrb3V0VHlwZTogQ2hlY2tvdXRUeXBlcywgcGxhbj86IHN0cmluZyk6IE9ic2VydmFibGU8Q291cG9uPiB7XG4gICAgcmV0dXJuIGZyb20oXG4gICAgICB0aGlzLmNvdXBvblJlcG9zaXRvcnkuZmluZChbXG4gICAgICAgIHtcbiAgICAgICAgICBuaWNrbmFtZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogbmlja25hbWUgfSxcbiAgICAgICAgICAvLyBzaG9wQXZhaWxhYmlsaXR5OiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiB0aGlzLmRlZmF1bHRTaG9wIH0sXG4gICAgICAgICAgLy8gY2hlY2tvdXRUeXBlOiB7IG9wZXJhdG9yOiBXaGVyZS5FUVVBTFMsIHZhbHVlOiBjaGVja291dFR5cGUgfSxcbiAgICAgICAgfSxcbiAgICAgIF0pLFxuICAgICkucGlwZShcbiAgICAgIGNvbmNhdE1hcCgoY291cG9ucykgPT4gdGhpcy5jaGVja0NvdXBvblJ1bGVzKGNvdXBvbnMsIGNoZWNrb3V0VHlwZSkpLFxuICAgICAgY29uY2F0TWFwKChjb3Vwb25zOiBDb3Vwb25bXSkgPT4gdGhpcy5jaGVja0NvdXBvblVzZUxpbWl0KGNvdXBvbnMsIHVzZXJFbWFpbCkpLFxuICAgICAgbWFwKChjb3Vwb246IENvdXBvbikgPT4gdGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSksXG4gICAgICAvLyBtYXAoKGNvdXBvbjogQ291cG9uKSA9PiBjb3Vwb24pXG5cbiAgICAgIC8vIG1hcCgoY291cG9ucykgPT4gdGhpcy5zZXBhcmF0ZVZhbGlkQ291cG9ucyhjb3Vwb25zLCB1c2VyRW1haWwpKSxcbiAgICAgIC8vIG1hcCgoeyB2YWxpZHMsIGludmFsaWRzIH0pID0+IHtcbiAgICAgIC8vICAgaWYgKCF2YWxpZHMubGVuZ3RoKSB0aHJvdyBuZXcgR3JvdXBJbnZhbGlkQ291cG9uRXJyb3IoaW52YWxpZHMpXG5cbiAgICAgIC8vICAgcmV0dXJuIHZhbGlkc1xuICAgICAgLy8gfSksXG4gICAgKVxuICB9XG5cbiAgcHJpdmF0ZSBpc1ZhbGlkQ291cG9uKGNvdXBvbjogQ291cG9uLCB1c2VyRW1haWw6IHN0cmluZyk6IENvdXBvbiB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSXNGcm9tQ29sbGFib3JhdG9yKHVzZXJFbWFpbCkgJiYgY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVXNlciBpcyBub3QgYSBjb2xsYWJvcmF0b3InKVxuICAgIGlmIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlID09PSBFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIgJiYgY291cG9uLnJlY2lwaWVudCAhPT0gdXNlckVtYWlsKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ291cG9uIGlzIG5vdCB2YWxpZCBmb3IgdXNlcicpXG4gICAgaWYgKGNvdXBvbj8uZXhwaXJlc0luIDwgbmV3IERhdGUoKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ291cG9uIGlzIGV4cGlyZWQnKVxuXG4gICAgcmV0dXJuIGNvdXBvblxuICB9XG5cbiAgcHJpdmF0ZSBlbWFpbElzRnJvbUNvbGxhYm9yYXRvciA9ICh1c2VyRW1haWw6IHN0cmluZyk6IGJvb2xlYW4gPT4gISF1c2VyRW1haWw/Lm1hdGNoKC9AYjRhLmNvbS5ici9nKVxuXG4gIHByaXZhdGUgc2VwYXJhdGVWYWxpZENvdXBvbnMgPSAoXG4gICAgY291cG9uczogQ291cG9uW10sXG4gICAgdXNlckVtYWlsOiBzdHJpbmcsXG4gICk6IHsgdmFsaWRzOiBDb3Vwb25bXTsgaW52YWxpZHM6IEludmFsaWRDb3Vwb25FcnJvcltdIH0gPT5cbiAgICBjb3Vwb25zXG4gICAgICAubWFwKChjb3Vwb24pID0+IHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICBpZiAoIShjb3Vwb24gaW5zdGFuY2VvZiBDb3Vwb24pKSB0aHJvdyBuZXcgSW52YWxpZENvdXBvbkVycm9yKCdDb3Vwb24gaXMgbm90IHZhbGlkJylcbiAgICAgICAgICBpZiAodGhpcy5pc1ZhbGlkQ291cG9uKGNvdXBvbiwgdXNlckVtYWlsKSkgcmV0dXJuIGNvdXBvblxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xuICAgICAgICAgIHJldHVybiBlcnJvciBhcyBJbnZhbGlkQ291cG9uRXJyb3JcbiAgICAgICAgfVxuICAgICAgfSlcbiAgICAgIC5yZWR1Y2UoXG4gICAgICAgIChjdXJyZW50LCBjb3Vwb24pID0+ICh7XG4gICAgICAgICAgLi4uY3VycmVudCxcbiAgICAgICAgICAuLi4oY291cG9uIGluc3RhbmNlb2YgQ291cG9uXG4gICAgICAgICAgICA/IHsgdmFsaWRzOiBbLi4uY3VycmVudC52YWxpZHMsIGNvdXBvbl0gfVxuICAgICAgICAgICAgOiB7IGludmFsaWRzOiBbLi4uY3VycmVudC5pbnZhbGlkcywgY291cG9uXSB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZHM6IFtdIGFzIENvdXBvbltdLFxuICAgICAgICAgIGludmFsaWRzOiBbXSBhcyBJbnZhbGlkQ291cG9uRXJyb3JbXSxcbiAgICAgICAgfSxcbiAgICAgIClcblxuICBwcml2YXRlIGNoZWNrQ291cG9uUnVsZXMoY291cG9ucywgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzLCBwbGFuPzogc3RyaW5nKSB7XG4gICAgLy8gY291cG9ucy5jb3VudCA8IDEgPyByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgTm90Rm91bmRFcnJvcignQ291cG9uIG5vdCBmb3VuZCcpKSA6IHJldHVybiBvZihjb3Vwb25zLmRhdGEpO1xuICAgIGlmIChjb3Vwb25zLmNvdW50IDwgMSkgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IE5vdEZvdW5kRXJyb3IoJ0NvdXBvbiBub3QgZm91bmQnKSlcblxuICAgIGNvbnN0IGlzSW5TaG9wID0gY291cG9ucy5kYXRhLmZpbmQoKGMpID0+IGMuc2hvcEF2YWlsYWJpbGl0eSA9PSBTaG9wcy5BTEwgfHwgYy5zaG9wQXZhaWxhYmlsaXR5ID09IHRoaXMuZGVmYXVsdFNob3ApXG5cbiAgICBpZiAoIWlzSW5TaG9wKSByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgTm90Rm91bmRFcnJvcignQ291cG9uIG5vdCBmb3VuZCcpKVxuXG4gICAgY29uc3QgaXNDaGVja291dFR5cGUgPSBjb3Vwb25zLmRhdGEuZmluZChcbiAgICAgIChjKSA9PiBjLmNoZWNrb3V0VHlwZSA9PSBDaGVja291dFR5cGVzLkFMTCB8fCBjLmNoZWNrb3V0VHlwZSA9PSBjaGVja291dFR5cGUsXG4gICAgKVxuXG4gICAgaWYgKCFpc0NoZWNrb3V0VHlwZSkgcmV0dXJuIHRocm93RXJyb3IoKCkgPT4gbmV3IE5vdEZvdW5kRXJyb3IoJ0NvdXBvbiBub3QgZm91bmQnKSlcblxuICAgIGlmIChjaGVja291dFR5cGUgPT09IENoZWNrb3V0VHlwZXMuQUxMIHx8IGNoZWNrb3V0VHlwZSA9PT0gQ2hlY2tvdXRUeXBlcy5TVUJTQ1JJUFRJT04pIHtcbiAgICAgIC8vcmVncmFcbiAgICB9XG5cbiAgICByZXR1cm4gY291cG9ucy5kYXRhXG4gIH1cblxuICBwcml2YXRlIGFzeW5jIGNoZWNrQ291cG9uVXNlTGltaXQoY291cG9uczogQ291cG9uW10sIHVzZXJFbWFpbDogc3RyaW5nKSB7XG4gICAgY29uc3QgY291cG9uOiBDb3Vwb24gPSBjb3Vwb25zLnNoaWZ0KClcblxuICAgIGNvbnN0IG9yZGVycyA9IGF3YWl0IHRoaXMub3JkZXJSZXBvc2l0b3J5LmZpbmQoW3sgY291cG9uOiB7IGlkOiBjb3Vwb24uaWQgfSB9XSlcblxuICAgIGNvbnN0IG9yZGVyc1VzZXJDb3Vwb24gPSBvcmRlcnMuZGF0YS5maWx0ZXIoKG8pID0+IG8udXNlci5lbWFpbCA9PSB1c2VyRW1haWwpXG5cbiAgICBpZiAob3JkZXJzLmRhdGEubGVuZ3RoID49IChjb3Vwb24udXNlTGltaXQgfHwgSW5maW5pdHkpKSByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoJ0NvdXBvbiBqw6EgdXNvdSB0dWRvJykpXG5cbiAgICBpZiAob3JkZXJzVXNlckNvdXBvbi5sZW5ndGggPj0gY291cG9uLnVzZUxpbWl0UGVyVXNlcilcbiAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcignVXN1w6FyaW8gQ291cG9uIGrDoSB1c291IHR1ZG8nKSlcblxuICAgIHJldHVybiBjb3Vwb25cbiAgfVxufVxuIl19
|
|
70
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY291cG9uLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wcm9qZWN0cy9jb25uZWN0LWFuZ3VsYXIvc3JjL3NlcnZpY2VzL2NvdXBvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBO0FBQ2xELE9BQU8sRUFJTCxhQUFhLEVBQ2IsZUFBZSxFQUNmLGFBQWEsRUFDYixLQUFLLEVBQ0wsS0FBSyxHQUNOLE1BQU0sbUJBQW1CLENBQUE7QUFDMUIsT0FBTyxFQUFFLElBQUksRUFBYyxVQUFVLEVBQUUsRUFBRSxFQUFFLE1BQU0sTUFBTSxDQUFBO0FBQ3ZELE9BQU8sRUFBRSxTQUFTLEVBQUUsR0FBRyxFQUFFLE1BQU0sZ0JBQWdCLENBQUE7QUFFL0MsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLFdBQVcsQ0FBQTtBQUV4QyxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxVQUFVLENBQUE7OztBQUt0RSxNQUFNLE9BQU8sYUFBYTtJQUN4QixZQUMrQyxnQkFBa0MsRUFDeEMsV0FBa0I7UUFEWixxQkFBZ0IsR0FBaEIsZ0JBQWdCLENBQWtCO1FBQ3hDLGdCQUFXLEdBQVgsV0FBVyxDQUFPO1FBbUNuRCw0QkFBdUIsR0FBRyxDQUFDLFNBQWlCLEVBQVcsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBLFNBQVMsYUFBVCxTQUFTLHVCQUFULFNBQVMsQ0FBRSxLQUFLLENBQUMsY0FBYyxDQUFDLENBQUEsQ0FBQTtRQUU1Rix5QkFBb0IsR0FBRyxDQUM3QixPQUFpQixFQUNqQixTQUFpQixFQUM4QyxFQUFFLENBQ2pFLE9BQU87YUFDSixHQUFHLENBQUMsQ0FBQyxNQUFNLEVBQUUsRUFBRTtZQUNkLElBQUk7Z0JBQ0YsSUFBSSxDQUFDLGVBQWUsQ0FBQyxpQkFBaUIsQ0FBQyxNQUFNLENBQUM7b0JBQUUs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QWtCLGFBQ2xCLFlBQVk7K0dBSFgsYUFBYSxjQUZaLE1BQU07NEZBRVAsYUFBYTtrQkFIekIsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkI7OzBCQUdJLE1BQU07MkJBQUMsa0JBQWtCOzswQkFDekIsTUFBTTsyQkFBQyxZQUFZIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcbmltcG9ydCB7XG4gIENoZWNrb3V0VHlwZXMsXG4gIENvdXBvbixcbiAgQ291cG9uUmVwb3NpdG9yeSxcbiAgRXhjbHVzaXZpdGllcyxcbiAgRmluYW5jaWFsQ291cG9uLFxuICBOb3RGb3VuZEVycm9yLFxuICBTaG9wcyxcbiAgV2hlcmUsXG59IGZyb20gJ0BpbmZyYWI0YS9jb25uZWN0J1xuaW1wb3J0IHsgZnJvbSwgT2JzZXJ2YWJsZSwgdGhyb3dFcnJvciwgb2YgfSBmcm9tICdyeGpzJ1xuaW1wb3J0IHsgY29uY2F0TWFwLCBtYXAgfSBmcm9tICdyeGpzL29wZXJhdG9ycydcblxuaW1wb3J0IHsgREVGQVVMVF9TSE9QIH0gZnJvbSAnLi4vY29uc3RzJ1xuXG5pbXBvcnQgeyBHcm91cEludmFsaWRDb3Vwb25FcnJvciwgSW52YWxpZENvdXBvbkVycm9yIH0gZnJvbSAnLi9lcnJvcnMnXG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnLFxufSlcbmV4cG9ydCBjbGFzcyBDb3Vwb25TZXJ2aWNlIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdCgnQ291cG9uUmVwb3NpdG9yeScpIHByaXZhdGUgcmVhZG9ubHkgY291cG9uUmVwb3NpdG9yeTogQ291cG9uUmVwb3NpdG9yeSxcbiAgICBASW5qZWN0KERFRkFVTFRfU0hPUCkgcHJpdmF0ZSByZWFkb25seSBkZWZhdWx0U2hvcDogU2hvcHMsXG4gICkge31cblxuICBjaGVja0NvdXBvbihuaWNrbmFtZTogc3RyaW5nLCB1c2VyRW1haWw6IHN0cmluZywgY2hlY2tvdXRUeXBlOiBDaGVja291dFR5cGVzKTogT2JzZXJ2YWJsZTxGaW5hbmNpYWxDb3Vwb25bXT4ge1xuICAgIHJldHVybiBmcm9tKFxuICAgICAgdGhpcy5jb3Vwb25SZXBvc2l0b3J5LmZpbmQoW1xuICAgICAgICB7XG4gICAgICAgICAgbmlja25hbWU6IHsgb3BlcmF0b3I6IFdoZXJlLkVRVUFMUywgdmFsdWU6IG5pY2tuYW1lIH0sXG4gICAgICAgICAgc2hvcEF2YWlsYWJpbGl0eTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogdGhpcy5kZWZhdWx0U2hvcCB9LFxuICAgICAgICAgIGNoZWNrb3V0VHlwZTogeyBvcGVyYXRvcjogV2hlcmUuRVFVQUxTLCB2YWx1ZTogY2hlY2tvdXRUeXBlIH0sXG4gICAgICAgIH0sXG4gICAgICBdKSxcbiAgICApLnBpcGUoXG4gICAgICBjb25jYXRNYXAoKGNvdXBvbnMpID0+XG4gICAgICAgIGNvdXBvbnMuY291bnQgPCAxID8gdGhyb3dFcnJvcigoKSA9PiBuZXcgTm90Rm91bmRFcnJvcignQ291cG9uIG5vdCBmb3VuZCcpKSA6IG9mKGNvdXBvbnMuZGF0YSksXG4gICAgICApLFxuICAgICAgbWFwKChjb3Vwb25zKSA9PiB0aGlzLnNlcGFyYXRlVmFsaWRDb3Vwb25zKGNvdXBvbnMsIHVzZXJFbWFpbCkpLFxuICAgICAgbWFwKCh7IHZhbGlkcywgaW52YWxpZHMgfSkgPT4ge1xuICAgICAgICBpZiAoIXZhbGlkcy5sZW5ndGgpIHRocm93IG5ldyBHcm91cEludmFsaWRDb3Vwb25FcnJvcihpbnZhbGlkcylcblxuICAgICAgICByZXR1cm4gdmFsaWRzXG4gICAgICB9KSxcbiAgICApXG4gIH1cblxuICBwcml2YXRlIGlzVmFsaWRDb3Vwb24oY291cG9uOiBGaW5hbmNpYWxDb3Vwb24sIHVzZXJFbWFpbDogc3RyaW5nKTogYm9vbGVhbiB7XG4gICAgaWYgKCF0aGlzLmVtYWlsSXNGcm9tQ29sbGFib3JhdG9yKHVzZXJFbWFpbCkgJiYgY291cG9uLmV4Y2x1c2l2aXR5VHlwZSA9PT0gRXhjbHVzaXZpdGllcy5DT0xMQUJPUkFUT1JTKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignVXNlciBpcyBub3QgYSBjb2xsYWJvcmF0b3InKVxuICAgIGlmIChjb3Vwb24uZXhjbHVzaXZpdHlUeXBlID09PSBFeGNsdXNpdml0aWVzLlNQRUNJRklDX1VTRVIgJiYgY291cG9uLnJlY2lwaWVudCAhPT0gdXNlckVtYWlsKVxuICAgICAgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ291cG9uIGlzIG5vdCB2YWxpZCBmb3IgdXNlcicpXG4gICAgaWYgKGNvdXBvbj8uZXhwaXJlc0luIDwgbmV3IERhdGUoKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ291cG9uIGlzIGV4cGlyZWQnKVxuXG4gICAgcmV0dXJuIHRydWVcbiAgfVxuXG4gIHByaXZhdGUgZW1haWxJc0Zyb21Db2xsYWJvcmF0b3IgPSAodXNlckVtYWlsOiBzdHJpbmcpOiBib29sZWFuID0+ICEhdXNlckVtYWlsPy5tYXRjaCgvQGI0YS5jb20uYnIvZylcblxuICBwcml2YXRlIHNlcGFyYXRlVmFsaWRDb3Vwb25zID0gKFxuICAgIGNvdXBvbnM6IENvdXBvbltdLFxuICAgIHVzZXJFbWFpbDogc3RyaW5nLFxuICApOiB7IHZhbGlkczogRmluYW5jaWFsQ291cG9uW107IGludmFsaWRzOiBJbnZhbGlkQ291cG9uRXJyb3JbXSB9ID0+XG4gICAgY291cG9uc1xuICAgICAgLm1hcCgoY291cG9uKSA9PiB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgaWYgKCFGaW5hbmNpYWxDb3Vwb24uaXNGaW5hbmNpYWxDb3Vwb24oY291cG9uKSkgdGhyb3cgbmV3IEludmFsaWRDb3Vwb25FcnJvcignQ291cG9uIGlzIG5vdCB2YWxpZCcpXG4gICAgICAgICAgaWYgKHRoaXMuaXNWYWxpZENvdXBvbihjb3Vwb24sIHVzZXJFbWFpbCkpIHJldHVybiBjb3Vwb25cbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICAgICAgICByZXR1cm4gZXJyb3IgYXMgSW52YWxpZENvdXBvbkVycm9yXG4gICAgICAgIH1cbiAgICAgIH0pXG4gICAgICAucmVkdWNlKFxuICAgICAgICAoY3VycmVudCwgY291cG9uKSA9PiAoe1xuICAgICAgICAgIC4uLmN1cnJlbnQsXG4gICAgICAgICAgLi4uKEZpbmFuY2lhbENvdXBvbi5pc0ZpbmFuY2lhbENvdXBvbihjb3Vwb24pXG4gICAgICAgICAgICA/IHsgdmFsaWRzOiBbLi4uY3VycmVudC52YWxpZHMsIGNvdXBvbl0gfVxuICAgICAgICAgICAgOiB7IGludmFsaWRzOiBbLi4uY3VycmVudC5pbnZhbGlkcywgY291cG9uXSB9KSxcbiAgICAgICAgfSksXG4gICAgICAgIHtcbiAgICAgICAgICB2YWxpZHM6IFtdIGFzIEZpbmFuY2lhbENvdXBvbltdLFxuICAgICAgICAgIGludmFsaWRzOiBbXSBhcyBJbnZhbGlkQ291cG9uRXJyb3JbXSxcbiAgICAgICAgfSxcbiAgICAgIClcbn1cbiJdfQ==
|
|
@@ -5,7 +5,7 @@ import { AngularFireAuth } from '@angular/fire/auth';
|
|
|
5
5
|
import { of, combineLatest, from, throwError, Subject, iif, forkJoin } from 'rxjs';
|
|
6
6
|
import { catchError, map, mergeMap, concatMap, tap } from 'rxjs/operators';
|
|
7
7
|
import * as i2 from '@infrab4a/connect';
|
|
8
|
-
import {
|
|
8
|
+
import { FinancialCoupon, Where, NotFoundError, Exclusivities, isNil, Checkout, CheckoutTypes, pick, LineItem, CouponTypes, CouponSubtypes, CheckoutSubscription, Order, Category, Product, Shops, RequiredArgumentError, add, Authentication, AuthenticationFirebaseAuthService, Register, RegisterFirebaseAuthService, SignOut, RecoveryPassword, ProductsIndex, AxiosAdapter, UserBeautyProfileFirestoreRepository, Buy2WinFirestoreRepository, CategoryFirestoreRepository, CheckoutFirestoreRepository, CheckoutSubscriptionFirestoreRepository, CouponFirestoreRepository, SubscriptionEditionFirestoreRepository, HomeFirestoreRepository, LeadFirestoreRepository, LegacyOrderFirestoreRepository, ShopMenuFirestoreRepository, OrderFirestoreRepository, PaymentFirestoreRepository, ProductFirestoreRepository, SubscriptionPaymentFirestoreRepository, SubscriptionPlanFirestoreRepository, SubscriptionProductFirestoreRepository, SubscriptionFirestoreRepository, UserFirestoreRepository, UserAddressFirestoreRepository, UserPaymentMethodFirestoreRepository, ProductVariantFirestoreRepository } from '@infrab4a/connect';
|
|
9
9
|
import { __awaiter } from 'tslib';
|
|
10
10
|
import cookie from 'js-cookie';
|
|
11
11
|
import * as i1$1 from '@angular/fire/firestore';
|
|
@@ -67,15 +67,14 @@ class GroupInvalidCouponError extends Error {
|
|
|
67
67
|
}
|
|
68
68
|
|
|
69
69
|
class CouponService {
|
|
70
|
-
constructor(couponRepository, defaultShop
|
|
70
|
+
constructor(couponRepository, defaultShop) {
|
|
71
71
|
this.couponRepository = couponRepository;
|
|
72
72
|
this.defaultShop = defaultShop;
|
|
73
|
-
this.orderRepository = orderRepository;
|
|
74
73
|
this.emailIsFromCollaborator = (userEmail) => !!(userEmail === null || userEmail === void 0 ? void 0 : userEmail.match(/@b4a.com.br/g));
|
|
75
74
|
this.separateValidCoupons = (coupons, userEmail) => coupons
|
|
76
75
|
.map((coupon) => {
|
|
77
76
|
try {
|
|
78
|
-
if (!(coupon
|
|
77
|
+
if (!FinancialCoupon.isFinancialCoupon(coupon))
|
|
79
78
|
throw new InvalidCouponError('Coupon is not valid');
|
|
80
79
|
if (this.isValidCoupon(coupon, userEmail))
|
|
81
80
|
return coupon;
|
|
@@ -84,21 +83,25 @@ class CouponService {
|
|
|
84
83
|
return error;
|
|
85
84
|
}
|
|
86
85
|
})
|
|
87
|
-
.reduce((current, coupon) => (Object.assign(Object.assign({}, current), (coupon
|
|
86
|
+
.reduce((current, coupon) => (Object.assign(Object.assign({}, current), (FinancialCoupon.isFinancialCoupon(coupon)
|
|
88
87
|
? { valids: [...current.valids, coupon] }
|
|
89
88
|
: { invalids: [...current.invalids, coupon] }))), {
|
|
90
89
|
valids: [],
|
|
91
90
|
invalids: [],
|
|
92
91
|
});
|
|
93
92
|
}
|
|
94
|
-
checkCoupon(nickname, userEmail, checkoutType
|
|
93
|
+
checkCoupon(nickname, userEmail, checkoutType) {
|
|
95
94
|
return from(this.couponRepository.find([
|
|
96
95
|
{
|
|
97
96
|
nickname: { operator: Where.EQUALS, value: nickname },
|
|
98
|
-
|
|
99
|
-
|
|
97
|
+
shopAvailability: { operator: Where.EQUALS, value: this.defaultShop },
|
|
98
|
+
checkoutType: { operator: Where.EQUALS, value: checkoutType },
|
|
100
99
|
},
|
|
101
|
-
])).pipe(concatMap((coupons) =>
|
|
100
|
+
])).pipe(concatMap((coupons) => coupons.count < 1 ? throwError(() => new NotFoundError('Coupon not found')) : of(coupons.data)), map((coupons) => this.separateValidCoupons(coupons, userEmail)), map(({ valids, invalids }) => {
|
|
101
|
+
if (!valids.length)
|
|
102
|
+
throw new GroupInvalidCouponError(invalids);
|
|
103
|
+
return valids;
|
|
104
|
+
}));
|
|
102
105
|
}
|
|
103
106
|
isValidCoupon(coupon, userEmail) {
|
|
104
107
|
if (!this.emailIsFromCollaborator(userEmail) && coupon.exclusivityType === Exclusivities.COLLABORATORS)
|
|
@@ -107,37 +110,10 @@ class CouponService {
|
|
|
107
110
|
throw new InvalidCouponError('Coupon is not valid for user');
|
|
108
111
|
if ((coupon === null || coupon === void 0 ? void 0 : coupon.expiresIn) < new Date())
|
|
109
112
|
throw new InvalidCouponError('Coupon is expired');
|
|
110
|
-
return
|
|
111
|
-
}
|
|
112
|
-
checkCouponRules(coupons, checkoutType, plan) {
|
|
113
|
-
// coupons.count < 1 ? return throwError(() => new NotFoundError('Coupon not found')) : return of(coupons.data);
|
|
114
|
-
if (coupons.count < 1)
|
|
115
|
-
return throwError(() => new NotFoundError('Coupon not found'));
|
|
116
|
-
const isInShop = coupons.data.find((c) => c.shopAvailability == Shops.ALL || c.shopAvailability == this.defaultShop);
|
|
117
|
-
if (!isInShop)
|
|
118
|
-
return throwError(() => new NotFoundError('Coupon not found'));
|
|
119
|
-
const isCheckoutType = coupons.data.find((c) => c.checkoutType == CheckoutTypes.ALL || c.checkoutType == checkoutType);
|
|
120
|
-
if (!isCheckoutType)
|
|
121
|
-
return throwError(() => new NotFoundError('Coupon not found'));
|
|
122
|
-
if (checkoutType === CheckoutTypes.ALL || checkoutType === CheckoutTypes.SUBSCRIPTION) {
|
|
123
|
-
//regra
|
|
124
|
-
}
|
|
125
|
-
return coupons.data;
|
|
126
|
-
}
|
|
127
|
-
checkCouponUseLimit(coupons, userEmail) {
|
|
128
|
-
return __awaiter(this, void 0, void 0, function* () {
|
|
129
|
-
const coupon = coupons.shift();
|
|
130
|
-
const orders = yield this.orderRepository.find([{ coupon: { id: coupon.id } }]);
|
|
131
|
-
const ordersUserCoupon = orders.data.filter((o) => o.user.email == userEmail);
|
|
132
|
-
if (orders.data.length >= (coupon.useLimit || Infinity))
|
|
133
|
-
return throwError(() => new Error('Coupon já usou tudo'));
|
|
134
|
-
if (ordersUserCoupon.length >= coupon.useLimitPerUser)
|
|
135
|
-
return throwError(() => new Error('Usuário Coupon já usou tudo'));
|
|
136
|
-
return coupon;
|
|
137
|
-
});
|
|
113
|
+
return true;
|
|
138
114
|
}
|
|
139
115
|
}
|
|
140
|
-
CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }
|
|
116
|
+
CouponService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, deps: [{ token: 'CouponRepository' }, { token: DEFAULT_SHOP }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
141
117
|
CouponService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, providedIn: 'root' });
|
|
142
118
|
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CouponService, decorators: [{
|
|
143
119
|
type: Injectable,
|
|
@@ -150,9 +126,6 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
|
|
|
150
126
|
}] }, { type: i2.Shops, decorators: [{
|
|
151
127
|
type: Inject,
|
|
152
128
|
args: [DEFAULT_SHOP]
|
|
153
|
-
}] }, { type: undefined, decorators: [{
|
|
154
|
-
type: Inject,
|
|
155
|
-
args: ['OrderRepository']
|
|
156
129
|
}] }]; } });
|
|
157
130
|
|
|
158
131
|
class CheckoutService {
|
|
@@ -182,9 +155,20 @@ class CheckoutService {
|
|
|
182
155
|
cookie.remove('checkoutId');
|
|
183
156
|
return of();
|
|
184
157
|
}
|
|
185
|
-
applyCupon(coupon) { }
|
|
186
158
|
checkCoupon(nickname) {
|
|
187
|
-
return this.getCheckout().pipe(concatMap((checkout) => {
|
|
159
|
+
return this.getCheckout().pipe(concatMap((checkout) => {
|
|
160
|
+
var _a;
|
|
161
|
+
return this.couponService.checkCoupon(nickname, (_a = checkout.user) === null || _a === void 0 ? void 0 : _a.email, CheckoutTypes.ECOMMERCE).pipe(concatMap((coupons) => of(coupons.shift())), concatMap((coupon) => {
|
|
162
|
+
var _a, _b;
|
|
163
|
+
return !!((_a = checkout.user) === null || _a === void 0 ? void 0 : _a.email)
|
|
164
|
+
? from(this.orderRepository.find([{ user: { email: (_b = checkout.user) === null || _b === void 0 ? void 0 : _b.email }, coupon: { id: coupon.id } }])).pipe(concatMap((orders) => {
|
|
165
|
+
if (orders.data.length >= (coupon.useLimit || Infinity))
|
|
166
|
+
return throwError(() => new Error('Coupon is already applied'));
|
|
167
|
+
return of(coupon);
|
|
168
|
+
}))
|
|
169
|
+
: of(coupon);
|
|
170
|
+
}));
|
|
171
|
+
}));
|
|
188
172
|
}
|
|
189
173
|
createCheckout(checkoutData) {
|
|
190
174
|
return __awaiter(this, void 0, void 0, function* () {
|
|
@@ -246,7 +230,7 @@ class CartService {
|
|
|
246
230
|
if (this.checkMaxStock(item, quantity || 0))
|
|
247
231
|
throw new Error('Desculpe! Temos apenas ' + ((_c = item.stock) === null || _c === void 0 ? void 0 : _c.quantity) + ' em estoque.');
|
|
248
232
|
const image = item.image || ((_d = item.images) === null || _d === void 0 ? void 0 : _d.shift());
|
|
249
|
-
const { id, name, brand, slug, stock, price, weight, categories, sku } = item;
|
|
233
|
+
const { id, name, EAN, brand, slug, stock, price, weight, categories, sku } = item;
|
|
250
234
|
const isGift = item.isGift || null;
|
|
251
235
|
const pricePaid = this.getProductPrice({
|
|
252
236
|
product: item,
|
|
@@ -256,6 +240,7 @@ class CartService {
|
|
|
256
240
|
return LineItem.toInstance({
|
|
257
241
|
id,
|
|
258
242
|
name,
|
|
243
|
+
EAN,
|
|
259
244
|
brand,
|
|
260
245
|
slug,
|
|
261
246
|
sku,
|
|
@@ -302,6 +287,21 @@ class CartService {
|
|
|
302
287
|
this.buildCartFromCheckout(checkout).subscribe((cart) => this.cartSubject.next(cart));
|
|
303
288
|
return this.cartSubject;
|
|
304
289
|
}
|
|
290
|
+
/**
|
|
291
|
+
* @deprecated The method should not be used
|
|
292
|
+
*/
|
|
293
|
+
getDiscount(coupon) {
|
|
294
|
+
switch (coupon.type) {
|
|
295
|
+
case CouponTypes.FINANCIAL:
|
|
296
|
+
return this.getFinancialDiscount(coupon);
|
|
297
|
+
case CouponTypes.PRODUCT:
|
|
298
|
+
return (subTotalPrice) => subTotalPrice;
|
|
299
|
+
case CouponTypes.GIFTCARD:
|
|
300
|
+
return this.getFinancialDiscount(coupon);
|
|
301
|
+
case CouponTypes.VOUCHER:
|
|
302
|
+
return (subTotalPrice) => subTotalPrice;
|
|
303
|
+
}
|
|
304
|
+
}
|
|
305
305
|
/**
|
|
306
306
|
* @deprecated The method should not be used
|
|
307
307
|
*/
|
|
@@ -331,14 +331,15 @@ class CartService {
|
|
|
331
331
|
buildCartFromCheckout(checkoutData) {
|
|
332
332
|
return this.checkoutService.getCheckout(checkoutData).pipe(map((checkout) => checkout.lineItems), concatMap((lineItems) => of(this.generateCartObject(lineItems))));
|
|
333
333
|
}
|
|
334
|
-
|
|
334
|
+
getFinancialDiscount(coupon) {
|
|
335
335
|
return (subTotalPrice) => {
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
336
|
+
if (FinancialCoupon.isFinancialCoupon(coupon))
|
|
337
|
+
switch (coupon.subtype) {
|
|
338
|
+
case CouponSubtypes.ABSOLUTE:
|
|
339
|
+
return subTotalPrice - coupon.discount * 100;
|
|
340
|
+
case CouponSubtypes.PERCENTAGE:
|
|
341
|
+
return subTotalPrice * (1 - coupon.discount / 100);
|
|
342
|
+
}
|
|
342
343
|
};
|
|
343
344
|
}
|
|
344
345
|
}
|
|
@@ -356,6 +357,17 @@ class CheckoutSubscriptionService {
|
|
|
356
357
|
this.checkoutSubscriptionRepository = checkoutSubscriptionRepository;
|
|
357
358
|
this.subscriptionRepository = subscriptionRepository;
|
|
358
359
|
this.couponService = couponService;
|
|
360
|
+
this.checkCouponsWithCheckout = (coupons, checkout) => forkJoin(coupons.map((coupon) => {
|
|
361
|
+
var _a;
|
|
362
|
+
return from(this.subscriptionRepository.find([{ user: { email: (_a = checkout.user) === null || _a === void 0 ? void 0 : _a.email }, coupon: { id: coupon.id } }])).pipe(map((subscriptions) => ({ coupon, subscriptions })));
|
|
363
|
+
})).pipe(map((results) => results.map(({ coupon, subscriptions }) => {
|
|
364
|
+
if (subscriptions.data.length >= (coupon.useLimit || Infinity))
|
|
365
|
+
return new InvalidCouponError('Coupon is already applied');
|
|
366
|
+
return coupon;
|
|
367
|
+
})), map((validatedCoupons) => ({
|
|
368
|
+
valids: validatedCoupons.filter((coupon) => FinancialCoupon.isFinancialCoupon(coupon)),
|
|
369
|
+
invalids: validatedCoupons.filter((coupon) => coupon instanceof InvalidCouponError),
|
|
370
|
+
})), concatMap(({ valids, invalids }) => valids.length ? of(valids) : throwError(new GroupInvalidCouponError(invalids))));
|
|
359
371
|
}
|
|
360
372
|
getCheckoutSubscription(checkoutData) {
|
|
361
373
|
const checkoutId = cookie.get('checkoutSubscriptionId');
|
|
@@ -374,6 +386,17 @@ class CheckoutSubscriptionService {
|
|
|
374
386
|
cookie.remove('checkoutSubscriptionId');
|
|
375
387
|
return of();
|
|
376
388
|
}
|
|
389
|
+
checkCoupon(nickname, userEmail) {
|
|
390
|
+
return this.getCheckoutSubscription().pipe(concatMap((checkout) => this.couponService.checkCoupon(nickname, userEmail, CheckoutTypes.SUBSCRIPTION).pipe(concatMap((coupons) => {
|
|
391
|
+
const couponsWithSamePlan = coupons.filter((coupon) => checkout.subscriptionPlan.name === coupon.plan);
|
|
392
|
+
const couponsWithNoPlan = coupons.filter((coupon) => !coupon.plan);
|
|
393
|
+
if (couponsWithSamePlan.length > 0)
|
|
394
|
+
return of(couponsWithSamePlan);
|
|
395
|
+
if (couponsWithNoPlan.length > 0)
|
|
396
|
+
return of(couponsWithNoPlan);
|
|
397
|
+
throw new Error(`Coupon subscription plan is invalid.`);
|
|
398
|
+
}), concatMap((coupons) => { var _a; return !!((_a = checkout.user) === null || _a === void 0 ? void 0 : _a.email) ? this.checkCouponsWithCheckout(coupons, checkout) : of(coupons); }), map((validatedCoupons) => validatedCoupons.shift()))));
|
|
399
|
+
}
|
|
377
400
|
}
|
|
378
401
|
CheckoutSubscriptionService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CheckoutSubscriptionService, deps: [{ token: 'CheckoutSubscriptionRepository' }, { token: 'SubscriptionRepository' }, { token: CouponService }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
379
402
|
CheckoutSubscriptionService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "12.2.12", ngImport: i0, type: CheckoutSubscriptionService });
|
|
@@ -685,10 +708,10 @@ AngularFirestoreModule.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0",
|
|
|
685
708
|
},
|
|
686
709
|
{
|
|
687
710
|
provide: 'CategoryRepository',
|
|
688
|
-
useFactory: (firestore
|
|
711
|
+
useFactory: (firestore) => {
|
|
689
712
|
return new CategoryFirestoreRepository(firestore.firestore);
|
|
690
713
|
},
|
|
691
|
-
deps: [AngularFirestore
|
|
714
|
+
deps: [AngularFirestore],
|
|
692
715
|
},
|
|
693
716
|
{
|
|
694
717
|
provide: 'CheckoutRepository',
|
|
@@ -845,10 +868,10 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "12.2.12", ngImpo
|
|
|
845
868
|
},
|
|
846
869
|
{
|
|
847
870
|
provide: 'CategoryRepository',
|
|
848
|
-
useFactory: (firestore
|
|
871
|
+
useFactory: (firestore) => {
|
|
849
872
|
return new CategoryFirestoreRepository(firestore.firestore);
|
|
850
873
|
},
|
|
851
|
-
deps: [AngularFirestore
|
|
874
|
+
deps: [AngularFirestore],
|
|
852
875
|
},
|
|
853
876
|
{
|
|
854
877
|
provide: 'CheckoutRepository',
|