@lyxa.ai/core 1.1.38 → 1.1.40

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.
Files changed (40) hide show
  1. package/dist/libraries/mongo/models/cart.model.d.ts +0 -2
  2. package/dist/libraries/mongo/models/cart.model.js +0 -10
  3. package/dist/libraries/mongo/models/cart.model.js.map +1 -1
  4. package/dist/libraries/mongo/models/counter.model.d.ts +1 -1
  5. package/dist/libraries/mongo/models/counter.model.js +3 -3
  6. package/dist/libraries/mongo/models/counter.model.js.map +1 -1
  7. package/dist/libraries/mongo/models/embedded/currency.model.d.ts +0 -1
  8. package/dist/libraries/mongo/models/embedded/currency.model.js +0 -5
  9. package/dist/libraries/mongo/models/embedded/currency.model.js.map +1 -1
  10. package/dist/libraries/mongo/models/finance-settlement.model.js +5 -4
  11. package/dist/libraries/mongo/models/finance-settlement.model.js.map +1 -1
  12. package/dist/libraries/mongo/models/product.model.js +6 -2
  13. package/dist/libraries/mongo/models/product.model.js.map +1 -1
  14. package/dist/types/README.md +1 -1
  15. package/dist/types/package.json +1 -1
  16. package/dist/types/utilities/enum.d.ts +2 -0
  17. package/dist/types/utilities/enum.js +2 -0
  18. package/dist/types/utilities/enum.js.map +1 -1
  19. package/dist/types/utilities/shared/currency.d.ts +4 -1
  20. package/dist/types/utilities/shared/currency.js +17 -13
  21. package/dist/types/utilities/shared/currency.js.map +1 -1
  22. package/dist/utilities/currency.d.ts +2 -6
  23. package/dist/utilities/currency.js +14 -52
  24. package/dist/utilities/currency.js.map +1 -1
  25. package/dist/utilities/enum.d.ts +2 -0
  26. package/dist/utilities/enum.js +2 -0
  27. package/dist/utilities/enum.js.map +1 -1
  28. package/dist/utilities/id-generator.d.ts +1 -1
  29. package/dist/utilities/id-generator.js +47 -30
  30. package/dist/utilities/id-generator.js.map +1 -1
  31. package/dist/utilities/pipelines/common-pipeline-functions.d.ts +2 -5
  32. package/dist/utilities/pipelines/common-pipeline-functions.js +23 -19
  33. package/dist/utilities/pipelines/common-pipeline-functions.js.map +1 -1
  34. package/dist/utilities/pipelines/product-pipeline-stages.d.ts +2 -2
  35. package/dist/utilities/pipelines/product-pipeline-stages.js +21 -29
  36. package/dist/utilities/pipelines/product-pipeline-stages.js.map +1 -1
  37. package/dist/utilities/shared/currency.d.ts +4 -1
  38. package/dist/utilities/shared/currency.js +17 -13
  39. package/dist/utilities/shared/currency.js.map +1 -1
  40. package/package.json +1 -1
@@ -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 common_pipeline_functions_1 = require("./common-pipeline-functions");
7
6
  const enum_1 = require("../enum");
8
- function addProductMarketingInfo(exchangeRate, secondaryCurrencyRoundTo, secondaryCurrencyName) {
7
+ const common_pipeline_functions_1 = require("./common-pipeline-functions");
8
+ function addProductMarketingInfo(exchangeRate, secondaryCurrencyName) {
9
9
  return [
10
10
  {
11
11
  $lookup: {
@@ -45,10 +45,8 @@ function addProductMarketingInfo(exchangeRate, secondaryCurrencyRoundTo, seconda
45
45
  secondaryCurrencyValue: {
46
46
  $cond: [
47
47
  { $eq: ['$valueType', 'fixed'] },
48
- (0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
49
- valuePath: '$value',
50
- exchangeRate,
51
- roundTo: secondaryCurrencyRoundTo,
48
+ (0, common_pipeline_functions_1.getRoundSecondaryCurrencyStage)({
49
+ $multiply: ['$value', exchangeRate],
52
50
  }),
53
51
  '$$REMOVE',
54
52
  ],
@@ -119,7 +117,7 @@ function addProductMarketingInfo(exchangeRate, secondaryCurrencyRoundTo, seconda
119
117
  },
120
118
  ];
121
119
  }
122
- function addSecondaryCurrencyToPriceBreakdowns(exchangeRate, secondaryCurrencyRoundTo) {
120
+ function addSecondaryCurrencyToPriceBreakdowns(exchangeRate) {
123
121
  return {
124
122
  $addFields: {
125
123
  priceBreakdowns: {
@@ -130,18 +128,14 @@ function addSecondaryCurrencyToPriceBreakdowns(exchangeRate, secondaryCurrencyRo
130
128
  $mergeObjects: [
131
129
  '$$breakdown',
132
130
  {
133
- secondaryPrice: (0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
134
- valuePath: '$$breakdown.price',
135
- exchangeRate,
136
- roundTo: secondaryCurrencyRoundTo,
131
+ secondaryPrice: (0, common_pipeline_functions_1.getRoundSecondaryCurrencyStage)({
132
+ $multiply: ['$$breakdown.price', exchangeRate],
137
133
  }),
138
134
  secondaryDiscountAmount: {
139
135
  $cond: [
140
136
  { $gt: ['$productMarketing', null] },
141
- (0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
142
- valuePath: '$$breakdown.discountAmount',
143
- exchangeRate,
144
- roundTo: secondaryCurrencyRoundTo,
137
+ (0, common_pipeline_functions_1.getRoundSecondaryCurrencyStage)({
138
+ $multiply: ['$$breakdown.discountAmount', exchangeRate],
145
139
  }),
146
140
  '$$REMOVE',
147
141
  ],
@@ -149,10 +143,8 @@ function addSecondaryCurrencyToPriceBreakdowns(exchangeRate, secondaryCurrencyRo
149
143
  secondaryDiscountedPrice: {
150
144
  $cond: [
151
145
  { $gt: ['$productMarketing', null] },
152
- (0, common_pipeline_functions_1.getSecondaryCurrencyStage)({
153
- valuePath: '$$breakdown.discountedPrice',
154
- exchangeRate,
155
- roundTo: secondaryCurrencyRoundTo,
146
+ (0, common_pipeline_functions_1.getRoundSecondaryCurrencyStage)({
147
+ $multiply: ['$$breakdown.discountedPrice', exchangeRate],
156
148
  }),
157
149
  '$$REMOVE',
158
150
  ],
@@ -183,14 +175,14 @@ function addDiscountAmountsToPriceBreakdowns() {
183
175
  $cond: [
184
176
  { $eq: ['$productMarketing.valueType', enum_1.ValueType.FIXED] },
185
177
  '$productMarketing.value',
186
- {
178
+ (0, common_pipeline_functions_1.getRoundBaseCurrencyStage)({
187
179
  $multiply: [
188
- '$productMarketing.value',
180
+ '$$breakdown.price',
189
181
  {
190
- $divide: ['$$breakdown.price', 100],
182
+ $divide: ['$productMarketing.value', 100],
191
183
  },
192
184
  ],
193
- },
185
+ }),
194
186
  ],
195
187
  },
196
188
  '$$REMOVE',
@@ -199,25 +191,25 @@ function addDiscountAmountsToPriceBreakdowns() {
199
191
  discountedPrice: {
200
192
  $cond: [
201
193
  { $gt: ['$productMarketing', null] },
202
- {
194
+ (0, common_pipeline_functions_1.getRoundBaseCurrencyStage)({
203
195
  $subtract: [
204
196
  '$$breakdown.price',
205
197
  {
206
198
  $cond: [
207
199
  { $eq: ['$productMarketing.valueType', enum_1.ValueType.FIXED] },
208
200
  '$productMarketing.value',
209
- {
201
+ (0, common_pipeline_functions_1.getRoundBaseCurrencyStage)({
210
202
  $multiply: [
211
- '$productMarketing.value',
203
+ '$$breakdown.price',
212
204
  {
213
- $divide: ['$$breakdown.price', 100],
205
+ $divide: ['$productMarketing.value', 100],
214
206
  },
215
207
  ],
216
- },
208
+ }),
217
209
  ],
218
210
  },
219
211
  ],
220
- },
212
+ }),
221
213
  '$$REMOVE',
222
214
  ],
223
215
  },
@@ -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 { 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
+ {"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,2 +1,5 @@
1
+ export declare const BaseCurrencyRoundTo = 0.01;
2
+ export declare const SecondaryCurrencyRoundTo = 1000;
1
3
  export declare const roundCurrencySync: (amount: number, roundingFactor: number) => number;
2
- export declare const convertToSecondarySync: (price: number, exchangeRate: number, roundTo: number) => number | null;
4
+ export declare const roundBaseCurrency: (amount: number) => number;
5
+ export declare const roundSecondaryCurrency: (amount: number) => number;
@@ -1,23 +1,27 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.convertToSecondarySync = exports.roundCurrencySync = void 0;
3
+ exports.roundSecondaryCurrency = exports.roundBaseCurrency = exports.roundCurrencySync = exports.SecondaryCurrencyRoundTo = exports.BaseCurrencyRoundTo = void 0;
4
+ exports.BaseCurrencyRoundTo = 0.01;
5
+ exports.SecondaryCurrencyRoundTo = 1000;
4
6
  const roundCurrencySync = (amount, roundingFactor) => {
5
- if (amount == 0)
7
+ if (typeof amount !== 'number' ||
8
+ isNaN(amount) ||
9
+ typeof roundingFactor !== 'number' ||
10
+ roundingFactor <= 0 ||
11
+ amount === 0) {
6
12
  return 0;
7
- const rounded = Math.ceil(amount / roundingFactor) * roundingFactor;
13
+ }
8
14
  const decimals = (roundingFactor.toString().split('.')[1] || '').length;
15
+ const rounded = Math.round(amount / roundingFactor) * roundingFactor;
9
16
  return Number(rounded.toFixed(decimals));
10
17
  };
11
18
  exports.roundCurrencySync = roundCurrencySync;
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);
19
+ const roundBaseCurrency = (amount) => {
20
+ return (0, exports.roundCurrencySync)(amount, exports.BaseCurrencyRoundTo);
21
+ };
22
+ exports.roundBaseCurrency = roundBaseCurrency;
23
+ const roundSecondaryCurrency = (amount) => {
24
+ return (0, exports.roundCurrencySync)(amount, exports.SecondaryCurrencyRoundTo);
21
25
  };
22
- exports.convertToSecondarySync = convertToSecondarySync;
26
+ exports.roundSecondaryCurrency = roundSecondaryCurrency;
23
27
  //# sourceMappingURL=currency.js.map
@@ -1 +1 @@
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};"]}
1
+ {"version":3,"file":"currency.js","sourceRoot":"/","sources":["utilities/shared/currency.ts"],"names":[],"mappings":";;;AACa,QAAA,mBAAmB,GAAG,IAAI,CAAC;AAC3B,QAAA,wBAAwB,GAAG,IAAI,CAAC;AAGtC,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAE,cAAsB,EAAU,EAAE;IACnF,IACC,OAAO,MAAM,KAAK,QAAQ;QAC1B,KAAK,CAAC,MAAM,CAAC;QACb,OAAO,cAAc,KAAK,QAAQ;QAClC,cAAc,IAAI,CAAC;QACnB,MAAM,KAAK,CAAC,EACX,CAAC;QACF,OAAO,CAAC,CAAC;IACV,CAAC;IAED,MAAM,QAAQ,GAAG,CAAC,cAAc,CAAC,QAAQ,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC;IACxE,MAAM,OAAO,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,GAAG,cAAc,CAAC,GAAG,cAAc,CAAC;IAErE,OAAO,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC;AAC1C,CAAC,CAAC;AAfW,QAAA,iBAAiB,qBAe5B;AAGK,MAAM,iBAAiB,GAAG,CAAC,MAAc,EAAU,EAAE;IAC3D,OAAO,IAAA,yBAAiB,EAAC,MAAM,EAAE,2BAAmB,CAAC,CAAC;AACvD,CAAC,CAAC;AAFW,QAAA,iBAAiB,qBAE5B;AAEK,MAAM,sBAAsB,GAAG,CAAC,MAAc,EAAU,EAAE;IAChE,OAAO,IAAA,yBAAiB,EAAC,MAAM,EAAE,gCAAwB,CAAC,CAAC;AAC5D,CAAC,CAAC;AAFW,QAAA,sBAAsB,0BAEjC","sourcesContent":["// === Currency Rounding Constants ===\nexport const BaseCurrencyRoundTo = 0.01;\nexport const SecondaryCurrencyRoundTo = 1000;\n\n// === Safely rounds a number to the nearest rounding unit ===\nexport const roundCurrencySync = (amount: number, roundingFactor: number): number => {\n\tif (\n\t\ttypeof amount !== 'number' ||\n\t\tisNaN(amount) ||\n\t\ttypeof roundingFactor !== 'number' ||\n\t\troundingFactor <= 0 ||\n\t\tamount === 0\n\t) {\n\t\treturn 0;\n\t}\n\n\tconst decimals = (roundingFactor.toString().split('.')[1] || '').length;\n\tconst rounded = Math.round(amount / roundingFactor) * roundingFactor;\n\n\treturn Number(rounded.toFixed(decimals));\n};\n\n// === Specific rounding functions for base and secondary currencies ===\nexport const roundBaseCurrency = (amount: number): number => {\n\treturn roundCurrencySync(amount, BaseCurrencyRoundTo);\n};\n\nexport const roundSecondaryCurrency = (amount: number): number => {\n\treturn roundCurrencySync(amount, SecondaryCurrencyRoundTo);\n};\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lyxa.ai/core",
3
- "version": "1.1.38",
3
+ "version": "1.1.40",
4
4
  "description": "The Core system of the Lyxa services.",
5
5
  "author": "elie <42282499+Internalizable@users.noreply.github.com>",
6
6
  "license": "MIT",