@lyxa.ai/core 1.1.31-alpha.5 → 1.1.32
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/dist/libraries/mongo/models/cart.model.d.ts +2 -0
- package/dist/libraries/mongo/models/cart.model.js +10 -0
- package/dist/libraries/mongo/models/cart.model.js.map +1 -1
- package/dist/libraries/mongo/models/embedded/currency.model.d.ts +1 -0
- package/dist/libraries/mongo/models/embedded/currency.model.js +5 -0
- package/dist/libraries/mongo/models/embedded/currency.model.js.map +1 -1
- package/dist/libraries/mongo/models/user.model.d.ts +1 -1
- package/dist/libraries/socket/core/socket-event-registry.js.map +1 -1
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.d.ts +19 -10
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.js +30 -29
- package/dist/libraries/trpc/middlewares/createSocketSubscriptionProcedure.js.map +1 -1
- package/dist/types/README.md +1 -1
- package/dist/types/package.json +1 -1
- package/dist/types/utilities/shared/currency.d.ts +1 -4
- package/dist/types/utilities/shared/currency.js +13 -17
- package/dist/types/utilities/shared/currency.js.map +1 -1
- package/dist/types/utilities/validation/common-validation.d.ts +78 -2
- package/dist/types/utilities/validation/global-validation.d.ts +38 -14
- package/dist/utilities/currency.d.ts +6 -2
- package/dist/utilities/currency.js +52 -14
- package/dist/utilities/currency.js.map +1 -1
- package/dist/utilities/pipelines/common-pipeline-functions.d.ts +5 -2
- package/dist/utilities/pipelines/common-pipeline-functions.js +19 -23
- package/dist/utilities/pipelines/common-pipeline-functions.js.map +1 -1
- package/dist/utilities/pipelines/product-pipeline-stages.d.ts +2 -2
- package/dist/utilities/pipelines/product-pipeline-stages.js +29 -21
- package/dist/utilities/pipelines/product-pipeline-stages.js.map +1 -1
- package/dist/utilities/shared/currency.d.ts +1 -4
- package/dist/utilities/shared/currency.js +13 -17
- package/dist/utilities/shared/currency.js.map +1 -1
- package/dist/utilities/validation/common-validation.d.ts +78 -2
- package/dist/utilities/validation/global-validation.d.ts +38 -14
- package/package.json +1 -1
|
@@ -1,29 +1,67 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.convertToSecondary = exports.
|
|
3
|
+
exports.convertToSecondarySync = exports.convertToSecondary = exports.roundCurrencySync = exports.roundCurrency = exports.getExchangeRate = exports.getRoundingFactor = void 0;
|
|
4
4
|
const __1 = require("..");
|
|
5
|
-
const
|
|
6
|
-
const
|
|
5
|
+
const enum_1 = require("./enum");
|
|
6
|
+
const DEFAULT_ROUNDING_FACTOR = 0.1;
|
|
7
|
+
const DEFAULT_EXCHANGE_RATE = 1;
|
|
8
|
+
const getRoundingFactor = async (currency) => {
|
|
9
|
+
const setting = (await (0, __1.getLibraries)().getCachedSettingsService().getSettings());
|
|
10
|
+
const currencySetting = setting.currencySetting;
|
|
11
|
+
let roundingFactor;
|
|
12
|
+
if (currencySetting) {
|
|
13
|
+
switch (currency) {
|
|
14
|
+
case enum_1.PaidCurrency.BASE:
|
|
15
|
+
roundingFactor = currencySetting.baseCurrency?.roundTo;
|
|
16
|
+
break;
|
|
17
|
+
case enum_1.PaidCurrency.SECONDARY:
|
|
18
|
+
roundingFactor = currencySetting.secondaryCurrency?.roundTo;
|
|
19
|
+
break;
|
|
20
|
+
default:
|
|
21
|
+
roundingFactor = DEFAULT_ROUNDING_FACTOR;
|
|
22
|
+
break;
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
return roundingFactor || DEFAULT_ROUNDING_FACTOR;
|
|
26
|
+
};
|
|
27
|
+
exports.getRoundingFactor = getRoundingFactor;
|
|
7
28
|
const getExchangeRate = async () => {
|
|
8
29
|
const settings = (await (0, __1.getLibraries)().getCachedSettingsService().getSettings());
|
|
9
30
|
const currencySetting = settings.currencySetting;
|
|
10
31
|
return currencySetting?.exchangeRate || DEFAULT_EXCHANGE_RATE;
|
|
11
32
|
};
|
|
12
33
|
exports.getExchangeRate = getExchangeRate;
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
34
|
+
const roundCurrency = async (amount, currency, roundingFactor) => {
|
|
35
|
+
if (amount == 0)
|
|
15
36
|
return 0;
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
return (0, shared_1.roundBaseCurrency)(amount / exchangeRate);
|
|
37
|
+
roundingFactor = roundingFactor ?? (await (0, exports.getRoundingFactor)(currency));
|
|
38
|
+
return (0, exports.roundCurrencySync)(amount, roundingFactor);
|
|
19
39
|
};
|
|
20
|
-
exports.
|
|
21
|
-
const
|
|
22
|
-
if (
|
|
40
|
+
exports.roundCurrency = roundCurrency;
|
|
41
|
+
const roundCurrencySync = (amount, roundingFactor) => {
|
|
42
|
+
if (amount == 0)
|
|
23
43
|
return 0;
|
|
24
|
-
|
|
25
|
-
const
|
|
26
|
-
return (
|
|
44
|
+
const rounded = Math.ceil(amount / roundingFactor) * roundingFactor;
|
|
45
|
+
const decimals = (roundingFactor.toString().split('.')[1] || '').length;
|
|
46
|
+
return Number(rounded.toFixed(decimals));
|
|
47
|
+
};
|
|
48
|
+
exports.roundCurrencySync = roundCurrencySync;
|
|
49
|
+
const convertToSecondary = async (amount, exchangeRate, roundTo) => {
|
|
50
|
+
if (amount == 0)
|
|
51
|
+
return 0;
|
|
52
|
+
exchangeRate = exchangeRate ?? (await (0, exports.getExchangeRate)());
|
|
53
|
+
return (0, exports.roundCurrency)(amount * exchangeRate, enum_1.PaidCurrency.SECONDARY, roundTo);
|
|
27
54
|
};
|
|
28
55
|
exports.convertToSecondary = convertToSecondary;
|
|
56
|
+
const convertToSecondarySync = (price, exchangeRate, roundTo) => {
|
|
57
|
+
if (price == 0)
|
|
58
|
+
return 0;
|
|
59
|
+
if (price == null)
|
|
60
|
+
return undefined;
|
|
61
|
+
const amount = price * exchangeRate;
|
|
62
|
+
if (!roundTo)
|
|
63
|
+
return amount;
|
|
64
|
+
return (0, exports.roundCurrencySync)(amount, roundTo);
|
|
65
|
+
};
|
|
66
|
+
exports.convertToSecondarySync = convertToSecondarySync;
|
|
29
67
|
//# sourceMappingURL=currency.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency.js","sourceRoot":"/","sources":["utilities/currency.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"currency.js","sourceRoot":"/","sources":["utilities/currency.ts"],"names":[],"mappings":"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","sourcesContent":["// In the future, we need to move this in the currency folder and there we need to make a seperation between sync and async functions\n\nimport { getLibraries } from '..';\n\nimport { Setting } from '../libraries/mongo/models';\nimport { PaidCurrency } from './enum';\n\nconst DEFAULT_ROUNDING_FACTOR = 0.1;\nconst DEFAULT_EXCHANGE_RATE = 1;\n\nexport const getRoundingFactor = async (currency: PaidCurrency): Promise<number> => {\n\tconst setting = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\tconst currencySetting = setting.currencySetting;\n\tlet roundingFactor: number | undefined;\n\tif (currencySetting) {\n\t\tswitch (currency) {\n\t\t\tcase PaidCurrency.BASE:\n\t\t\t\troundingFactor = currencySetting.baseCurrency?.roundTo;\n\t\t\t\tbreak;\n\t\t\tcase PaidCurrency.SECONDARY:\n\t\t\t\troundingFactor = currencySetting.secondaryCurrency?.roundTo;\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\troundingFactor = DEFAULT_ROUNDING_FACTOR;\n\t\t\t\tbreak;\n\t\t}\n\t}\n\treturn roundingFactor || DEFAULT_ROUNDING_FACTOR;\n};\n\nexport const getExchangeRate = async (): Promise<number> => {\n\tconst settings = (await getLibraries().getCachedSettingsService().getSettings()) as Setting;\n\tconst currencySetting = settings.currencySetting;\n\treturn currencySetting?.exchangeRate || DEFAULT_EXCHANGE_RATE;\n};\n\nexport const roundCurrency = async (\n\tamount: number,\n\tcurrency: PaidCurrency,\n\troundingFactor?: number\n): Promise<number> => {\n\tif (amount == 0) return 0;\n\troundingFactor = roundingFactor ?? (await getRoundingFactor(currency));\n\treturn roundCurrencySync(amount, roundingFactor);\n};\n\nexport const roundCurrencySync = (amount: number, roundingFactor: number): number => {\n\tif (amount == 0) return 0;\n\tconst rounded = Math.ceil(amount / roundingFactor) * roundingFactor;\n\tconst decimals = (roundingFactor.toString().split('.')[1] || '').length;\n\treturn Number(rounded.toFixed(decimals));\n};\n\nexport const convertToSecondary = async (\n\tamount: number,\n\texchangeRate?: number,\n\troundTo?: number\n): Promise<number> => {\n\tif (amount == 0) return 0;\n\texchangeRate = exchangeRate ?? (await getExchangeRate());\n\treturn roundCurrency(amount * exchangeRate, PaidCurrency.SECONDARY, roundTo);\n};\n\nexport const convertToSecondarySync = (price: number, exchangeRate: number, roundTo: number) => {\n\tif (price == 0) return 0;\n\tif (price == null) return undefined\n\tconst amount = price * exchangeRate;\n\tif (!roundTo) return amount;\n\treturn roundCurrencySync(amount, roundTo);\n};\n"]}
|
|
@@ -1,2 +1,5 @@
|
|
|
1
|
-
export declare const
|
|
2
|
-
|
|
1
|
+
export declare const getSecondaryCurrencyStage: ({ valuePath, exchangeRate, roundTo, }: {
|
|
2
|
+
valuePath: string;
|
|
3
|
+
exchangeRate: number;
|
|
4
|
+
roundTo: number;
|
|
5
|
+
}) => any;
|
|
@@ -1,33 +1,29 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
const
|
|
3
|
+
exports.getSecondaryCurrencyStage = void 0;
|
|
4
|
+
const getSecondaryCurrencyStage = ({ valuePath, exchangeRate, roundTo, }) => {
|
|
5
5
|
return {
|
|
6
6
|
$cond: [
|
|
7
|
-
{ $
|
|
7
|
+
{ $ifNull: [valuePath, false] },
|
|
8
8
|
{
|
|
9
|
-
$
|
|
9
|
+
$function: {
|
|
10
|
+
body: function (price, exchangeRate, roundTo) {
|
|
11
|
+
if (price == null)
|
|
12
|
+
return null;
|
|
13
|
+
const amount = price * exchangeRate;
|
|
14
|
+
if (!roundTo)
|
|
15
|
+
return amount;
|
|
16
|
+
const rounded = Math.ceil(amount / roundTo) * roundTo;
|
|
17
|
+
const decimals = (roundTo.toString().split('.')[1] || '').length;
|
|
18
|
+
return Number(rounded.toFixed(decimals));
|
|
19
|
+
}.toString(),
|
|
20
|
+
args: [valuePath, exchangeRate, roundTo],
|
|
21
|
+
lang: 'js',
|
|
22
|
+
},
|
|
10
23
|
},
|
|
11
|
-
|
|
24
|
+
null,
|
|
12
25
|
],
|
|
13
26
|
};
|
|
14
27
|
};
|
|
15
|
-
exports.
|
|
16
|
-
const getRoundSecondaryCurrencyStage = (value) => {
|
|
17
|
-
return {
|
|
18
|
-
$cond: [
|
|
19
|
-
{ $ne: [value, null] },
|
|
20
|
-
{
|
|
21
|
-
$multiply: [
|
|
22
|
-
{
|
|
23
|
-
$round: [{ $divide: [value, 1000] }, 0],
|
|
24
|
-
},
|
|
25
|
-
1000,
|
|
26
|
-
],
|
|
27
|
-
},
|
|
28
|
-
0,
|
|
29
|
-
],
|
|
30
|
-
};
|
|
31
|
-
};
|
|
32
|
-
exports.getRoundSecondaryCurrencyStage = getRoundSecondaryCurrencyStage;
|
|
28
|
+
exports.getSecondaryCurrencyStage = getSecondaryCurrencyStage;
|
|
33
29
|
//# sourceMappingURL=common-pipeline-functions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"common-pipeline-functions.js","sourceRoot":"/","sources":["utilities/pipelines/common-pipeline-functions.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"common-pipeline-functions.js","sourceRoot":"/","sources":["utilities/pipelines/common-pipeline-functions.ts"],"names":[],"mappings":";;;AAAO,MAAM,yBAAyB,GAAG,CAAC,EACzC,SAAS,EACT,YAAY,EACZ,OAAO,GAKP,EAAO,EAAE;IACT,OAAO;QACN,KAAK,EAAE;YACN,EAAE,OAAO,EAAE,CAAC,SAAS,EAAE,KAAK,CAAC,EAAE;YAC/B;gBACC,SAAS,EAAE;oBACV,IAAI,EAAE,UAAU,KAAa,EAAE,YAAoB,EAAE,OAAe;wBACnE,IAAI,KAAK,IAAI,IAAI;4BAAE,OAAO,IAAI,CAAC;wBAC/B,MAAM,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;wBACpC,IAAI,CAAC,OAAO;4BAAE,OAAO,MAAM,CAAC;wBAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,GAAG,OAAO,CAAC;wBACtD,MAAM,QAAQ,GAAG,CAAC,OAAO,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;wBACjE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;oBAC1C,CAAC,CAAC,QAAQ,EAAE;oBACZ,IAAI,EAAE,CAAC,SAAS,EAAE,YAAY,EAAE,OAAO,CAAC;oBACxC,IAAI,EAAE,IAAI;iBACV;aACD;YACD,IAAI;SACJ;KACD,CAAC;AACH,CAAC,CAAC;AA7BW,QAAA,yBAAyB,6BA6BpC","sourcesContent":["export const getSecondaryCurrencyStage = ({\n\tvaluePath,\n\texchangeRate,\n\troundTo,\n}: {\n\tvaluePath: string;\n\texchangeRate: number;\n\troundTo: number;\n}): any => {\n\treturn {\n\t\t$cond: [\n\t\t\t{ $ifNull: [valuePath, false] },\n\t\t\t{\n\t\t\t\t$function: {\n\t\t\t\t\tbody: function (price: number, exchangeRate: number, roundTo: number) {\n\t\t\t\t\t\tif (price == null) return null;\n\t\t\t\t\t\tconst amount = price * exchangeRate;\n\t\t\t\t\t\tif (!roundTo) return amount;\n\t\t\t\t\t\tconst rounded = Math.ceil(amount / roundTo) * roundTo;\n\t\t\t\t\t\tconst decimals = (roundTo.toString().split('.')[1] || '').length;\n\t\t\t\t\t\treturn Number(rounded.toFixed(decimals));\n\t\t\t\t\t}.toString(),\n\t\t\t\t\targs: [valuePath, exchangeRate, roundTo],\n\t\t\t\t\tlang: 'js',\n\t\t\t\t},\n\t\t\t},\n\t\t\tnull,\n\t\t],\n\t};\n};\n"]}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
import { PipelineStage } from 'mongoose';
|
|
2
|
-
export declare function addProductMarketingInfo(exchangeRate: number, secondaryCurrencyName: string): PipelineStage[];
|
|
3
|
-
export declare function addSecondaryCurrencyToPriceBreakdowns(exchangeRate: number): PipelineStage;
|
|
2
|
+
export declare function addProductMarketingInfo(exchangeRate: number, secondaryCurrencyRoundTo: number, secondaryCurrencyName: string): PipelineStage[];
|
|
3
|
+
export declare function addSecondaryCurrencyToPriceBreakdowns(exchangeRate: number, secondaryCurrencyRoundTo: number): PipelineStage;
|
|
4
4
|
export declare function addDiscountAmountsToPriceBreakdowns(): PipelineStage;
|
|
@@ -3,9 +3,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.addProductMarketingInfo = addProductMarketingInfo;
|
|
4
4
|
exports.addSecondaryCurrencyToPriceBreakdowns = addSecondaryCurrencyToPriceBreakdowns;
|
|
5
5
|
exports.addDiscountAmountsToPriceBreakdowns = addDiscountAmountsToPriceBreakdowns;
|
|
6
|
-
const enum_1 = require("../enum");
|
|
7
6
|
const common_pipeline_functions_1 = require("./common-pipeline-functions");
|
|
8
|
-
|
|
7
|
+
const enum_1 = require("../enum");
|
|
8
|
+
function addProductMarketingInfo(exchangeRate, secondaryCurrencyRoundTo, secondaryCurrencyName) {
|
|
9
9
|
return [
|
|
10
10
|
{
|
|
11
11
|
$lookup: {
|
|
@@ -45,8 +45,10 @@ function addProductMarketingInfo(exchangeRate, secondaryCurrencyName) {
|
|
|
45
45
|
secondaryCurrencyValue: {
|
|
46
46
|
$cond: [
|
|
47
47
|
{ $eq: ['$valueType', 'fixed'] },
|
|
48
|
-
(0, common_pipeline_functions_1.
|
|
49
|
-
|
|
48
|
+
(0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
|
|
49
|
+
valuePath: '$value',
|
|
50
|
+
exchangeRate,
|
|
51
|
+
roundTo: secondaryCurrencyRoundTo,
|
|
50
52
|
}),
|
|
51
53
|
'$$REMOVE',
|
|
52
54
|
],
|
|
@@ -117,7 +119,7 @@ function addProductMarketingInfo(exchangeRate, secondaryCurrencyName) {
|
|
|
117
119
|
},
|
|
118
120
|
];
|
|
119
121
|
}
|
|
120
|
-
function addSecondaryCurrencyToPriceBreakdowns(exchangeRate) {
|
|
122
|
+
function addSecondaryCurrencyToPriceBreakdowns(exchangeRate, secondaryCurrencyRoundTo) {
|
|
121
123
|
return {
|
|
122
124
|
$addFields: {
|
|
123
125
|
priceBreakdowns: {
|
|
@@ -128,14 +130,18 @@ function addSecondaryCurrencyToPriceBreakdowns(exchangeRate) {
|
|
|
128
130
|
$mergeObjects: [
|
|
129
131
|
'$$breakdown',
|
|
130
132
|
{
|
|
131
|
-
secondaryPrice: (0, common_pipeline_functions_1.
|
|
132
|
-
|
|
133
|
+
secondaryPrice: (0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
|
|
134
|
+
valuePath: '$$breakdown.price',
|
|
135
|
+
exchangeRate,
|
|
136
|
+
roundTo: secondaryCurrencyRoundTo,
|
|
133
137
|
}),
|
|
134
138
|
secondaryDiscountAmount: {
|
|
135
139
|
$cond: [
|
|
136
140
|
{ $gt: ['$productMarketing', null] },
|
|
137
|
-
(0, common_pipeline_functions_1.
|
|
138
|
-
|
|
141
|
+
(0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
|
|
142
|
+
valuePath: '$$breakdown.discountAmount',
|
|
143
|
+
exchangeRate,
|
|
144
|
+
roundTo: secondaryCurrencyRoundTo,
|
|
139
145
|
}),
|
|
140
146
|
'$$REMOVE',
|
|
141
147
|
],
|
|
@@ -143,8 +149,10 @@ function addSecondaryCurrencyToPriceBreakdowns(exchangeRate) {
|
|
|
143
149
|
secondaryDiscountedPrice: {
|
|
144
150
|
$cond: [
|
|
145
151
|
{ $gt: ['$productMarketing', null] },
|
|
146
|
-
(0, common_pipeline_functions_1.
|
|
147
|
-
|
|
152
|
+
(0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
|
|
153
|
+
valuePath: '$$breakdown.discountedPrice',
|
|
154
|
+
exchangeRate,
|
|
155
|
+
roundTo: secondaryCurrencyRoundTo,
|
|
148
156
|
}),
|
|
149
157
|
'$$REMOVE',
|
|
150
158
|
],
|
|
@@ -175,14 +183,14 @@ function addDiscountAmountsToPriceBreakdowns() {
|
|
|
175
183
|
$cond: [
|
|
176
184
|
{ $eq: ['$productMarketing.valueType', enum_1.ValueType.FIXED] },
|
|
177
185
|
'$productMarketing.value',
|
|
178
|
-
|
|
186
|
+
{
|
|
179
187
|
$multiply: [
|
|
180
|
-
'
|
|
188
|
+
'$productMarketing.value',
|
|
181
189
|
{
|
|
182
|
-
$divide: ['
|
|
190
|
+
$divide: ['$$breakdown.price', 100],
|
|
183
191
|
},
|
|
184
192
|
],
|
|
185
|
-
}
|
|
193
|
+
},
|
|
186
194
|
],
|
|
187
195
|
},
|
|
188
196
|
'$$REMOVE',
|
|
@@ -191,25 +199,25 @@ function addDiscountAmountsToPriceBreakdowns() {
|
|
|
191
199
|
discountedPrice: {
|
|
192
200
|
$cond: [
|
|
193
201
|
{ $gt: ['$productMarketing', null] },
|
|
194
|
-
|
|
202
|
+
{
|
|
195
203
|
$subtract: [
|
|
196
204
|
'$$breakdown.price',
|
|
197
205
|
{
|
|
198
206
|
$cond: [
|
|
199
207
|
{ $eq: ['$productMarketing.valueType', enum_1.ValueType.FIXED] },
|
|
200
208
|
'$productMarketing.value',
|
|
201
|
-
|
|
209
|
+
{
|
|
202
210
|
$multiply: [
|
|
203
|
-
'
|
|
211
|
+
'$productMarketing.value',
|
|
204
212
|
{
|
|
205
|
-
$divide: ['
|
|
213
|
+
$divide: ['$$breakdown.price', 100],
|
|
206
214
|
},
|
|
207
215
|
],
|
|
208
|
-
}
|
|
216
|
+
},
|
|
209
217
|
],
|
|
210
218
|
},
|
|
211
219
|
],
|
|
212
|
-
}
|
|
220
|
+
},
|
|
213
221
|
'$$REMOVE',
|
|
214
222
|
],
|
|
215
223
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"product-pipeline-stages.js","sourceRoot":"/","sources":["utilities/pipelines/product-pipeline-stages.ts"],"names":[],"mappings":"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","sourcesContent":["import { PipelineStage } from 'mongoose';\nimport { MarketingType, ValueType } from '../enum';\nimport { getRoundBaseCurrencyStage, getRoundSecondaryCurrencyStage } from './common-pipeline-functions';\n\nexport function addProductMarketingInfo(\n\texchangeRate: number,\n\tsecondaryCurrencyName: string\n): PipelineStage[] {\n\treturn [\n\t\t{\n\t\t\t$lookup: {\n\t\t\t\tfrom: 'productMarketings',\n\t\t\t\tlet: { productId: '$_id', now: new Date() },\n\t\t\t\tpipeline: [\n\t\t\t\t\t{\n\t\t\t\t\t\t$match: {\n\t\t\t\t\t\t\t$expr: { $eq: ['$product', '$$productId'] },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$lookup: {\n\t\t\t\t\t\t\tfrom: 'marketings',\n\t\t\t\t\t\t\tlocalField: 'marketing',\n\t\t\t\t\t\t\tforeignField: '_id',\n\t\t\t\t\t\t\tas: 'marketing',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$unwind: '$marketing',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$match: {\n\t\t\t\t\t\t\t$expr: {\n\t\t\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t\t\t{ $eq: ['$marketing.status', 'active'] },\n\t\t\t\t\t\t\t\t\t{ $eq: ['$marketing.pausedAt', null] },\n\t\t\t\t\t\t\t\t\t{ $lte: ['$marketing.duration.start', '$$now'] },\n\t\t\t\t\t\t\t\t\t{ $gte: ['$marketing.duration.end', '$$now'] },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t// Compute and add secondary currency values to coupon documents\n\t\t\t\t\t{\n\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\tsecondaryCurrencyValue: {\n\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t{ $eq: ['$valueType', 'fixed'] },\n\t\t\t\t\t\t\t\t\tgetRoundSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t$multiply: ['$value', exchangeRate],\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t'$$REMOVE', // Removes field if condition not met\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\t\t$switch: {\n\t\t\t\t\t\t\t\t\tbranches: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.BUY1GET1] },\n\t\t\t\t\t\t\t\t\t\t\tthen: 'Buy 1 Get 1',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.PUNCH_MARKETING] },\n\t\t\t\t\t\t\t\t\t\t\tthen: 'Punch',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.DISCOUNT] },\n\t\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t\t$switch: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbranches: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$concat: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecondaryCurrencyName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' ',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $toString: '$secondaryCurrencyValue' },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$valueType', ValueType.PERCENTAGE] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$concat: [{ $toString: '$value' }, '%'],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\tdefault: 'Discount',\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdefault: '$marketing.marketingType',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\tmarketing: '$marketing._id',\n\t\t\t\t\t\t\tisBuy1Get1: '$isBuy1Get1',\n\t\t\t\t\t\t\tvalueType: '$valueType',\n\t\t\t\t\t\t\tvalue: '$value',\n\t\t\t\t\t\t\tsecondaryCurrencyValue: '$secondaryCurrencyValue',\n\t\t\t\t\t\t\tlabel: '$label',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tas: 'productMarketing',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t$unwind: { path: '$productMarketing', preserveNullAndEmptyArrays: true },\n\t\t},\n\t];\n}\n\nexport function addSecondaryCurrencyToPriceBreakdowns(exchangeRate: number): PipelineStage {\n\treturn {\n\t\t$addFields: {\n\t\t\tpriceBreakdowns: {\n\t\t\t\t$map: {\n\t\t\t\t\tinput: '$priceBreakdowns',\n\t\t\t\t\tas: 'breakdown',\n\t\t\t\t\tin: {\n\t\t\t\t\t\t$mergeObjects: [\n\t\t\t\t\t\t\t'$$breakdown',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsecondaryPrice: getRoundSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t$multiply: ['$$breakdown.price', exchangeRate],\n\t\t\t\t\t\t\t\t}),\n\n\t\t\t\t\t\t\t\tsecondaryDiscountAmount: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] },\n\t\t\t\t\t\t\t\t\t\tgetRoundSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\t$multiply: ['$$breakdown.discountAmount', exchangeRate],\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // Removes field if condition not met\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsecondaryDiscountedPrice: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] },\n\t\t\t\t\t\t\t\t\t\tgetRoundSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\t$multiply: ['$$breakdown.discountedPrice', exchangeRate],\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // Removes field if condition not met\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function addDiscountAmountsToPriceBreakdowns(): PipelineStage {\n\treturn {\n\t\t$addFields: {\n\t\t\tpriceBreakdowns: {\n\t\t\t\t$map: {\n\t\t\t\t\tinput: '$priceBreakdowns',\n\t\t\t\t\tas: 'breakdown',\n\t\t\t\t\tin: {\n\t\t\t\t\t\t$mergeObjects: [\n\t\t\t\t\t\t\t'$$breakdown',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdiscountAmount: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] }, // checks existence\n\t\t\t\t\t\t\t\t\t\t// if valueType is fixed, use value directly\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ $eq: ['$productMarketing.valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t'$productMarketing.value',\n\t\t\t\t\t\t\t\t\t\t\t\t// if valueType is percentage, calculate percentage of price\n\t\t\t\t\t\t\t\t\t\t\t\tgetRoundBaseCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\t\t\t$multiply: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'$$breakdown.price',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$divide: ['$productMarketing.value', 100],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // omit field if productMarketing is missing\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t// Add discounted price\n\t\t\t\t\t\t\t\tdiscountedPrice: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] }, // checks existence\n\t\t\t\t\t\t\t\t\t\tgetRoundBaseCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\t$subtract: [\n\t\t\t\t\t\t\t\t\t\t\t\t'$$breakdown.price',\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $eq: ['$productMarketing.valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'$productMarketing.value',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tgetRoundBaseCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$multiply: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'$$breakdown.price',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$divide: ['$productMarketing.value', 100],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // omit field if productMarketing is missing\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n"]}
|
|
1
|
+
{"version":3,"file":"product-pipeline-stages.js","sourceRoot":"/","sources":["utilities/pipelines/product-pipeline-stages.ts"],"names":[],"mappings":"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","sourcesContent":["import { PipelineStage } from 'mongoose';\nimport { getSecondaryCurrencyStage } from './common-pipeline-functions';\nimport { MarketingType, ValueType } from '../enum';\n\nexport function addProductMarketingInfo(\n\texchangeRate: number,\n\tsecondaryCurrencyRoundTo: number,\n\tsecondaryCurrencyName: string\n): PipelineStage[] {\n\treturn [\n\t\t{\n\t\t\t$lookup: {\n\t\t\t\tfrom: 'productMarketings',\n\t\t\t\tlet: { productId: '$_id', now: new Date() },\n\t\t\t\tpipeline: [\n\t\t\t\t\t{\n\t\t\t\t\t\t$match: {\n\t\t\t\t\t\t\t$expr: { $eq: ['$product', '$$productId'] },\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$lookup: {\n\t\t\t\t\t\t\tfrom: 'marketings',\n\t\t\t\t\t\t\tlocalField: 'marketing',\n\t\t\t\t\t\t\tforeignField: '_id',\n\t\t\t\t\t\t\tas: 'marketing',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$unwind: '$marketing',\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$match: {\n\t\t\t\t\t\t\t$expr: {\n\t\t\t\t\t\t\t\t$and: [\n\t\t\t\t\t\t\t\t\t{ $eq: ['$marketing.status', 'active'] },\n\t\t\t\t\t\t\t\t\t{ $eq: ['$marketing.pausedAt', null] },\n\t\t\t\t\t\t\t\t\t{ $lte: ['$marketing.duration.start', '$$now'] },\n\t\t\t\t\t\t\t\t\t{ $gte: ['$marketing.duration.end', '$$now'] },\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t// Compute and add secondary currency values to coupon documents\n\t\t\t\t\t{\n\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\tsecondaryCurrencyValue: {\n\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t{ $eq: ['$valueType', 'fixed'] },\n\t\t\t\t\t\t\t\t\tgetSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t\tvaluePath: '$value',\n\t\t\t\t\t\t\t\t\t\texchangeRate,\n\t\t\t\t\t\t\t\t\t\troundTo: secondaryCurrencyRoundTo,\n\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t'$$REMOVE', // Removes field if condition not met\n\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$addFields: {\n\t\t\t\t\t\t\tlabel: {\n\t\t\t\t\t\t\t\t$switch: {\n\t\t\t\t\t\t\t\t\tbranches: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.BUY1GET1] },\n\t\t\t\t\t\t\t\t\t\t\tthen: 'Buy 1 Get 1',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.PUNCH_MARKETING] },\n\t\t\t\t\t\t\t\t\t\t\tthen: 'Punch',\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$marketing.marketingType', MarketingType.DISCOUNT] },\n\t\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t\t$switch: {\n\t\t\t\t\t\t\t\t\t\t\t\t\tbranches: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$concat: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tsecondaryCurrencyName,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t' ',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $toString: '$secondaryCurrencyValue' },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tcase: { $eq: ['$valueType', ValueType.PERCENTAGE] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tthen: {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$concat: [{ $toString: '$value' }, '%'],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\tdefault: 'Discount',\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\tdefault: '$marketing.marketingType',\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\t$project: {\n\t\t\t\t\t\t\tmarketing: '$marketing._id',\n\t\t\t\t\t\t\tisBuy1Get1: '$isBuy1Get1',\n\t\t\t\t\t\t\tvalueType: '$valueType',\n\t\t\t\t\t\t\tvalue: '$value',\n\t\t\t\t\t\t\tsecondaryCurrencyValue: '$secondaryCurrencyValue',\n\t\t\t\t\t\t\tlabel: '$label',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t\tas: 'productMarketing',\n\t\t\t},\n\t\t},\n\t\t{\n\t\t\t$unwind: { path: '$productMarketing', preserveNullAndEmptyArrays: true },\n\t\t},\n\t];\n}\n\nexport function addSecondaryCurrencyToPriceBreakdowns(\n\texchangeRate: number,\n\tsecondaryCurrencyRoundTo: number\n): PipelineStage {\n\treturn {\n\t\t$addFields: {\n\t\t\tpriceBreakdowns: {\n\t\t\t\t$map: {\n\t\t\t\t\tinput: '$priceBreakdowns',\n\t\t\t\t\tas: 'breakdown',\n\t\t\t\t\tin: {\n\t\t\t\t\t\t$mergeObjects: [\n\t\t\t\t\t\t\t'$$breakdown',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tsecondaryPrice: getSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\tvaluePath: '$$breakdown.price',\n\t\t\t\t\t\t\t\t\texchangeRate,\n\t\t\t\t\t\t\t\t\troundTo: secondaryCurrencyRoundTo,\n\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\tsecondaryDiscountAmount: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] },\n\t\t\t\t\t\t\t\t\t\tgetSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\tvaluePath: '$$breakdown.discountAmount',\n\t\t\t\t\t\t\t\t\t\t\texchangeRate,\n\t\t\t\t\t\t\t\t\t\t\troundTo: secondaryCurrencyRoundTo,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // Removes field if condition not met\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tsecondaryDiscountedPrice: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] },\n\t\t\t\t\t\t\t\t\t\tgetSecondaryCurrencyStage({\n\t\t\t\t\t\t\t\t\t\t\tvaluePath: '$$breakdown.discountedPrice',\n\t\t\t\t\t\t\t\t\t\t\texchangeRate,\n\t\t\t\t\t\t\t\t\t\t\troundTo: secondaryCurrencyRoundTo,\n\t\t\t\t\t\t\t\t\t\t}),\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // Removes field if condition not met\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n\nexport function addDiscountAmountsToPriceBreakdowns(): PipelineStage {\n\treturn {\n\t\t$addFields: {\n\t\t\tpriceBreakdowns: {\n\t\t\t\t$map: {\n\t\t\t\t\tinput: '$priceBreakdowns',\n\t\t\t\t\tas: 'breakdown',\n\t\t\t\t\tin: {\n\t\t\t\t\t\t$mergeObjects: [\n\t\t\t\t\t\t\t'$$breakdown',\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdiscountAmount: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] }, // checks existence\n\t\t\t\t\t\t\t\t\t\t// if valueType is fixed, use value directly\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t\t\t{ $eq: ['$productMarketing.valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t'$productMarketing.value',\n\t\t\t\t\t\t\t\t\t\t\t\t// if valueType is percentage, calculate percentage of price\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t$multiply: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'$productMarketing.value',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$divide: ['$$breakdown.price', 100],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // omit field if productMarketing is missing\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t// Add discounted price\n\t\t\t\t\t\t\t\tdiscountedPrice: {\n\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t{ $gt: ['$productMarketing', null] }, // checks existence\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t$subtract: [\n\t\t\t\t\t\t\t\t\t\t\t\t'$$breakdown.price',\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t$cond: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ $eq: ['$productMarketing.valueType', ValueType.FIXED] },\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'$productMarketing.value',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$multiply: [\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'$productMarketing.value',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t$divide: ['$$breakdown.price', 100],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\t\t'$$REMOVE', // omit field if productMarketing is missing\n\t\t\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t],\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t},\n\t};\n}\n"]}
|
|
@@ -1,5 +1,2 @@
|
|
|
1
|
-
export declare const BaseCurrencyRoundTo = 0.01;
|
|
2
|
-
export declare const SecondaryCurrencyRoundTo = 1000;
|
|
3
1
|
export declare const roundCurrencySync: (amount: number, roundingFactor: number) => number;
|
|
4
|
-
export declare const
|
|
5
|
-
export declare const roundSecondaryCurrency: (amount: number) => number;
|
|
2
|
+
export declare const convertToSecondarySync: (price: number, exchangeRate: number, roundTo: number) => number | null;
|
|
@@ -1,27 +1,23 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
4
|
-
exports.BaseCurrencyRoundTo = 0.01;
|
|
5
|
-
exports.SecondaryCurrencyRoundTo = 1000;
|
|
3
|
+
exports.convertToSecondarySync = exports.roundCurrencySync = void 0;
|
|
6
4
|
const roundCurrencySync = (amount, roundingFactor) => {
|
|
7
|
-
if (
|
|
8
|
-
isNaN(amount) ||
|
|
9
|
-
typeof roundingFactor !== 'number' ||
|
|
10
|
-
roundingFactor <= 0 ||
|
|
11
|
-
amount === 0) {
|
|
5
|
+
if (amount == 0)
|
|
12
6
|
return 0;
|
|
13
|
-
|
|
7
|
+
const rounded = Math.ceil(amount / roundingFactor) * roundingFactor;
|
|
14
8
|
const decimals = (roundingFactor.toString().split('.')[1] || '').length;
|
|
15
|
-
const rounded = Math.round(amount / roundingFactor) * roundingFactor;
|
|
16
9
|
return Number(rounded.toFixed(decimals));
|
|
17
10
|
};
|
|
18
11
|
exports.roundCurrencySync = roundCurrencySync;
|
|
19
|
-
const
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
12
|
+
const convertToSecondarySync = (price, exchangeRate, roundTo) => {
|
|
13
|
+
if (price == 0)
|
|
14
|
+
return 0;
|
|
15
|
+
if (price == null)
|
|
16
|
+
return null;
|
|
17
|
+
const amount = price * exchangeRate;
|
|
18
|
+
if (!roundTo)
|
|
19
|
+
return amount;
|
|
20
|
+
return (0, exports.roundCurrencySync)(amount, roundTo);
|
|
25
21
|
};
|
|
26
|
-
exports.
|
|
22
|
+
exports.convertToSecondarySync = convertToSecondarySync;
|
|
27
23
|
//# sourceMappingURL=currency.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"currency.js","sourceRoot":"/","sources":["utilities/shared/currency.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"currency.js","sourceRoot":"/","sources":["utilities/shared/currency.ts"],"names":[],"mappings":";;;AAAO,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,cAAsB,EAAU,EAAE;IACnF,IAAI,MAAM,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IAC1B,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC;IACpE,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACxE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AALW,QAAA,iBAAiB,qBAK5B;AAEK,MAAM,sBAAsB,GAAG,CAAC,KAAa,EAAE,YAAoB,EAAE,OAAe,EAAE,EAAE;IAC9F,IAAI,KAAK,IAAI,CAAC;QAAE,OAAO,CAAC,CAAC;IACzB,IAAI,KAAK,IAAI,IAAI;QAAE,OAAO,IAAI,CAAC;IAC/B,MAAM,MAAM,GAAG,KAAK,GAAG,YAAY,CAAC;IACpC,IAAI,CAAC,OAAO;QAAE,OAAO,MAAM,CAAC;IAC5B,OAAO,IAAA,yBAAiB,EAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC,CAAC;AANW,QAAA,sBAAsB,0BAMjC","sourcesContent":["export const roundCurrencySync = (amount: number, roundingFactor: number): number => {\n\tif (amount == 0) return 0;\n\tconst rounded = Math.ceil(amount / roundingFactor) * roundingFactor;\n\tconst decimals = (roundingFactor.toString().split('.')[1] || '').length;\n\treturn Number(rounded.toFixed(decimals));\n};\n\nexport const convertToSecondarySync = (price: number, exchangeRate: number, roundTo: number) => {\n\tif (price == 0) return 0;\n\tif (price == null) return null;\n\tconst amount = price * exchangeRate;\n\tif (!roundTo) return amount;\n\treturn roundCurrencySync(amount, roundTo);\n};"]}
|
|
@@ -647,7 +647,7 @@ export declare const createResponseSchema: <T>(schema: z.ZodSchema<T>) => z.ZodO
|
|
|
647
647
|
totalPages: number;
|
|
648
648
|
} | undefined;
|
|
649
649
|
}>, z.ZodType<T, z.ZodTypeDef, T>]>>;
|
|
650
|
-
}>, any> extends infer T_1 ? { [k in keyof T_1]:
|
|
650
|
+
}>, any> extends infer T_1 ? { [k in keyof T_1]: z.objectUtil.addQuestionMarks<z.baseObjectOutputType<{
|
|
651
651
|
success: z.ZodBoolean;
|
|
652
652
|
message: z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
653
653
|
data: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
|
|
@@ -685,7 +685,83 @@ export declare const createResponseSchema: <T>(schema: z.ZodSchema<T>) => z.ZodO
|
|
|
685
685
|
totalPages: number;
|
|
686
686
|
} | undefined;
|
|
687
687
|
}>, z.ZodType<T, z.ZodTypeDef, T>]>>;
|
|
688
|
-
}>
|
|
688
|
+
}>, any>[k]; } : never, z.baseObjectInputType<{
|
|
689
|
+
success: z.ZodBoolean;
|
|
690
|
+
message: z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
691
|
+
data: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
|
|
692
|
+
metadata: z.ZodOptional<z.ZodObject<{
|
|
693
|
+
page: z.ZodNumber;
|
|
694
|
+
size: z.ZodNumber;
|
|
695
|
+
totalElements: z.ZodNumber;
|
|
696
|
+
totalPages: z.ZodNumber;
|
|
697
|
+
}, "strip", z.ZodTypeAny, {
|
|
698
|
+
page: number;
|
|
699
|
+
size: number;
|
|
700
|
+
totalElements: number;
|
|
701
|
+
totalPages: number;
|
|
702
|
+
}, {
|
|
703
|
+
page: number;
|
|
704
|
+
size: number;
|
|
705
|
+
totalElements: number;
|
|
706
|
+
totalPages: number;
|
|
707
|
+
}>>;
|
|
708
|
+
documents: z.ZodArray<z.ZodType<T, z.ZodTypeDef, T>, "many">;
|
|
709
|
+
}, "strip", z.ZodTypeAny, {
|
|
710
|
+
documents: T[];
|
|
711
|
+
metadata?: {
|
|
712
|
+
page: number;
|
|
713
|
+
size: number;
|
|
714
|
+
totalElements: number;
|
|
715
|
+
totalPages: number;
|
|
716
|
+
} | undefined;
|
|
717
|
+
}, {
|
|
718
|
+
documents: T[];
|
|
719
|
+
metadata?: {
|
|
720
|
+
page: number;
|
|
721
|
+
size: number;
|
|
722
|
+
totalElements: number;
|
|
723
|
+
totalPages: number;
|
|
724
|
+
} | undefined;
|
|
725
|
+
}>, z.ZodType<T, z.ZodTypeDef, T>]>>;
|
|
726
|
+
}> extends infer T_2 ? { [k_1 in keyof T_2]: z.baseObjectInputType<{
|
|
727
|
+
success: z.ZodBoolean;
|
|
728
|
+
message: z.ZodString | z.ZodEffects<z.ZodEffects<z.ZodString, string, string>, string, string>;
|
|
729
|
+
data: z.ZodOptional<z.ZodUnion<[z.ZodObject<{
|
|
730
|
+
metadata: z.ZodOptional<z.ZodObject<{
|
|
731
|
+
page: z.ZodNumber;
|
|
732
|
+
size: z.ZodNumber;
|
|
733
|
+
totalElements: z.ZodNumber;
|
|
734
|
+
totalPages: z.ZodNumber;
|
|
735
|
+
}, "strip", z.ZodTypeAny, {
|
|
736
|
+
page: number;
|
|
737
|
+
size: number;
|
|
738
|
+
totalElements: number;
|
|
739
|
+
totalPages: number;
|
|
740
|
+
}, {
|
|
741
|
+
page: number;
|
|
742
|
+
size: number;
|
|
743
|
+
totalElements: number;
|
|
744
|
+
totalPages: number;
|
|
745
|
+
}>>;
|
|
746
|
+
documents: z.ZodArray<z.ZodType<T, z.ZodTypeDef, T>, "many">;
|
|
747
|
+
}, "strip", z.ZodTypeAny, {
|
|
748
|
+
documents: T[];
|
|
749
|
+
metadata?: {
|
|
750
|
+
page: number;
|
|
751
|
+
size: number;
|
|
752
|
+
totalElements: number;
|
|
753
|
+
totalPages: number;
|
|
754
|
+
} | undefined;
|
|
755
|
+
}, {
|
|
756
|
+
documents: T[];
|
|
757
|
+
metadata?: {
|
|
758
|
+
page: number;
|
|
759
|
+
size: number;
|
|
760
|
+
totalElements: number;
|
|
761
|
+
totalPages: number;
|
|
762
|
+
} | undefined;
|
|
763
|
+
}>, z.ZodType<T, z.ZodTypeDef, T>]>>;
|
|
764
|
+
}>[k_1]; } : never>;
|
|
689
765
|
export type PaginatedDTO<T> = {
|
|
690
766
|
metadata: DTO<typeof metadataSchema>;
|
|
691
767
|
documents: T[];
|