@cloudcommerce/app-loyalty-points 0.27.0 → 0.28.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,4 +1,4 @@
1
1
 
2
- > @cloudcommerce/app-loyalty-points@0.26.7 build /home/leo/code/ecomplus/cloud-commerce/packages/apps/loyalty-points
2
+ > @cloudcommerce/app-loyalty-points@0.27.0 build /home/leo/code/ecomplus/cloud-commerce/packages/apps/loyalty-points
3
3
  > bash ../../../scripts/build-lib.sh
4
4
 
@@ -0,0 +1,2 @@
1
+ declare const addPoints: () => Promise<void>;
2
+ export default addPoints;
@@ -0,0 +1,98 @@
1
+ import logger from 'firebase-functions/logger';
2
+ import { getFirestore } from 'firebase-admin/firestore';
3
+ import api from '@cloudcommerce/api';
4
+
5
+ const addPoints = async () => {
6
+ const d = new Date();
7
+ // double checking paid orders after 5 days
8
+ d.setDate(d.getDate() - 5);
9
+ const db = getFirestore();
10
+ const snapshot = await db.collection('pointsToAdd')
11
+ .where('queuedAt', '<=', d)
12
+ .orderBy('queuedAt')
13
+ .get();
14
+ const { docs } = snapshot;
15
+ logger.info(`${docs.length} points to add`);
16
+ for (let i = 0; i < docs.length; i++) {
17
+ const { customerId, pointEntries } = docs[i].data();
18
+ const orderId = docs[i].ref.id;
19
+ let order;
20
+ try {
21
+ // eslint-disable-next-line no-await-in-loop
22
+ order = (await api.get(`orders/${orderId}`)).data;
23
+ } catch (error) {
24
+ const status = error.response?.status;
25
+ if (status > 400 && status < 500) {
26
+ logger.warn(`failed reading order ${orderId}`, {
27
+ status,
28
+ response: error.response?.data,
29
+ });
30
+ } else {
31
+ throw error;
32
+ }
33
+ }
34
+ if (order && Array.isArray(pointEntries) && pointEntries.length) {
35
+ const currentStatus = order.financial_status && order.financial_status.current;
36
+ if (currentStatus === 'paid') {
37
+ const tryAddPoints = (data) => {
38
+ logger.info(`POST ${JSON.stringify(data)} ${customerId}`);
39
+ return api.post(`customers/${customerId}/loyalty_points_entries`, data);
40
+ };
41
+ const pointsEndpoint = `/customers/${customerId}/loyalty_points_entries`;
42
+ for (let ii = 0; ii < pointEntries.length; ii++) {
43
+ const pointsEntry = pointEntries[ii];
44
+ try {
45
+ // eslint-disable-next-line no-await-in-loop
46
+ await tryAddPoints(pointsEntry);
47
+ } catch (err) {
48
+ const status = err.response?.status;
49
+ if (status === 403) {
50
+ // delete older points entry and retry
51
+ const findUrl = `${pointsEndpoint}`
52
+ + `?valid_thru<=${(new Date().toISOString())}&sort=active_points&limit=1`;
53
+ try {
54
+ // eslint-disable-next-line no-await-in-loop
55
+ await api.get(findUrl)
56
+ .then(({ data }) => {
57
+ const pointsList = data.result;
58
+ if (pointsList.length) {
59
+ const endpoint = `${pointsEndpoint}/${pointsList[0]._id}`;
60
+ return api.delete(endpoint)
61
+ .then(() => {
62
+ return tryAddPoints(pointsEntry);
63
+ });
64
+ }
65
+ return null;
66
+ });
67
+ } catch (error) {
68
+ logger.warn(`failed cleaning/adding points retry to ${orderId}`, {
69
+ customerId,
70
+ pointsEntry,
71
+ url: error.config?.url,
72
+ method: error.config?.method,
73
+ status: error.response?.status,
74
+ response: error.response?.data,
75
+ });
76
+ }
77
+ } else if (status > 400 && status < 500) {
78
+ logger.warn(`failed adding points to ${orderId}`, {
79
+ customerId,
80
+ pointsEndpoint,
81
+ pointsEntry,
82
+ status,
83
+ response: err.response.data,
84
+ });
85
+ } else {
86
+ throw err;
87
+ }
88
+ }
89
+ }
90
+ }
91
+ }
92
+ // eslint-disable-next-line no-await-in-loop
93
+ await docs[i].ref.delete();
94
+ }
95
+ };
96
+
97
+ export default addPoints;
98
+ // # sourceMappingURL=cron-add-points.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cron-add-points.js","sourceRoot":"","sources":["../../src/functions-lib/cron-add-points.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  import api from '@cloudcommerce/api';
2
- import { getFirestore } from 'firebase-admin/firestore';
2
+ import { getFirestore, Timestamp } from 'firebase-admin/firestore';
3
3
  import logger from 'firebase-functions/logger';
4
+ import ecomUtils from '@ecomplus/utils';
4
5
  import getProgramId from './get-program-id.js';
5
6
 
6
7
  const ECHO_SUCCESS = 'SUCCESS';
@@ -79,32 +80,67 @@ const handleLoyaltyPointsEvent = async (order, programRules) => {
79
80
  if (pointsList) {
80
81
  const hasEarnedPoints = haveEarnedPoints(pointsList, orderId);
81
82
  if (isPaid && !hasEarnedPoints) {
82
- for (let i = 0; i < programRules.length; i++) {
83
- const rule = programRules[i];
84
- if (amount.subtotal) {
85
- if (!rule.min_subtotal_to_earn || rule.min_subtotal_to_earn <= amount.subtotal) {
83
+ const docRef = getFirestore().doc(`pointsToAdd/${orderId}`);
84
+ const docSnapshot = await docRef.get();
85
+ if (!docSnapshot.exists) {
86
+ const pointEntries = [];
87
+ for (let i = 0; i < programRules.length; i++) {
88
+ const rule = programRules[i];
89
+ if (rule.earn_percentage === 0) {
90
+ continue;
91
+ }
92
+ if (!rule.min_subtotal_to_earn
93
+ || (amount?.subtotal && rule.min_subtotal_to_earn <= amount.subtotal)) {
94
+ let subtotal = amount.subtotal;
95
+ if (Array.isArray(rule.category_ids) && rule.category_ids.length) {
96
+ if (!order.items || !order.items.length) {
97
+ continue;
98
+ }
99
+ // eslint-disable-next-line no-await-in-loop
100
+ const { data: { result } } = await api.get('search/v1', {
101
+ limit: order.items.length,
102
+ params: {
103
+ _id: order.items.map((item) => item.product_id),
104
+ 'categories._id': rule.category_ids,
105
+ },
106
+ });
107
+ // eslint-disable-next-line no-await-in-loop
108
+ order.items.forEach((item) => {
109
+ if (!result.find(({ _id }) => _id === item.product_id)) {
110
+ subtotal -= (ecomUtils.price(item) * item.quantity);
111
+ }
112
+ });
113
+ }
86
114
  const pointsValue = ((rule.earn_percentage || 1) / 100)
87
- * (amount.subtotal - (amount.discount || 0));
88
- let validThru;
89
- if (rule.expiration_days > 0) {
90
- const d = new Date();
91
- d.setDate(d.getDate() + rule.expiration_days);
92
- validThru = d.toISOString();
115
+ * (subtotal - (amount.discount || 0));
116
+ if (pointsValue > 0) {
117
+ let validThru;
118
+ if (rule.expiration_days > 0) {
119
+ const d = new Date();
120
+ d.setDate(d.getDate() + 2 + rule.expiration_days);
121
+ validThru = d.toISOString();
122
+ }
123
+ const data = {
124
+ name: rule.name,
125
+ program_id: getProgramId(rule, i),
126
+ earned_points: pointsValue,
127
+ active_points: pointsValue,
128
+ ratio: rule.ratio || 1,
129
+ order_id: orderId,
130
+ };
131
+ if (validThru) {
132
+ Object.assign(data, { valid_thru: validThru });
133
+ }
134
+ pointEntries.push(data);
93
135
  }
94
- const data = {
95
- name: rule.name,
96
- program_id: getProgramId(rule, i),
97
- earned_points: pointsValue,
98
- active_points: pointsValue,
99
- ratio: rule.ratio || 1,
100
- valid_thru: validThru,
101
- order_id: orderId,
102
- }; // TODO: set the correct type
103
- // eslint-disable-next-line no-await-in-loop
104
- await api.post(`customers/${customerId}/loyalty_points_entries`, data);
105
- return responsePubSub(ECHO_SUCCESS);
106
136
  }
107
137
  }
138
+ await docRef.set({
139
+ customerId,
140
+ pointEntries,
141
+ queuedAt: Timestamp.now(),
142
+ });
143
+ return responsePubSub(ECHO_SUCCESS);
108
144
  }
109
145
  }
110
146
  if (isCancelled && hasEarnedPoints) {
@@ -1 +1 @@
1
- {"version":3,"file":"handle-loyalty-points-event.js","sourceRoot":"","sources":["../../src/functions-lib/handle-loyalty-points-event.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"handle-loyalty-points-event.js","sourceRoot":"","sources":["../../src/functions-lib/handle-loyalty-points-event.ts"],"names":[],"mappings":"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"}
@@ -61,7 +61,7 @@ export default async (appData) => {
61
61
  if (pointsApplied && Array.isArray(programsRules) && programsRules.length) {
62
62
  // for (const programId in pointsApplied) {
63
63
  Object.keys(pointsApplied).forEach((programId) => {
64
- const pointsValue = pointsApplied[programId];
64
+ let pointsValue = pointsApplied[programId];
65
65
  if (pointsValue > 0) {
66
66
  const programRule = programsRules.find((programRuleFound, index) => {
67
67
  if (programRuleFound) {
@@ -71,14 +71,19 @@ export default async (appData) => {
71
71
  return false;
72
72
  });
73
73
  if (programRule) {
74
+ let maxPoints = programRule.max_points;
74
75
  const ratio = programRule.ratio || 1;
76
+ if (!maxPoints && programRule.max_amount_percentage && params.amount) {
77
+ maxPoints = Math.round(((programRule.max_amount_percentage * params.amount.total) / 100) / ratio);
78
+ }
79
+ if (maxPoints < pointsValue) {
80
+ pointsValue = maxPoints;
81
+ }
75
82
  transaction.loyalty_points = {
76
83
  name: programRule.name,
77
84
  program_id: programRule.program_id,
78
85
  ratio,
79
- points_value: programRule.max_points < pointsValue
80
- ? programRule.max_points
81
- : pointsValue,
86
+ points_value: pointsValue,
82
87
  };
83
88
  transaction.amount = pointsValue * ratio;
84
89
  }
@@ -1 +1 @@
1
- {"version":3,"file":"loyalty-create-transaction.js","sourceRoot":"","sources":["../src/loyalty-create-transaction.ts"],"names":[],"mappings":"AAOA,OAAO,GAAG,MAAM,oBAAoB,CAAC;AACrC,OAAO,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AACxD,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAK1D,MAAM,aAAa,GAAG,YAAY,EAAE,CAAC,UAAU,CAAC,cAAc,CAAC,CAAC;AAEhE,MAAM,uBAAuB,GAAG,CAAC,OAAmB,EAAE,EAAE;IACtD,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,KAAK,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,UAAU,OAAO,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;QAExD,iFAAiF;QACjF,MAAM,EAAE,YAAY,EAAE,GAAG,KAAK,CAAC;QAC/B,IAAI,YAAY,EAAE;YAChB,MAAM,WAAW,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,EAAE;gBACzD,OAAO,gBAAgB,CAAC,cAAc,CAAC,IAAI,KAAK,gBAAgB,CAAC;YACnE,CAAC,CAAC,CAAC;YACH,IAAI,WAAW,EAAE;gBACf,MAAM,kBAAkB,GAAG;oBACzB,cAAc,EAAE,WAAW,CAAC,GAAG;oBAC/B,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;oBACnC,MAAM,EAAE,MAAM;oBACd,iBAAiB,EAAE,IAAI;iBACjB,CAAC,CAAC,+CAA+C;gBACzD,MAAM,GAAG,CAAC,IAAI,CAAC,UAAU,OAAO,mBAAmB,EAAE,kBAAkB,CAAC,CAAC;aAC1E;SACF;IACH,CAAC,EAAE,GAAG,CAAC,CAAC;AACV,CAAC,CAAC;AAEF,MAAM,mBAAmB,GAAG,CAC1B,QAAa,EAAE,4CAA4C;AAC3D,IAA0B,EAC1B,OAAmB,EACnB,iBAAuC,EACvC,OAAO,GAAG,GAAG,EACb,aAAa,GAAG,KAAK,EACrB,EAAE;IACF,UAAU,CAAC,KAAK,IAAI,EAAE;QACpB,MAAM,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAChC,mEAAmE;QACnE,MAAM,CAAC,GAAG,CAAC,0BAA0B,OAAO,IAAI,QAAQ,OAAO,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACvF,IAAI,aAAa,EAAE;YACjB,uBAAuB,CAAC,OAAO,CAAC,CAAC;YACjC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,EAAE,iBAAiB,EAAE,CAAC,CAAC;SACvD;QACD,MAAM;IACR,CAAC,EAAE,OAAO,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,eAAe,KAAK,EAAE,OAAsB,EAAE,EAAE;IAC9C,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC;IACzC,MAAM,MAAM,GAAG,OAAO,CAAC,MAAiC,CAAC;IACzD,yBAAyB;IACzB,MAAM,SAAS,GAAG,EAAE,GAAG,WAAW,CAAC,IAAI,EAAE,GAAG,WAAW,CAAC,WAAW,EAAE,CAAC;IACtE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAEhC,+CAA+C;IAC/C,MAAM,WAAW,GAA6C;QAC5D,MAAM,EAAE,MAAM,CAAC,KAAK;KACrB,CAAC;IAEF,IAAI,MAAM,CAAC,cAAc,CAAC,IAAI,KAAK,gBAAgB,EAAE;QACnD,MAAM,aAAa,GAAG,MAAM,CAAC,sBAAsB,CAAC;QACpD,MAAM,aAAa,GAAG,SAAS,CAAC,cAAc,CAAC;QAC/C,IAAI,aAAa,IAAI,KAAK,CAAC,OAAO,CAAC,aAAa,CAAC,IAAI,aAAa,CAAC,MAAM,EAAE;YACzE,2CAA2C;YAC3C,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,OAAO,CAAC,CAAC,SAAS,EAAE,EAAE;gBAC/C,MAAM,WAAW,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;gBAC7C,IAAI,WAAW,GAAG,CAAC,EAAE;oBACnB,MAAM,WAAW,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,gBAAgB,EAAE,KAAK,EAAE,EAAE;wBACjE,IAAI,gBAAgB,EAAE;4BACpB,gBAAgB,CAAC,UAAU,GAAG,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;4BACpE,OAAO,SAAS,KAAK,gBAAgB,CAAC,UAAU,CAAC;yBAClD;wBACD,OAAO,KAAK,CAAC;oBACf,CAAC,CAAC,CAAC;oBAEH,IAAI,WAAW,EAAE;wBACf,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;wBACrC,WAAW,CAAC,cAAc,GAAG;4BAC3B,IAAI,EAAE,WAAW,CAAC,IAAI;4BACtB,UAAU,EAAE,WAAW,CAAC,UAAU;4BAClC,KAAK;4BACL,YAAY,EAAE,WAAW,CAAC,UAAU,GAAG,WAAW;gCAChD,CAAC,CAAC,WAAW,CAAC,UAAU;gCACxB,CAAC,CAAC,WAAW;yBAChB,CAAC;wBACF,WAAW,CAAC,MAAM,GAAG,WAAW,GAAG,KAAK,CAAC;qBAC1C;iBACF;YACH,CAAC,CAAC,CAAC;SACJ;KACF;IAED,IAAI,WAAW,CAAC,MAAM,EAAE;QACtB,MAAM,aAAa,GAAG,WAAW,CAAC,cAAc,CAAC;QACjD,MAAM,UAAU,GAAG,MAAM,CAAC,KAAK,CAAC,WAAW,CAAC;QAC5C,MAAM,OAAO,GAAG,MAAM,CAAC,QAAsB,CAAC;QAC9C,MAAM,iBAAiB,GAAwB,EAAE,CAAC;QAClD,IAAI;YACF,MAAM,QAAQ,GAAG,CAAC,MAAM,GAAG,CAAC,GAAG,CAAC,aAAa,UAAU,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACjE,qEAAqE;YACrE,8BAA8B;YAC9B,MAAM,aAAa,GAAG,QAAQ,CAAC,sBAAsB,CAAC;YACtD,IAAI,eAAe,GAAG,aAAa,EAAE,YAAY,CAAC;YAElD,IAAI,aAAa,IAAI,eAAe,EAAE;gBACpC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE;oBAC1B,IAAI,KAAK,GAAG,CAAC,CAAC;oBACd,IAAI,CAAC,CAAC,UAAU,IAAI,CAAC,CAAC,UAAU,EAAE;wBAChC,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAAE;4BAC/B,KAAK,GAAG,CAAC,CAAC,CAAC;yBACZ;6BAAM,IAAI,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,EAAE;4BACtC,KAAK,GAAG,CAAC,CAAC;yBACX;qBACF;oBACD,OAAO,KAAK,CAAC;gBACf,CAAC,CAAC,CAAC;gBAEH,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,aAAa,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;oBAC7C,IAAI,eAAe,IAAI,CAAC,EAAE;wBACxB,MAAM;qBACP;oBACD,MAAM,WAAW,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;oBACrC,IAAI,WAAW,CAAC,UAAU,KAAK,aAAa,EAAE,UAAU,EAAE;wBACxD,MAAM,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC;wBACzC,MAAM,YAAY,GAAG,WAAW,CAAC,aAAa,CAAC;wBAC/C,IAAI,YAAY,GAAG,CAAC,IAAI,CAAC,CAAC,SAAS,IAAI,IAAI,IAAI,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC,EAAE;4BACnF,MAAM,UAAU,GAAG,YAAY,GAAG,eAAe,CAAC;4BAClD,IAAI,UAAU,GAAG,CAAC,IAAI,UAAU,GAAG,IAAI,EAAE;gCACvC,eAAe,GAAG,YAAY,CAAC;6BAChC;4BACD,IAAI,eAAe,IAAI,YAAY,EAAE;gCACnC,eAAe,IAAI,YAAY,CAAC;gCAChC,WAAW,CAAC,aAAa,GAAG,CAAC,CAAC;gCAC9B,IAAI,eAAe,GAAG,IAAI,EAAE;oCAC1B,eAAe,GAAG,CAAC,CAAC;iCACrB;6BACF;iCAAM;gCACL,WAAW,CAAC,aAAa,IAAI,eAAe,CAAC;gCAC7C,eAAe,GAAG,CAAC,CAAC;6BACrB;4BACD,iBAAiB,CAAC,IAAI,CAAC;gCACrB,GAAG,WAAW;gCACd,sBAAsB,EAAE,YAAY;6BACrC,CAAC,CAAC;yBACJ;qBACF;iBACF;gBAED,IAAI,eAAe,IAAI,CAAC,EAAE;oBACxB,IAAI,iBAAiB,CAAC,MAAM,IAAI,CAAC,EAAE;wBACjC,iBAAiB,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,CAAC,EAAE,EAAE;4BAC3C;;;8BAGE;4BACF,MAAM,QAAQ,GAAG,aAAa,UAAU,2BAA2B,CAAC,EAAE,CAAC;4BACvE,MAAM,IAAI,GAAG;gCACX,aAAa,EAAE,WAAW,CAAC,aAAa;6BACzC,CAAC;4BACF,mBAAmB,CACjB,QAAQ,EACR,IAAI,EACJ,OAAO,EACP,iBAAiB,EACjB,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,GAAG,EACb,CAAC,GAAG,CAAC,KAAK,iBAAiB,CAAC,MAAM,CACnC,CAAC;wBACJ,CAAC,CAAC,CAAC;qBACJ;yBAAM;wBACL,MAAM,QAAQ,GAAG,aAAa,UAAU,EAAE,CAAC;wBAC3C,MAAM,IAAI,GAAG;4BACX,sBAAsB,EAAE,aAAa;yBACtC,CAAC;wBACF,mBAAmB,CAAC,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,iBAAiB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;qBAC5E;iBACF;aACF;YAED,WAAW,CAAC,MAAM,GAAG;gBACnB,OAAO,EAAE,eAAe,IAAI,eAAe,IAAI,CAAC,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,cAAc;aACjF,CAAC;YAEF,OAAO;gBACL,MAAM,EAAE,GAAG;gBACX,mBAAmB,EAAE,KAAK;gBAC1B,WAAW;aACZ,CAAC;SACH;QAAC,OAAO,KAAU,EAAE;YACnB,6BAA6B;YAC7B,MAAM,OAAO,GAAG,wBAAwB,CAAC;YACzC,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;YACxB,MAAM,GAAG,GAAG;gBACV,OAAO,EAAE,2BAA2B,OAAO,MAAM,OAAO,OAAO,OAAO,EAAE;gBACxE,OAAO,EAAE,EAAE;gBACX,MAAM,EAAE,CAAC;gBACT,QAAQ,EAAE,EAAE;gBACZ,iBAAiB;aAClB,CAAC;YAEF,IAAI,KAAK,CAAC,QAAQ,EAAE;gBAClB,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;gBACxC,GAAG,CAAC,MAAM,GAAG,MAAM,CAAC;gBACpB,IAAI,MAAM,KAAK,GAAG,IAAI,MAAM,KAAK,GAAG,EAAE;oBACpC,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,EAAE;wBACpC,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;qBACrC;yBAAM;wBACL,GAAG,CAAC,QAAQ,GAAG,IAAI,CAAC;qBACrB;iBACF;gBACD,IAAI,IAAI,IAAI,IAAI,CAAC,YAAY,EAAE;oBAC7B,OAAO,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC;iBACpE;aACF;YAED,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YAElB,OAAO;gBACL,KAAK,EAAE,OAAO;gBACd,OAAO;aACR,CAAC;SACH;KACF;IAED,OAAO;QACL,MAAM,EAAE,GAAG;QACX,mBAAmB,EAAE,KAAK;QAC1B,WAAW;KACZ,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"loyalty-create-transaction.js","sourceRoot":"","sources":["../src/loyalty-create-transaction.ts"],"names":[],"mappings":"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"}
@@ -26,11 +26,16 @@ export default (data) => {
26
26
  if (Array.isArray(appData.programs_rules)) {
27
27
  const pointsPrograms = {};
28
28
  appData.programs_rules.forEach((programRule, index) => {
29
+ let maxPoints = programRule.max_points;
30
+ const ratio = programRule.ratio || 1;
31
+ if (!maxPoints && programRule.max_amount_percentage && params.amount) {
32
+ maxPoints = Math.round(((programRule.max_amount_percentage * params.amount.total) / 100) / ratio);
33
+ }
29
34
  const programId = getProgramId(programRule, index);
30
35
  pointsPrograms[programId] = {
31
36
  name: programRule.name,
32
- ratio: programRule.ratio || 1,
33
- max_points: programRule.max_points,
37
+ ratio,
38
+ max_points: maxPoints,
34
39
  min_subtotal_to_earn: programRule.min_subtotal_to_earn,
35
40
  earn_percentage: programRule.earn_percentage,
36
41
  };
@@ -1 +1 @@
1
- {"version":3,"file":"loyalty-list-payments.js","sourceRoot":"","sources":["../src/loyalty-list-payments.ts"],"names":[],"mappings":"AAKA,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAE1D,eAAe,CAAC,IAAmB,EAAE,EAAE;IACrC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;IAEjD,MAAM,OAAO,GAAG;QACd,GAAG,WAAW,CAAC,IAAI;QACnB,GAAG,WAAW,CAAC,WAAW;KAC3B,CAAC;IAEF,0BAA0B;IAC1B,uCAAuC;IACvC,MAAM,QAAQ,GAAyB;QACrC,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;QACnD,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,gBAAgB,CAAC;IAErB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,SAAS;QACf,cAAc,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,KAAK;SACZ;QACD,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QACzC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;YACpD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACnD,cAAc,CAAC,SAAS,CAAC,GAAG;gBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,KAAK,EAAE,WAAW,CAAC,KAAK,IAAI,CAAC;gBAC7B,UAAU,EAAE,WAAW,CAAC,UAAU;gBAClC,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;gBACtD,eAAe,EAAE,WAAW,CAAC,eAAe;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;YACtC,QAAQ,CAAC,uBAAuB,GAAG,cAAc,CAAC;SACnD;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
1
+ {"version":3,"file":"loyalty-list-payments.js","sourceRoot":"","sources":["../src/loyalty-list-payments.ts"],"names":[],"mappings":"AAKA,OAAO,YAAY,MAAM,gCAAgC,CAAC;AAE1D,eAAe,CAAC,IAAmB,EAAE,EAAE;IACrC,MAAM,EAAE,WAAW,EAAE,GAAG,IAAI,CAAC;IAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,MAA4B,CAAC;IAEjD,MAAM,OAAO,GAAG;QACd,GAAG,WAAW,CAAC,IAAI;QACnB,GAAG,WAAW,CAAC,WAAW;KAC3B,CAAC;IAEF,0BAA0B;IAC1B,uCAAuC;IACvC,MAAM,QAAQ,GAAyB;QACrC,gBAAgB,EAAE,EAAE;KACrB,CAAC;IAEF,MAAM,KAAK,GAAG,MAAM,CAAC,IAAI,KAAK,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI;QACnD,CAAC,CAAC,sBAAsB;QACxB,CAAC,CAAC,gBAAgB,CAAC;IAErB,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;QAC7B,IAAI,EAAE,SAAS;QACf,cAAc,EAAE;YACd,IAAI,EAAE,gBAAgB;YACtB,IAAI,EAAE,KAAK;SACZ;QACD,KAAK;KACN,CAAC,CAAC;IAEH,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC,EAAE;QACzC,MAAM,cAAc,GAAG,EAAE,CAAC;QAC1B,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,WAAW,EAAE,KAAK,EAAE,EAAE;YACpD,IAAI,SAAS,GAAG,WAAW,CAAC,UAAU,CAAC;YACvC,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,IAAI,CAAC,CAAC;YACrC,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,qBAAqB,IAAI,MAAM,CAAC,MAAM,EAAE;gBACpE,SAAS,GAAG,IAAI,CAAC,KAAK,CACpB,CAAC,CAAC,WAAW,CAAC,qBAAqB,GAAG,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,KAAK,CAC1E,CAAC;aACH;YACD,MAAM,SAAS,GAAG,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAC;YACnD,cAAc,CAAC,SAAS,CAAC,GAAG;gBAC1B,IAAI,EAAE,WAAW,CAAC,IAAI;gBACtB,KAAK;gBACL,UAAU,EAAE,SAAS;gBACrB,oBAAoB,EAAE,WAAW,CAAC,oBAAoB;gBACtD,eAAe,EAAE,WAAW,CAAC,eAAe;aAC7C,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,IAAI,MAAM,CAAC,IAAI,CAAC,cAAc,CAAC,CAAC,MAAM,EAAE;YACtC,QAAQ,CAAC,uBAAuB,GAAG,cAAc,CAAC;SACnD;KACF;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC,CAAC"}
@@ -1,4 +1,6 @@
1
1
  import '@cloudcommerce/firebase/lib/init';
2
+ import functions from 'firebase-functions/v1';
2
3
  export declare const loyaltypoints: {
3
- onStoreEvent: any;
4
+ onStoreEvent: functions.CloudFunction<functions.pubsub.Message>;
5
+ cronAddPoints: functions.CloudFunction<unknown>;
4
6
  };
@@ -2,8 +2,12 @@
2
2
  import '@cloudcommerce/firebase/lib/init';
3
3
  import { createAppEventsFunction } from '@cloudcommerce/firebase/lib/helpers/pubsub';
4
4
  import logger from 'firebase-functions/logger';
5
+ import config from '@cloudcommerce/firebase/lib/config';
6
+ import functions from 'firebase-functions/v1';
5
7
  import handleLoyaltyPointsEvent from './functions-lib/handle-loyalty-points-event.js';
8
+ import addPoints from './functions-lib/cron-add-points.js';
6
9
 
10
+ const { httpsFunctionOptions: { region } } = config.get();
7
11
  const handleApiEvent = async ({
8
12
  evName, apiEvent, apiDoc, app,
9
13
  }) => {
@@ -24,5 +28,10 @@ const handleApiEvent = async ({
24
28
 
25
29
  export const loyaltypoints = {
26
30
  onStoreEvent: createAppEventsFunction('loyaltyPoints', handleApiEvent),
31
+ cronAddPoints: functions.region(region).pubsub
32
+ .schedule('28 * * * *')
33
+ .onRun(() => {
34
+ return addPoints;
35
+ }),
27
36
  };
28
37
  // # sourceMappingURL=loyalty-points-events.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"loyalty-points-events.js","sourceRoot":"","sources":["../src/loyalty-points-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,wBAAwB,MAAM,6CAA6C,CAAC;AAEnF,MAAM,cAAc,GAAoB,KAAK,EAAE,EAC7C,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAE5C,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WAChC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;WACzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EACzD;QACA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IACD,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC;IAEnD,OAAO,wBAAwB,CAAC,MAAgB,EAAE,YAAY,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,uBAAuB,CACnC,eAAe,EACf,cAAc,CACR;CACT,CAAC"}
1
+ {"version":3,"file":"loyalty-points-events.js","sourceRoot":"","sources":["../src/loyalty-points-events.ts"],"names":[],"mappings":"AAAA,iDAAiD;AACjD,OAAO,kCAAkC,CAAC;AAE1C,OAAO,EACL,uBAAuB,GAExB,MAAM,4CAA4C,CAAC;AACpD,OAAO,MAAM,MAAM,2BAA2B,CAAC;AAC/C,OAAO,MAAM,MAAM,oCAAoC,CAAC;AACxD,OAAO,SAAS,MAAM,uBAAuB,CAAC;AAC9C,OAAO,wBAAwB,MAAM,6CAA6C,CAAC;AACnF,OAAO,SAAS,MAAM,iCAAiC,CAAC;AAExD,MAAM,EAAE,oBAAoB,EAAE,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,CAAC,GAAG,EAAE,CAAC;AAE1D,MAAM,cAAc,GAAoB,KAAK,EAAE,EAC7C,MAAM,EACN,QAAQ,EACR,MAAM,EACN,GAAG,GACJ,EAAE,EAAE;IACH,MAAM,UAAU,GAAG,QAAQ,CAAC,WAAW,CAAC;IACxC,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,aAAa,EAAE,QAAQ,CAAC,MAAM,CAAC,CAAC;IAC/D,MAAM,GAAG,GAAG,GAAG,MAAM,IAAI,UAAU,EAAE,CAAC;IACtC,MAAM,OAAO,GAAG,EAAE,GAAG,GAAG,CAAC,IAAI,EAAE,GAAG,GAAG,CAAC,WAAW,EAAE,CAAC;IACpD,MAAM,YAAY,GAAG,OAAO,CAAC,cAAc,CAAC;IAE5C,IACE,CAAC,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC;WAChC,OAAO,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;WACzC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,EACzD;QACA,MAAM,CAAC,IAAI,CAAC,KAAK,EAAE,GAAG,EAAE,kBAAkB,CAAC,CAAC;QAC5C,OAAO,IAAI,CAAC;KACb;IACD,MAAM,CAAC,IAAI,CAAC,aAAa,UAAU,KAAK,MAAM,GAAG,CAAC,CAAC;IAEnD,OAAO,wBAAwB,CAAC,MAAgB,EAAE,YAAY,CAAC,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,YAAY,EAAE,uBAAuB,CACnC,eAAe,EACf,cAAc,CACf;IAED,aAAa,EAAE,SAAS,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM;SAC3C,QAAQ,CAAC,YAAY,CAAC;SACtB,KAAK,CAAC,GAAG,EAAE;QACV,OAAO,SAAS,CAAC;IACnB,CAAC,CAAC;CACL,CAAC"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@cloudcommerce/app-loyalty-points",
3
3
  "type": "module",
4
- "version": "0.27.0",
4
+ "version": "0.28.0",
5
5
  "description": "E-Com Plus Cloud Commerce app to handle simple loyalty points programs",
6
6
  "main": "lib/loyalty-points.js",
7
7
  "exports": {
@@ -20,12 +20,13 @@
20
20
  },
21
21
  "homepage": "https://github.com/ecomplus/cloud-commerce/tree/main/packages/apps/loyalty-points#readme",
22
22
  "dependencies": {
23
- "@cloudcommerce/api": "0.27.0",
24
- "@cloudcommerce/firebase": "0.27.0"
23
+ "@ecomplus/utils": "1.5.0-rc.5",
24
+ "@cloudcommerce/firebase": "0.28.0",
25
+ "@cloudcommerce/api": "0.28.0"
25
26
  },
26
27
  "devDependencies": {
27
- "@cloudcommerce/test-base": "0.27.0",
28
- "@cloudcommerce/types": "0.27.0"
28
+ "@cloudcommerce/test-base": "0.28.0",
29
+ "@cloudcommerce/types": "0.28.0"
29
30
  },
30
31
  "scripts": {
31
32
  "build": "bash ../../../scripts/build-lib.sh",
@@ -0,0 +1,104 @@
1
+ import type { CustomerSet, Orders } from '@cloudcommerce/types';
2
+ import logger from 'firebase-functions/logger';
3
+ import { getFirestore } from 'firebase-admin/firestore';
4
+ import api from '@cloudcommerce/api';
5
+ import { Endpoint } from '@cloudcommerce/api/types';
6
+
7
+ const addPoints = async () => {
8
+ const d = new Date();
9
+ // double checking paid orders after 5 days
10
+ d.setDate(d.getDate() - 5);
11
+ const db = getFirestore();
12
+ const snapshot = await db.collection('pointsToAdd')
13
+ .where('queuedAt', '<=', d)
14
+ .orderBy('queuedAt')
15
+ .get();
16
+ const { docs } = snapshot;
17
+ logger.info(`${docs.length} points to add`);
18
+
19
+ for (let i = 0; i < docs.length; i++) {
20
+ const { customerId, pointEntries } = docs[i].data();
21
+ const orderId = docs[i].ref.id;
22
+ let order: Orders | undefined;
23
+ try {
24
+ // eslint-disable-next-line no-await-in-loop
25
+ order = (await api.get(`orders/${orderId}`)).data;
26
+ } catch (error: any) {
27
+ const status = error.response?.status;
28
+ if (status > 400 && status < 500) {
29
+ logger.warn(`failed reading order ${orderId}`, {
30
+ status,
31
+ response: error.response?.data,
32
+ });
33
+ } else {
34
+ throw error;
35
+ }
36
+ }
37
+
38
+ if (order && Array.isArray(pointEntries) && pointEntries.length) {
39
+ const currentStatus = order.financial_status && order.financial_status.current;
40
+ if (currentStatus === 'paid') {
41
+ const tryAddPoints = (data: CustomerSet) => {
42
+ logger.info(`POST ${JSON.stringify(data)} ${customerId}`);
43
+ return api.post(`customers/${customerId}/loyalty_points_entries`, data);
44
+ };
45
+
46
+ const pointsEndpoint = `/customers/${customerId}/loyalty_points_entries`;
47
+
48
+ for (let ii = 0; ii < pointEntries.length; ii++) {
49
+ const pointsEntry = pointEntries[ii];
50
+ try {
51
+ // eslint-disable-next-line no-await-in-loop
52
+ await tryAddPoints(pointsEntry);
53
+ } catch (err: any) {
54
+ const status = err.response?.status;
55
+ if (status === 403) {
56
+ // delete older points entry and retry
57
+
58
+ const findUrl = `${pointsEndpoint}`
59
+ + `?valid_thru<=${(new Date().toISOString())}&sort=active_points&limit=1`;
60
+ try {
61
+ // eslint-disable-next-line no-await-in-loop
62
+ await api.get(findUrl as Endpoint)
63
+ .then(({ data }) => {
64
+ const pointsList = data.result;
65
+ if (pointsList.length) {
66
+ const endpoint = `${pointsEndpoint}/${pointsList[0]._id}`;
67
+ return api.delete(endpoint as Endpoint)
68
+ .then(() => {
69
+ return tryAddPoints(pointsEntry);
70
+ });
71
+ }
72
+ return null;
73
+ });
74
+ } catch (error: any) {
75
+ logger.warn(`failed cleaning/adding points retry to ${orderId}`, {
76
+ customerId,
77
+ pointsEntry,
78
+ url: error.config?.url,
79
+ method: error.config?.method,
80
+ status: error.response?.status,
81
+ response: error.response?.data,
82
+ });
83
+ }
84
+ } else if (status > 400 && status < 500) {
85
+ logger.warn(`failed adding points to ${orderId}`, {
86
+ customerId,
87
+ pointsEndpoint,
88
+ pointsEntry,
89
+ status,
90
+ response: err.response.data,
91
+ });
92
+ } else {
93
+ throw err;
94
+ }
95
+ }
96
+ }
97
+ }
98
+ }
99
+ // eslint-disable-next-line no-await-in-loop
100
+ await docs[i].ref.delete();
101
+ }
102
+ };
103
+
104
+ export default addPoints;
@@ -1,7 +1,8 @@
1
1
  import type { Orders, Customers, ResourceId } from '@cloudcommerce/types';
2
2
  import api from '@cloudcommerce/api';
3
- import { getFirestore } from 'firebase-admin/firestore';
3
+ import { getFirestore, Timestamp } from 'firebase-admin/firestore';
4
4
  import logger from 'firebase-functions/logger';
5
+ import ecomUtils from '@ecomplus/utils';
5
6
  import getProgramId from './get-program-id';
6
7
 
7
8
  const ECHO_SUCCESS = 'SUCCESS';
@@ -97,36 +98,77 @@ const handleLoyaltyPointsEvent = async (
97
98
  const hasEarnedPoints = haveEarnedPoints(pointsList, orderId);
98
99
 
99
100
  if (isPaid && !hasEarnedPoints) {
100
- for (let i = 0; i < programRules.length; i++) {
101
- const rule = programRules[i];
102
- if (amount.subtotal) {
103
- if (!rule.min_subtotal_to_earn || rule.min_subtotal_to_earn <= amount.subtotal) {
104
- const pointsValue = ((rule.earn_percentage || 1) / 100)
105
- * (amount.subtotal - (amount.discount || 0));
101
+ const docRef = getFirestore().doc(`pointsToAdd/${orderId}`);
102
+ const docSnapshot = await docRef.get();
103
+ if (!docSnapshot.exists) {
104
+ const pointEntries: any[] = [];
105
+
106
+ for (let i = 0; i < programRules.length; i++) {
107
+ const rule = programRules[i];
108
+ if (rule.earn_percentage === 0) {
109
+ continue;
110
+ }
111
+ if (
112
+ !rule.min_subtotal_to_earn
113
+ || (amount?.subtotal && rule.min_subtotal_to_earn <= amount.subtotal)
114
+ ) {
115
+ let subtotal = amount.subtotal as number;
106
116
 
107
- let validThru: string | undefined;
108
- if (rule.expiration_days > 0) {
109
- const d = new Date();
110
- d.setDate(d.getDate() + rule.expiration_days);
111
- validThru = d.toISOString();
112
- }
117
+ if (Array.isArray(rule.category_ids) && rule.category_ids.length) {
118
+ if (!order.items || !order.items.length) {
119
+ continue;
120
+ }
113
121
 
114
- const data = {
115
- name: rule.name,
116
- program_id: getProgramId(rule, i),
117
- earned_points: pointsValue,
118
- active_points: pointsValue,
119
- ratio: rule.ratio || 1,
120
- valid_thru: validThru,
121
- order_id: orderId,
122
- } as any; // TODO: set the correct type
122
+ // eslint-disable-next-line no-await-in-loop
123
+ const { data: { result } } = await api.get('search/v1', {
124
+ limit: order.items.length,
125
+ params: {
126
+ _id: order.items.map((item) => item.product_id),
127
+ 'categories._id': rule.category_ids,
128
+ },
129
+ });
123
130
 
124
- // eslint-disable-next-line no-await-in-loop
125
- await api.post(`customers/${customerId}/loyalty_points_entries`, data);
131
+ // eslint-disable-next-line no-await-in-loop
132
+ order.items.forEach((item) => {
133
+ if (!result.find(({ _id }) => _id === item.product_id)) {
134
+ subtotal -= (ecomUtils.price(item) * item.quantity);
135
+ }
136
+ });
137
+ }
126
138
 
127
- return responsePubSub(ECHO_SUCCESS);
139
+ const pointsValue = ((rule.earn_percentage || 1) / 100)
140
+ * (subtotal - (amount.discount || 0));
141
+
142
+ if (pointsValue > 0) {
143
+ let validThru: string | undefined;
144
+ if (rule.expiration_days > 0) {
145
+ const d = new Date();
146
+ d.setDate(d.getDate() + 2 + rule.expiration_days);
147
+ validThru = d.toISOString();
148
+ }
149
+ const data = {
150
+ name: rule.name,
151
+ program_id: getProgramId(rule, i),
152
+ earned_points: pointsValue,
153
+ active_points: pointsValue,
154
+ ratio: rule.ratio || 1,
155
+ order_id: orderId,
156
+ };
157
+ if (validThru) {
158
+ Object.assign(data, { valid_thru: validThru });
159
+ }
160
+ pointEntries.push(data);
161
+ }
128
162
  }
129
163
  }
164
+
165
+ await docRef.set({
166
+ customerId,
167
+ pointEntries,
168
+ queuedAt: Timestamp.now(),
169
+ });
170
+
171
+ return responsePubSub(ECHO_SUCCESS);
130
172
  }
131
173
  }
132
174
 
@@ -76,7 +76,7 @@ export default async (appData: AppModuleBody) => {
76
76
  if (pointsApplied && Array.isArray(programsRules) && programsRules.length) {
77
77
  // for (const programId in pointsApplied) {
78
78
  Object.keys(pointsApplied).forEach((programId) => {
79
- const pointsValue = pointsApplied[programId];
79
+ let pointsValue = pointsApplied[programId];
80
80
  if (pointsValue > 0) {
81
81
  const programRule = programsRules.find((programRuleFound, index) => {
82
82
  if (programRuleFound) {
@@ -87,14 +87,21 @@ export default async (appData: AppModuleBody) => {
87
87
  });
88
88
 
89
89
  if (programRule) {
90
+ let maxPoints = programRule.max_points;
90
91
  const ratio = programRule.ratio || 1;
92
+ if (!maxPoints && programRule.max_amount_percentage && params.amount) {
93
+ maxPoints = Math.round(
94
+ ((programRule.max_amount_percentage * params.amount.total) / 100) / ratio,
95
+ );
96
+ }
97
+ if (maxPoints < pointsValue) {
98
+ pointsValue = maxPoints;
99
+ }
91
100
  transaction.loyalty_points = {
92
101
  name: programRule.name,
93
102
  program_id: programRule.program_id,
94
103
  ratio,
95
- points_value: programRule.max_points < pointsValue
96
- ? programRule.max_points
97
- : pointsValue,
104
+ points_value: pointsValue,
98
105
  };
99
106
  transaction.amount = pointsValue * ratio;
100
107
  }
@@ -36,11 +36,18 @@ export default (data: AppModuleBody) => {
36
36
  if (Array.isArray(appData.programs_rules)) {
37
37
  const pointsPrograms = {};
38
38
  appData.programs_rules.forEach((programRule, index) => {
39
+ let maxPoints = programRule.max_points;
40
+ const ratio = programRule.ratio || 1;
41
+ if (!maxPoints && programRule.max_amount_percentage && params.amount) {
42
+ maxPoints = Math.round(
43
+ ((programRule.max_amount_percentage * params.amount.total) / 100) / ratio,
44
+ );
45
+ }
39
46
  const programId = getProgramId(programRule, index);
40
47
  pointsPrograms[programId] = {
41
48
  name: programRule.name,
42
- ratio: programRule.ratio || 1,
43
- max_points: programRule.max_points,
49
+ ratio,
50
+ max_points: maxPoints,
44
51
  min_subtotal_to_earn: programRule.min_subtotal_to_earn,
45
52
  earn_percentage: programRule.earn_percentage,
46
53
  };
@@ -6,7 +6,12 @@ import {
6
6
  ApiEventHandler,
7
7
  } from '@cloudcommerce/firebase/lib/helpers/pubsub';
8
8
  import logger from 'firebase-functions/logger';
9
+ import config from '@cloudcommerce/firebase/lib/config';
10
+ import functions from 'firebase-functions/v1';
9
11
  import handleLoyaltyPointsEvent from './functions-lib/handle-loyalty-points-event';
12
+ import addPoints from './functions-lib/cron-add-points';
13
+
14
+ const { httpsFunctionOptions: { region } } = config.get();
10
15
 
11
16
  const handleApiEvent: ApiEventHandler = async ({
12
17
  evName,
@@ -37,5 +42,11 @@ export const loyaltypoints = {
37
42
  onStoreEvent: createAppEventsFunction(
38
43
  'loyaltyPoints',
39
44
  handleApiEvent,
40
- ) as any,
45
+ ),
46
+
47
+ cronAddPoints: functions.region(region).pubsub
48
+ .schedule('28 * * * *')
49
+ .onRun(() => {
50
+ return addPoints;
51
+ }),
41
52
  };