@unchainedshop/core-products 1.2.40 → 2.0.0-beta2

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 (34) hide show
  1. package/jest.config.js +2 -2
  2. package/lib/db/ProductPriceRates.js +3 -1
  3. package/lib/db/ProductPriceRates.js.map +1 -1
  4. package/lib/db/ProductsSchema.d.ts +1 -0
  5. package/lib/db/ProductsSchema.js +8 -0
  6. package/lib/db/ProductsSchema.js.map +1 -1
  7. package/lib/migrations/addMigrations.d.ts +2 -0
  8. package/lib/migrations/addMigrations.js +35 -0
  9. package/lib/migrations/addMigrations.js.map +1 -0
  10. package/lib/module/configureProductPrices.d.ts +4 -0
  11. package/lib/module/configureProductPrices.js +108 -22
  12. package/lib/module/configureProductPrices.js.map +1 -1
  13. package/lib/module/configureProductsModule.d.ts +1 -1
  14. package/lib/module/configureProductsModule.js +3 -1
  15. package/lib/module/configureProductsModule.js.map +1 -1
  16. package/lib/module/utils/getPriceLevels.d.ts +1 -1
  17. package/lib/module/utils/getPriceLevels.js +5 -1
  18. package/lib/module/utils/getPriceLevels.js.map +1 -1
  19. package/lib/service/ercMetadataService.d.ts +2 -0
  20. package/lib/service/ercMetadataService.js +47 -0
  21. package/lib/service/ercMetadataService.js.map +1 -0
  22. package/lib/service/productServices.js +2 -0
  23. package/lib/service/productServices.js.map +1 -1
  24. package/package.json +8 -8
  25. package/src/db/ProductPriceRates.ts +3 -1
  26. package/src/db/ProductsSchema.js +12 -0
  27. package/src/migrations/addMigrations.ts +39 -0
  28. package/src/module/configureProductPrices.ts +118 -26
  29. package/src/module/configureProductsModule.ts +3 -0
  30. package/src/module/utils/getPriceLevels.ts +7 -5
  31. package/src/service/ercMetadataService.ts +52 -0
  32. package/src/service/productServices.ts +2 -0
  33. package/tests/configureProductPrices.test.js +92 -0
  34. package/tests/{products-index.test.ts → products-index.test.js} +3 -4
package/jest.config.js CHANGED
@@ -1,5 +1,5 @@
1
1
  /** @type {import('ts-jest/dist/types').InitialOptionsTsJest} */
2
2
  export default {
3
- preset: 'ts-jest',
3
+ preset: 'ts-jest/presets/default-esm',
4
4
  testEnvironment: 'node',
5
- };
5
+ }
@@ -2,10 +2,12 @@ import { buildDbIndexes } from '@unchainedshop/utils';
2
2
  export const ProductPriceRates = async (db) => {
3
3
  const ProductRates = db.collection('product_rates');
4
4
  // ProductRates Indexes
5
+ // TODO: Time-Series Data in MongoDb 5.0!
5
6
  await buildDbIndexes(ProductRates, [
6
7
  { index: { baseCurrency: 1 } },
7
8
  { index: { quoteCurrency: 1 } },
8
- { index: { timestamp: 1 } },
9
+ { index: { expiresAt: 1, timestamp: -1 } },
10
+ { index: { expiresAt: 1 }, options: { expireAfterSeconds: 60 * 60 * 24 } },
9
11
  ]);
10
12
  return {
11
13
  ProductRates,
@@ -1 +1 @@
1
- {"version":3,"file":"ProductPriceRates.js","sourceRoot":"","sources":["../../src/db/ProductPriceRates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAAM,EAAE,EAAE;IAChD,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAmB,eAAe,CAAC,CAAC;IACtE,uBAAuB;IACvB,MAAM,cAAc,CAAC,YAAY,EAAE;QACjC,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC9B,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;QAC/B,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE;KAC5B,CAAC,CAAC;IAEH,OAAO;QACL,YAAY;KACb,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"ProductPriceRates.js","sourceRoot":"","sources":["../../src/db/ProductPriceRates.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD,MAAM,CAAC,MAAM,iBAAiB,GAAG,KAAK,EAAE,EAAM,EAAE,EAAE;IAChD,MAAM,YAAY,GAAG,EAAE,CAAC,UAAU,CAAmB,eAAe,CAAC,CAAC;IACtE,uBAAuB;IACvB,yCAAyC;IACzC,MAAM,cAAc,CAAC,YAAY,EAAE;QACjC,EAAE,KAAK,EAAE,EAAE,YAAY,EAAE,CAAC,EAAE,EAAE;QAC9B,EAAE,KAAK,EAAE,EAAE,aAAa,EAAE,CAAC,EAAE,EAAE;QAC/B,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE;QAC1C,EAAE,KAAK,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,EAAE,OAAO,EAAE,EAAE,kBAAkB,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE;KAC3E,CAAC,CAAC;IAEH,OAAO;QACL,YAAY;KACb,CAAC;AACJ,CAAC,CAAC"}
@@ -3,6 +3,7 @@ export namespace ProductTypes {
3
3
  const ConfigurableProduct: string;
4
4
  const BundleProduct: string;
5
5
  const PlanProduct: string;
6
+ const TokenizedProduct: string;
6
7
  }
7
8
  export const ProductsSchema: SimpleSchema;
8
9
  export const ProductTextsSchema: SimpleSchema;
@@ -5,6 +5,7 @@ export const ProductTypes = {
5
5
  ConfigurableProduct: 'CONFIGURABLE_PRODUCT',
6
6
  BundleProduct: 'BUNDLE_PRODUCT',
7
7
  PlanProduct: 'PLAN_PRODUCT',
8
+ TokenizedProduct: 'TOKENIZED_PRODUCT',
8
9
  };
9
10
  const ProductCommerceSchema = new SimpleSchema({
10
11
  salesUnit: String,
@@ -23,6 +24,12 @@ const ProductWarehousingSchema = new SimpleSchema({
23
24
  baseUnit: String,
24
25
  sku: String,
25
26
  }, { requiredByDefault: false });
27
+ const ProductTokenizationSchema = new SimpleSchema({
28
+ contractAddress: String,
29
+ contractStandard: String,
30
+ tokenId: String,
31
+ supply: Number,
32
+ }, { requiredByDefault: true });
26
33
  const ProductSupplySchema = new SimpleSchema({
27
34
  weightInGram: Number,
28
35
  heightInMillimeters: Number,
@@ -80,6 +87,7 @@ export const ProductsSchema = new SimpleSchema({
80
87
  },
81
88
  'bundleItems.$': ProductBundleItemSchema,
82
89
  meta: { type: Object, blackbox: true },
90
+ tokenization: ProductTokenizationSchema,
83
91
  ...Schemas.timestampFields,
84
92
  }, { requiredByDefault: false });
85
93
  export const ProductTextsSchema = new SimpleSchema({
@@ -1 +1 @@
1
- {"version":3,"file":"ProductsSchema.js","sourceRoot":"","sources":["../../src/db/ProductsSchema.js"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ProductsSchema.js","sourceRoot":"","sources":["../../src/db/ProductsSchema.js"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ import { Migration, MigrationRepository } from '@unchainedshop/types/core';
2
+ export default function addMigrations(repository: MigrationRepository<Migration>): void;
@@ -0,0 +1,35 @@
1
+ import { ProductMediaCollection } from '../db/ProductMediaCollection';
2
+ import { ProductsCollection } from '../db/ProductsCollection';
3
+ const convertTagsToLowerCase = async (collection) => {
4
+ let bulk = collection.initializeUnorderedBulkOp();
5
+ let count = 0;
6
+ const cursor = await collection.find({ tags: { $regex: '.*[A-Z]' } });
7
+ // eslint-disable-next-line no-restricted-syntax
8
+ for await (const doc of cursor) {
9
+ const transformedTags = doc.tags.map((tag) => tag.toLowerCase());
10
+ count += 1;
11
+ bulk.find({ _id: doc._id }).updateOne({ $set: { tags: transformedTags } });
12
+ if (count % 500 === 0) {
13
+ bulk.execute();
14
+ bulk = collection.initializeUnorderedBulkOp();
15
+ count = 0;
16
+ }
17
+ }
18
+ if (count > 0)
19
+ bulk.execute();
20
+ };
21
+ export default function addMigrations(repository) {
22
+ repository?.register({
23
+ id: 20220920122600,
24
+ name: 'Convert all tags to lower case to make it easy for search',
25
+ up: async () => {
26
+ const Products = await ProductsCollection(repository.db);
27
+ const ProductMedia = await ProductMediaCollection(repository.db);
28
+ await Promise.all([
29
+ convertTagsToLowerCase(Products.Products),
30
+ convertTagsToLowerCase(ProductMedia.ProductMedias),
31
+ ]);
32
+ },
33
+ });
34
+ }
35
+ //# sourceMappingURL=addMigrations.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"addMigrations.js","sourceRoot":"","sources":["../../src/migrations/addMigrations.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,sBAAsB,EAAE,MAAM,8BAA8B,CAAC;AACtE,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,MAAM,sBAAsB,GAAG,KAAK,EAAE,UAA2B,EAAE,EAAE;IACnE,IAAI,IAAI,GAAG,UAAU,CAAC,yBAAyB,EAAE,CAAC;IAClD,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,EAAE,CAAC,CAAC;IACtE,gDAAgD;IAChD,IAAI,KAAK,EAAE,MAAM,GAAG,IAAI,MAAM,EAAE;QAC9B,MAAM,eAAe,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,EAAE,CAAC,CAAC;QACjE,KAAK,IAAI,CAAC,CAAC;QACX,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,SAAS,CAAC,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,CAAC,CAAC;QAC3E,IAAI,KAAK,GAAG,GAAG,KAAK,CAAC,EAAE;YACrB,IAAI,CAAC,OAAO,EAAE,CAAC;YACf,IAAI,GAAG,UAAU,CAAC,yBAAyB,EAAE,CAAC;YAC9C,KAAK,GAAG,CAAC,CAAC;SACX;KACF;IACD,IAAI,KAAK,GAAG,CAAC;QAAE,IAAI,CAAC,OAAO,EAAE,CAAC;AAChC,CAAC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,aAAa,CAAC,UAA0C;IAC9E,UAAU,EAAE,QAAQ,CAAC;QACnB,EAAE,EAAE,cAAc;QAClB,IAAI,EAAE,2DAA2D;QACjE,EAAE,EAAE,KAAK,IAAI,EAAE;YACb,MAAM,QAAQ,GAAG,MAAM,kBAAkB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACzD,MAAM,YAAY,GAAG,MAAM,sBAAsB,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;YACjE,MAAM,OAAO,CAAC,GAAG,CAAC;gBAChB,sBAAsB,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBACzC,sBAAsB,CAAC,YAAY,CAAC,aAAa,CAAC;aACnD,CAAC,CAAC;QACL,CAAC;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -1,4 +1,8 @@
1
1
  import { Product, ProductConfiguration, ProductsModule } from '@unchainedshop/types/products';
2
+ import { ProductPriceRate } from '@unchainedshop/types/products.pricing';
3
+ import { Currency } from '@unchainedshop/types/currencies';
4
+ export declare const getDecimals: (originDecimals: any) => any;
5
+ export declare const normalizeRate: (baseCurrency: Currency, quoteCurrency: Currency, rateRecord: ProductPriceRate) => any;
2
6
  export declare const configureProductPricesModule: ({ proxyProducts, db, }: {
3
7
  proxyProducts: (product: Product, vectors: Array<ProductConfiguration>, options: {
4
8
  includeInactive?: boolean;
@@ -3,6 +3,30 @@ import { ProductPricingDirector } from '../director/ProductPricingDirector';
3
3
  import { getPriceLevels } from './utils/getPriceLevels';
4
4
  import { getPriceRange } from './utils/getPriceRange';
5
5
  import { ProductPriceRates } from '../db/ProductPriceRates';
6
+ export const getDecimals = (originDecimals) => {
7
+ if (originDecimals === null || originDecimals === undefined) {
8
+ return 2;
9
+ }
10
+ if (originDecimals > 2) {
11
+ // cryptocurrency, always stored in MAX. 9 decimals
12
+ // WORKAROUND FOR BIGINT PROBLEM!
13
+ return Math.min(originDecimals, 9);
14
+ }
15
+ return originDecimals;
16
+ };
17
+ export const normalizeRate = (baseCurrency, quoteCurrency, rateRecord) => {
18
+ let rate = null;
19
+ if (rateRecord.quoteCurrency === quoteCurrency.isoCode) {
20
+ rate = rateRecord.rate;
21
+ }
22
+ else {
23
+ rate = 1 / rateRecord.rate;
24
+ }
25
+ const fromDecimals = getDecimals(baseCurrency.decimals);
26
+ const targetDecimals = getDecimals(quoteCurrency.decimals);
27
+ rate = fromDecimals !== targetDecimals ? rate / 10 ** (fromDecimals - targetDecimals) : rate;
28
+ return rate;
29
+ };
6
30
  export const configureProductPricesModule = ({ proxyProducts, db, }) => {
7
31
  const catalogPrice = async (product, { country: countryCode, currency: currencyCode, quantity = 1 }) => {
8
32
  const pricing = getPriceLevels({
@@ -23,7 +47,7 @@ export const configureProductPricesModule = ({ proxyProducts, db, }) => {
23
47
  return {
24
48
  _id: crypto
25
49
  .createHash('sha256')
26
- .update([product._id, countryCode, currencyCode].join(''))
50
+ .update([product._id, normalizedPrice.countryCode, normalizedPrice.currencyCode].join(''))
27
51
  .digest('hex'),
28
52
  ...normalizedPrice,
29
53
  };
@@ -158,31 +182,93 @@ export const configureProductPricesModule = ({ proxyProducts, db, }) => {
158
182
  });
159
183
  },
160
184
  rates: {
161
- getRate: async (baseCurrency, quoteCurrency, maxAge) => {
185
+ getRate: async (baseCurrency, quoteCurrency, referenceDate = new Date()) => {
162
186
  const priceRates = await (await ProductPriceRates(db)).ProductRates;
163
- const currencyRateBase = await priceRates.findOne({ baseCurrency, quoteCurrency });
164
- const currencyRateInv = await priceRates.findOne({
165
- baseCurrency: quoteCurrency,
166
- quoteCurrency: baseCurrency,
167
- });
168
- let rate = null;
169
- if (currencyRateBase &&
170
- (!currencyRateBase.timestamp || currencyRateBase.timestamp >= Date.now() / 1000 - maxAge)) {
171
- rate = currencyRateBase.rate;
172
- }
173
- else if (currencyRateInv &&
174
- (!currencyRateInv.timestamp || currencyRateInv.timestamp >= Date.now() / 1000 - maxAge)) {
175
- rate = 1 / currencyRateInv.rate;
176
- }
177
- return rate;
187
+ const mostRecentCurrencyRate = await priceRates.findOne({
188
+ $or: [
189
+ {
190
+ baseCurrency: baseCurrency.isoCode,
191
+ quoteCurrency: quoteCurrency.isoCode,
192
+ },
193
+ {
194
+ baseCurrency: quoteCurrency.isoCode,
195
+ quoteCurrency: baseCurrency.isoCode,
196
+ },
197
+ ],
198
+ timestamp: { $lte: referenceDate },
199
+ expiresAt: { $gte: referenceDate },
200
+ }, { sort: { timestamp: -1 } });
201
+ if (!mostRecentCurrencyRate)
202
+ return null;
203
+ const rate = normalizeRate(baseCurrency, quoteCurrency, mostRecentCurrencyRate);
204
+ return { rate, expiresAt: mostRecentCurrencyRate.expiresAt };
205
+ },
206
+ getRateRange: async (baseCurrency, quoteCurrency, referenceDate = new Date()) => {
207
+ const priceRates = await (await ProductPriceRates(db)).ProductRates;
208
+ const rates = await priceRates
209
+ .find({
210
+ $or: [
211
+ {
212
+ baseCurrency: baseCurrency.isoCode,
213
+ quoteCurrency: quoteCurrency.isoCode,
214
+ },
215
+ {
216
+ baseCurrency: quoteCurrency.isoCode,
217
+ quoteCurrency: baseCurrency.isoCode,
218
+ },
219
+ ],
220
+ timestamp: { $lte: referenceDate },
221
+ expiresAt: { $gte: referenceDate },
222
+ })
223
+ .toArray();
224
+ return rates.reduce((acc, rate) => {
225
+ const curRate = normalizeRate(baseCurrency, quoteCurrency, rate);
226
+ const lastMinRate = acc.min || curRate;
227
+ const lastMaxRate = acc.max || curRate;
228
+ return {
229
+ min: Math.min(curRate, lastMinRate),
230
+ max: Math.max(curRate, lastMaxRate),
231
+ };
232
+ }, {});
178
233
  },
179
- updateRate: async (rate) => {
234
+ updateRates: async (rates) => {
180
235
  const priceRates = await ProductPriceRates(db);
181
- const { baseCurrency, quoteCurrency } = rate;
182
236
  try {
183
- await priceRates.ProductRates.replaceOne({ baseCurrency, quoteCurrency }, rate, {
184
- upsert: true,
185
- });
237
+ if (rates?.length) {
238
+ const BulkOp = priceRates.ProductRates.initializeOrderedBulkOp();
239
+ rates.forEach((rate) => {
240
+ BulkOp.find({
241
+ baseCurrency: rate.baseCurrency,
242
+ quoteCurrency: rate.quoteCurrency,
243
+ rate: rate.rate,
244
+ expiresAt: { $gte: rate.timestamp },
245
+ archived: false,
246
+ })
247
+ .upsert()
248
+ .updateOne({
249
+ $set: {
250
+ expiresAt: rate.expiresAt,
251
+ },
252
+ $setOnInsert: {
253
+ baseCurrency: rate.baseCurrency,
254
+ quoteCurrency: rate.quoteCurrency,
255
+ timestamp: rate.timestamp,
256
+ rate: rate.rate,
257
+ },
258
+ });
259
+ // Archive the others that were still valid
260
+ BulkOp.find({
261
+ baseCurrency: rate.baseCurrency,
262
+ quoteCurrency: rate.quoteCurrency,
263
+ expiresAt: { $gte: rate.timestamp, $lt: rate.expiresAt },
264
+ }).update({
265
+ $set: {
266
+ archived: true,
267
+ },
268
+ });
269
+ });
270
+ await BulkOp.execute();
271
+ }
186
272
  return true;
187
273
  }
188
274
  catch (e) {
@@ -1 +1 @@
1
- {"version":3,"file":"configureProductPrices.js","sourceRoot":"","sources":["../../src/module/configureProductPrices.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configureProductPrices.js","sourceRoot":"","sources":["../../src/module/configureProductPrices.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,3 @@
1
1
  import { ModuleInput } from '@unchainedshop/types/core';
2
2
  import { ProductsModule, ProductsSettingsOptions } from '@unchainedshop/types/products';
3
- export declare const configureProductsModule: ({ db, options: productsOptions, }: ModuleInput<ProductsSettingsOptions>) => Promise<ProductsModule>;
3
+ export declare const configureProductsModule: ({ db, options: productsOptions, migrationRepository, }: ModuleInput<ProductsSettingsOptions>) => Promise<ProductsModule>;
@@ -13,6 +13,7 @@ import { configureProductReviewsModule } from './configureProductReviewsModule';
13
13
  import { configureProductTextsModule } from './configureProductTextsModule';
14
14
  import { configureProductVariationsModule } from './configureProductVariationsModule';
15
15
  import { productsSettings } from '../products-settings';
16
+ import addMigrations from '../migrations/addMigrations';
16
17
  const PRODUCT_EVENTS = [
17
18
  'PRODUCT_CREATE',
18
19
  'PRODUCT_REMOVE',
@@ -57,11 +58,12 @@ const buildFindSelector = ({ slugs, tags, includeDrafts = false, productIds, pro
57
58
  }
58
59
  return selector;
59
60
  };
60
- export const configureProductsModule = async ({ db, options: productsOptions = {}, }) => {
61
+ export const configureProductsModule = async ({ db, options: productsOptions = {}, migrationRepository, }) => {
61
62
  registerEvents(PRODUCT_EVENTS);
62
63
  await productsSettings.configureSettings(productsOptions);
63
64
  const { Products, ProductTexts } = await ProductsCollection(db);
64
65
  const mutations = generateDbMutations(Products, ProductsSchema);
66
+ addMigrations(migrationRepository);
65
67
  const deleteProductsPermanently = async ({ productId, excludedProductIds, }) => {
66
68
  const selector = productId
67
69
  ? generateDbFilterById(productId, { status: ProductStatus.DELETED })
@@ -1 +1 @@
1
- {"version":3,"file":"configureProductsModule.js","sourceRoot":"","sources":["../../src/module/configureProductsModule.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"configureProductsModule.js","sourceRoot":"","sources":["../../src/module/configureProductsModule.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,6 @@
1
1
  import { Product } from '@unchainedshop/types/products';
2
2
  export declare const getPriceLevels: (params: {
3
3
  product?: Product;
4
- currencyCode: string;
4
+ currencyCode?: string;
5
5
  countryCode: string;
6
6
  }) => import("@unchainedshop/types/products").ProductPrice[];
@@ -9,6 +9,10 @@ export const getPriceLevels = (params) => {
9
9
  return -1;
10
10
  return leftMaxQuantity - rightMaxQuantity;
11
11
  })
12
- .filter((priceLevel) => priceLevel.currencyCode === params.currencyCode && priceLevel.countryCode === params.countryCode);
12
+ .filter((priceLevel) => {
13
+ if (!params.currencyCode)
14
+ return priceLevel.countryCode === params.countryCode;
15
+ return (priceLevel.currencyCode === params.currencyCode && priceLevel.countryCode === params.countryCode);
16
+ });
13
17
  };
14
18
  //# sourceMappingURL=getPriceLevels.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"getPriceLevels.js","sourceRoot":"","sources":["../../../src/module/utils/getPriceLevels.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAI9B,EAAE,EAAE;IACH,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;SAC7C,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE;QACpF,IAAI,eAAe,KAAK,gBAAgB,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,gBAAgB,CAAC;YAAE,OAAO,CAAC,CAAC;QAC9F,IAAI,eAAe,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,gBAAgB,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,eAAe,GAAG,gBAAgB,CAAC;IAC5C,CAAC,CAAC;SACD,MAAM,CACL,CAAC,UAAU,EAAE,EAAE,CACb,UAAU,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,CACnG,CAAC;AACN,CAAC,CAAC"}
1
+ {"version":3,"file":"getPriceLevels.js","sourceRoot":"","sources":["../../../src/module/utils/getPriceLevels.ts"],"names":[],"mappings":"AAEA,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,MAI9B,EAAE,EAAE;IACH,OAAO,CAAC,MAAM,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,CAAC;SAC7C,IAAI,CAAC,CAAC,EAAE,WAAW,EAAE,eAAe,GAAG,CAAC,EAAE,EAAE,EAAE,WAAW,EAAE,gBAAgB,GAAG,CAAC,EAAE,EAAE,EAAE;QACpF,IAAI,eAAe,KAAK,gBAAgB,IAAI,CAAC,CAAC,eAAe,IAAI,CAAC,gBAAgB,CAAC;YAAE,OAAO,CAAC,CAAC;QAC9F,IAAI,eAAe,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC;QACpC,IAAI,gBAAgB,KAAK,CAAC;YAAE,OAAO,CAAC,CAAC,CAAC;QACtC,OAAO,eAAe,GAAG,gBAAgB,CAAC;IAC5C,CAAC,CAAC;SACD,MAAM,CAAC,CAAC,UAAU,EAAE,EAAE;QACrB,IAAI,CAAC,MAAM,CAAC,YAAY;YAAE,OAAO,UAAU,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,CAAC;QAC/E,OAAO,CACL,UAAU,CAAC,YAAY,KAAK,MAAM,CAAC,YAAY,IAAI,UAAU,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW,CACjG,CAAC;IACJ,CAAC,CAAC,CAAC;AACP,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { ERCMetadataService } from '@unchainedshop/types/products';
2
+ export declare const ercMetadataService: ERCMetadataService;
@@ -0,0 +1,47 @@
1
+ import { ProductContractStandard } from '@unchainedshop/types/products';
2
+ import { systemLocale } from '@unchainedshop/utils';
3
+ export const ercMetadataService = async ({ product, locale }, { modules }) => {
4
+ // if ERC721 -> tokenUri
5
+ // if ERC1155 -> uri
6
+ // -> use the contract to get the correct metadata uri from tokenId
7
+ // depending on the ERC, build the correct metadata json schema
8
+ // https://eips.ethereum.org/EIPS/eip-1155
9
+ // https://eips.ethereum.org/EIPS/eip-721
10
+ const allLanguages = await modules.languages.findLanguages({
11
+ includeInactive: false,
12
+ });
13
+ const [firstMedia] = await modules.products.media.findProductMedias({
14
+ productId: product._id,
15
+ limit: 1,
16
+ });
17
+ const file = firstMedia && (await modules.files.findFile({ fileId: firstMedia.mediaId }));
18
+ const url = file && (await modules.files.getUrl(file, {}));
19
+ const text = await modules.products.texts.findLocalizedText({
20
+ productId: product._id,
21
+ locale: locale.normalized,
22
+ });
23
+ if (product.tokenization.contractStandard === ProductContractStandard.ERC1155) {
24
+ const isDefaultLanguageActive = locale.language === systemLocale.language;
25
+ const localization = isDefaultLanguageActive
26
+ ? {
27
+ uri: `${process.env.ROOT_URL}/erc-metadata/${product.tokenization.tokenId}/{locale}.json`,
28
+ default: systemLocale.language,
29
+ locales: allLanguages.map((lang) => lang.isoCode),
30
+ }
31
+ : undefined;
32
+ return {
33
+ name: text.title,
34
+ description: text.description,
35
+ image: url,
36
+ properties: product.meta,
37
+ localization,
38
+ // decimals:
39
+ };
40
+ }
41
+ return {
42
+ name: text.title,
43
+ description: text.description,
44
+ image: url,
45
+ };
46
+ };
47
+ //# sourceMappingURL=ercMetadataService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ercMetadataService.js","sourceRoot":"","sources":["../../src/service/ercMetadataService.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAC5F,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAEpD,MAAM,CAAC,MAAM,kBAAkB,GAAuB,KAAK,EAAE,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,EAAE,EAAE;IAC/F,wBAAwB;IACxB,oBAAoB;IACpB,mEAAmE;IAEnE,+DAA+D;IAC/D,0CAA0C;IAC1C,yCAAyC;IAEzC,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,SAAS,CAAC,aAAa,CAAC;QACzD,eAAe,EAAE,KAAK;KACvB,CAAC,CAAC;IAEH,MAAM,CAAC,UAAU,CAAC,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAClE,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,KAAK,EAAE,CAAC;KACT,CAAC,CAAC;IACH,MAAM,IAAI,GAAG,UAAU,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IAC1F,MAAM,GAAG,GAAG,IAAI,IAAI,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;IAC3D,MAAM,IAAI,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,iBAAiB,CAAC;QAC1D,SAAS,EAAE,OAAO,CAAC,GAAG;QACtB,MAAM,EAAE,MAAM,CAAC,UAAU;KAC1B,CAAC,CAAC;IAEH,IAAI,OAAO,CAAC,YAAY,CAAC,gBAAgB,KAAK,uBAAuB,CAAC,OAAO,EAAE;QAC7E,MAAM,uBAAuB,GAAG,MAAM,CAAC,QAAQ,KAAK,YAAY,CAAC,QAAQ,CAAC;QAC1E,MAAM,YAAY,GAAG,uBAAuB;YAC1C,CAAC,CAAC;gBACE,GAAG,EAAE,GAAG,OAAO,CAAC,GAAG,CAAC,QAAQ,iBAAiB,OAAO,CAAC,YAAY,CAAC,OAAO,gBAAgB;gBACzF,OAAO,EAAE,YAAY,CAAC,QAAQ;gBAC9B,OAAO,EAAE,YAAY,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC;aAClD;YACH,CAAC,CAAC,SAAS,CAAC;QAEd,OAAO;YACL,IAAI,EAAE,IAAI,CAAC,KAAK;YAChB,WAAW,EAAE,IAAI,CAAC,WAAW;YAC7B,KAAK,EAAE,GAAG;YACV,UAAU,EAAE,OAAO,CAAC,IAAI;YACxB,YAAY;YACZ,YAAY;SACb,CAAC;KACH;IACD,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,KAAK;QAChB,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,KAAK,EAAE,GAAG;KACX,CAAC;AACJ,CAAC,CAAC"}
@@ -1,5 +1,7 @@
1
1
  import { removeProductService } from './removeProductService';
2
+ import { ercMetadataService } from './ercMetadataService';
2
3
  export const productServices = {
3
4
  removeProduct: removeProductService,
5
+ ercMetadata: ercMetadataService,
4
6
  };
5
7
  //# sourceMappingURL=productServices.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"productServices.js","sourceRoot":"","sources":["../../src/service/productServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAE9D,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,aAAa,EAAE,oBAAoB;CACpC,CAAC"}
1
+ {"version":3,"file":"productServices.js","sourceRoot":"","sources":["../../src/service/productServices.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE1D,MAAM,CAAC,MAAM,eAAe,GAAoB;IAC9C,aAAa,EAAE,oBAAoB;IACnC,WAAW,EAAE,kBAAkB;CAChC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@unchainedshop/core-products",
3
- "version": "1.2.40",
3
+ "version": "2.0.0-beta2",
4
4
  "main": "lib/products-index.js",
5
5
  "exports": {
6
6
  ".": "./lib/products-index.js",
@@ -12,7 +12,7 @@
12
12
  "clean": "rm -rf lib",
13
13
  "build": "npm run clean && tsc",
14
14
  "watch": "tsc -w",
15
- "test": "jest --watch"
15
+ "test": "NODE_OPTIONS=--experimental-vm-modules jest --watch ."
16
16
  },
17
17
  "repository": {
18
18
  "type": "git",
@@ -30,18 +30,18 @@
30
30
  },
31
31
  "homepage": "https://github.com/unchainedshop/unchained#readme",
32
32
  "dependencies": {
33
- "@unchainedshop/events": "^1.2.40",
34
- "@unchainedshop/file-upload": "^1.2.40",
35
- "@unchainedshop/utils": "^1.2.40",
33
+ "@unchainedshop/events": "^2.0.0-beta2",
34
+ "@unchainedshop/file-upload": "^2.0.0-beta2",
35
+ "@unchainedshop/utils": "^2.0.0-beta2",
36
36
  "locale": "^0.1.0",
37
37
  "lru-cache": "^7.14.0",
38
38
  "simpl-schema": "^3.0.1"
39
39
  },
40
40
  "devDependencies": {
41
41
  "@types/locale": "^0.1.1",
42
- "@types/node": "^16.11.66",
43
- "@unchainedshop/types": "^1.2.40",
44
- "jest": "^29.2.0",
42
+ "@types/node": "^16.11.68",
43
+ "@unchainedshop/types": "^2.0.0-beta2",
44
+ "jest": "^29.2.1",
45
45
  "ts-jest": "^29.0.3",
46
46
  "typescript": "^4.8.4"
47
47
  }
@@ -5,10 +5,12 @@ import { buildDbIndexes } from '@unchainedshop/utils';
5
5
  export const ProductPriceRates = async (db: Db) => {
6
6
  const ProductRates = db.collection<ProductPriceRate>('product_rates');
7
7
  // ProductRates Indexes
8
+ // TODO: Time-Series Data in MongoDb 5.0!
8
9
  await buildDbIndexes(ProductRates, [
9
10
  { index: { baseCurrency: 1 } },
10
11
  { index: { quoteCurrency: 1 } },
11
- { index: { timestamp: 1 } },
12
+ { index: { expiresAt: 1, timestamp: -1 } },
13
+ { index: { expiresAt: 1 }, options: { expireAfterSeconds: 60 * 60 * 24 } },
12
14
  ]);
13
15
 
14
16
  return {
@@ -6,6 +6,7 @@ export const ProductTypes = {
6
6
  ConfigurableProduct: 'CONFIGURABLE_PRODUCT',
7
7
  BundleProduct: 'BUNDLE_PRODUCT',
8
8
  PlanProduct: 'PLAN_PRODUCT',
9
+ TokenizedProduct: 'TOKENIZED_PRODUCT',
9
10
  };
10
11
 
11
12
  const ProductCommerceSchema = new SimpleSchema(
@@ -33,6 +34,16 @@ const ProductWarehousingSchema = new SimpleSchema(
33
34
  { requiredByDefault: false },
34
35
  );
35
36
 
37
+ const ProductTokenizationSchema = new SimpleSchema(
38
+ {
39
+ contractAddress: String,
40
+ contractStandard: String,
41
+ tokenId: String,
42
+ supply: Number,
43
+ },
44
+ { requiredByDefault: true },
45
+ );
46
+
36
47
  const ProductSupplySchema = new SimpleSchema(
37
48
  {
38
49
  weightInGram: Number,
@@ -105,6 +116,7 @@ export const ProductsSchema = new SimpleSchema(
105
116
  },
106
117
  'bundleItems.$': ProductBundleItemSchema,
107
118
  meta: { type: Object, blackbox: true },
119
+ tokenization: ProductTokenizationSchema,
108
120
  ...Schemas.timestampFields,
109
121
  },
110
122
  { requiredByDefault: false },
@@ -0,0 +1,39 @@
1
+ import { Migration, MigrationRepository } from '@unchainedshop/types/core';
2
+ import { Collection } from 'mongodb';
3
+
4
+ import { ProductMediaCollection } from '../db/ProductMediaCollection';
5
+ import { ProductsCollection } from '../db/ProductsCollection';
6
+
7
+ const convertTagsToLowerCase = async (collection: Collection<any>) => {
8
+ let bulk = collection.initializeUnorderedBulkOp();
9
+ let count = 0;
10
+
11
+ const cursor = await collection.find({ tags: { $regex: '.*[A-Z]' } });
12
+ // eslint-disable-next-line no-restricted-syntax
13
+ for await (const doc of cursor) {
14
+ const transformedTags = doc.tags.map((tag) => tag.toLowerCase());
15
+ count += 1;
16
+ bulk.find({ _id: doc._id }).updateOne({ $set: { tags: transformedTags } });
17
+ if (count % 500 === 0) {
18
+ bulk.execute();
19
+ bulk = collection.initializeUnorderedBulkOp();
20
+ count = 0;
21
+ }
22
+ }
23
+ if (count > 0) bulk.execute();
24
+ };
25
+
26
+ export default function addMigrations(repository: MigrationRepository<Migration>) {
27
+ repository?.register({
28
+ id: 20220920122600,
29
+ name: 'Convert all tags to lower case to make it easy for search',
30
+ up: async () => {
31
+ const Products = await ProductsCollection(repository.db);
32
+ const ProductMedia = await ProductMediaCollection(repository.db);
33
+ await Promise.all([
34
+ convertTagsToLowerCase(Products.Products),
35
+ convertTagsToLowerCase(ProductMedia.ProductMedias),
36
+ ]);
37
+ },
38
+ });
39
+ }
@@ -1,11 +1,41 @@
1
1
  import { Product, ProductConfiguration, ProductsModule } from '@unchainedshop/types/products';
2
2
  import crypto from 'crypto';
3
- import { IProductPricingSheet } from '@unchainedshop/types/products.pricing';
3
+ import { IProductPricingSheet, ProductPriceRate } from '@unchainedshop/types/products.pricing';
4
+ import { Currency } from '@unchainedshop/types/currencies';
4
5
  import { ProductPricingDirector } from '../director/ProductPricingDirector';
5
6
  import { getPriceLevels } from './utils/getPriceLevels';
6
7
  import { getPriceRange } from './utils/getPriceRange';
7
8
  import { ProductPriceRates } from '../db/ProductPriceRates';
8
9
 
10
+ export const getDecimals = (originDecimals) => {
11
+ if (originDecimals === null || originDecimals === undefined) {
12
+ return 2;
13
+ }
14
+ if (originDecimals > 2) {
15
+ // cryptocurrency, always stored in MAX. 9 decimals
16
+ // WORKAROUND FOR BIGINT PROBLEM!
17
+ return Math.min(originDecimals, 9);
18
+ }
19
+ return originDecimals;
20
+ };
21
+
22
+ export const normalizeRate = (
23
+ baseCurrency: Currency,
24
+ quoteCurrency: Currency,
25
+ rateRecord: ProductPriceRate,
26
+ ) => {
27
+ let rate = null;
28
+ if (rateRecord.quoteCurrency === quoteCurrency.isoCode) {
29
+ rate = rateRecord.rate;
30
+ } else {
31
+ rate = 1 / rateRecord.rate;
32
+ }
33
+ const fromDecimals = getDecimals(baseCurrency.decimals);
34
+ const targetDecimals = getDecimals(quoteCurrency.decimals);
35
+ rate = fromDecimals !== targetDecimals ? rate / 10 ** (fromDecimals - targetDecimals) : rate;
36
+ return rate;
37
+ };
38
+
9
39
  export const configureProductPricesModule = ({
10
40
  proxyProducts,
11
41
  db,
@@ -42,7 +72,7 @@ export const configureProductPricesModule = ({
42
72
  return {
43
73
  _id: crypto
44
74
  .createHash('sha256')
45
- .update([product._id, countryCode, currencyCode].join(''))
75
+ .update([product._id, normalizedPrice.countryCode, normalizedPrice.currencyCode].join(''))
46
76
  .digest('hex'),
47
77
  ...normalizedPrice,
48
78
  };
@@ -233,35 +263,97 @@ export const configureProductPricesModule = ({
233
263
  },
234
264
 
235
265
  rates: {
236
- getRate: async (baseCurrency, quoteCurrency, maxAge) => {
266
+ getRate: async (baseCurrency, quoteCurrency, referenceDate = new Date()) => {
237
267
  const priceRates = await (await ProductPriceRates(db)).ProductRates;
238
- const currencyRateBase = await priceRates.findOne({ baseCurrency, quoteCurrency });
239
- const currencyRateInv = await priceRates.findOne({
240
- baseCurrency: quoteCurrency,
241
- quoteCurrency: baseCurrency,
242
- });
268
+ const mostRecentCurrencyRate = await priceRates.findOne(
269
+ {
270
+ $or: [
271
+ {
272
+ baseCurrency: baseCurrency.isoCode,
273
+ quoteCurrency: quoteCurrency.isoCode,
274
+ },
275
+ {
276
+ baseCurrency: quoteCurrency.isoCode,
277
+ quoteCurrency: baseCurrency.isoCode,
278
+ },
279
+ ],
280
+ timestamp: { $lte: referenceDate },
281
+ expiresAt: { $gte: referenceDate },
282
+ },
283
+ { sort: { timestamp: -1 } },
284
+ );
243
285
 
244
- let rate = null;
245
- if (
246
- currencyRateBase &&
247
- (!currencyRateBase.timestamp || currencyRateBase.timestamp >= Date.now() / 1000 - maxAge)
248
- ) {
249
- rate = currencyRateBase.rate;
250
- } else if (
251
- currencyRateInv &&
252
- (!currencyRateInv.timestamp || currencyRateInv.timestamp >= Date.now() / 1000 - maxAge)
253
- ) {
254
- rate = 1 / currencyRateInv.rate;
255
- }
256
- return rate;
286
+ if (!mostRecentCurrencyRate) return null;
287
+ const rate = normalizeRate(baseCurrency, quoteCurrency, mostRecentCurrencyRate);
288
+ return { rate, expiresAt: mostRecentCurrencyRate.expiresAt };
289
+ },
290
+ getRateRange: async (baseCurrency, quoteCurrency, referenceDate = new Date()) => {
291
+ const priceRates = await (await ProductPriceRates(db)).ProductRates;
292
+ const rates = await priceRates
293
+ .find({
294
+ $or: [
295
+ {
296
+ baseCurrency: baseCurrency.isoCode,
297
+ quoteCurrency: quoteCurrency.isoCode,
298
+ },
299
+ {
300
+ baseCurrency: quoteCurrency.isoCode,
301
+ quoteCurrency: baseCurrency.isoCode,
302
+ },
303
+ ],
304
+ timestamp: { $lte: referenceDate },
305
+ expiresAt: { $gte: referenceDate },
306
+ })
307
+ .toArray();
308
+ return rates.reduce((acc, rate) => {
309
+ const curRate = normalizeRate(baseCurrency, quoteCurrency, rate);
310
+ const lastMinRate = acc.min || curRate;
311
+ const lastMaxRate = acc.max || curRate;
312
+ return {
313
+ min: Math.min(curRate, lastMinRate),
314
+ max: Math.max(curRate, lastMaxRate),
315
+ };
316
+ }, {} as { min: number; max: number });
257
317
  },
258
- updateRate: async (rate) => {
318
+ updateRates: async (rates) => {
259
319
  const priceRates = await ProductPriceRates(db);
260
- const { baseCurrency, quoteCurrency } = rate;
261
320
  try {
262
- await priceRates.ProductRates.replaceOne({ baseCurrency, quoteCurrency }, rate, {
263
- upsert: true,
264
- });
321
+ if (rates?.length) {
322
+ const BulkOp = priceRates.ProductRates.initializeOrderedBulkOp();
323
+ rates.forEach((rate) => {
324
+ BulkOp.find({
325
+ baseCurrency: rate.baseCurrency,
326
+ quoteCurrency: rate.quoteCurrency,
327
+ rate: rate.rate,
328
+ expiresAt: { $gte: rate.timestamp },
329
+ archived: false,
330
+ })
331
+ .upsert()
332
+ .updateOne({
333
+ $set: {
334
+ expiresAt: rate.expiresAt,
335
+ },
336
+ $setOnInsert: {
337
+ baseCurrency: rate.baseCurrency,
338
+ quoteCurrency: rate.quoteCurrency,
339
+ timestamp: rate.timestamp,
340
+ rate: rate.rate,
341
+ },
342
+ });
343
+
344
+ // Archive the others that were still valid
345
+ BulkOp.find({
346
+ baseCurrency: rate.baseCurrency,
347
+ quoteCurrency: rate.quoteCurrency,
348
+ expiresAt: { $gte: rate.timestamp, $lt: rate.expiresAt },
349
+ }).update({
350
+ $set: {
351
+ archived: true,
352
+ },
353
+ });
354
+ });
355
+ await BulkOp.execute();
356
+ }
265
357
  return true;
266
358
  } catch (e) {
267
359
  return false;
@@ -27,6 +27,7 @@ import { configureProductReviewsModule } from './configureProductReviewsModule';
27
27
  import { configureProductTextsModule } from './configureProductTextsModule';
28
28
  import { configureProductVariationsModule } from './configureProductVariationsModule';
29
29
  import { productsSettings } from '../products-settings';
30
+ import addMigrations from '../migrations/addMigrations';
30
31
 
31
32
  const PRODUCT_EVENTS = [
32
33
  'PRODUCT_CREATE',
@@ -90,6 +91,7 @@ const buildFindSelector = ({
90
91
  export const configureProductsModule = async ({
91
92
  db,
92
93
  options: productsOptions = {},
94
+ migrationRepository,
93
95
  }: ModuleInput<ProductsSettingsOptions>): Promise<ProductsModule> => {
94
96
  registerEvents(PRODUCT_EVENTS);
95
97
  await productsSettings.configureSettings(productsOptions);
@@ -97,6 +99,7 @@ export const configureProductsModule = async ({
97
99
  const { Products, ProductTexts } = await ProductsCollection(db);
98
100
 
99
101
  const mutations = generateDbMutations<Product>(Products, ProductsSchema) as ModuleMutations<Product>;
102
+ addMigrations(migrationRepository);
100
103
 
101
104
  const deleteProductsPermanently: ProductsModule['deleteProductsPermanently'] = async ({
102
105
  productId,
@@ -2,7 +2,7 @@ import { Product } from '@unchainedshop/types/products';
2
2
 
3
3
  export const getPriceLevels = (params: {
4
4
  product?: Product;
5
- currencyCode: string;
5
+ currencyCode?: string;
6
6
  countryCode: string;
7
7
  }) => {
8
8
  return (params.product?.commerce?.pricing || [])
@@ -12,8 +12,10 @@ export const getPriceLevels = (params: {
12
12
  if (rightMaxQuantity === 0) return -1;
13
13
  return leftMaxQuantity - rightMaxQuantity;
14
14
  })
15
- .filter(
16
- (priceLevel) =>
17
- priceLevel.currencyCode === params.currencyCode && priceLevel.countryCode === params.countryCode,
18
- );
15
+ .filter((priceLevel) => {
16
+ if (!params.currencyCode) return priceLevel.countryCode === params.countryCode;
17
+ return (
18
+ priceLevel.currencyCode === params.currencyCode && priceLevel.countryCode === params.countryCode
19
+ );
20
+ });
19
21
  };
@@ -0,0 +1,52 @@
1
+ import { ERCMetadataService, ProductContractStandard } from '@unchainedshop/types/products';
2
+ import { systemLocale } from '@unchainedshop/utils';
3
+
4
+ export const ercMetadataService: ERCMetadataService = async ({ product, locale }, { modules }) => {
5
+ // if ERC721 -> tokenUri
6
+ // if ERC1155 -> uri
7
+ // -> use the contract to get the correct metadata uri from tokenId
8
+
9
+ // depending on the ERC, build the correct metadata json schema
10
+ // https://eips.ethereum.org/EIPS/eip-1155
11
+ // https://eips.ethereum.org/EIPS/eip-721
12
+
13
+ const allLanguages = await modules.languages.findLanguages({
14
+ includeInactive: false,
15
+ });
16
+
17
+ const [firstMedia] = await modules.products.media.findProductMedias({
18
+ productId: product._id,
19
+ limit: 1,
20
+ });
21
+ const file = firstMedia && (await modules.files.findFile({ fileId: firstMedia.mediaId }));
22
+ const url = file && (await modules.files.getUrl(file, {}));
23
+ const text = await modules.products.texts.findLocalizedText({
24
+ productId: product._id,
25
+ locale: locale.normalized,
26
+ });
27
+
28
+ if (product.tokenization.contractStandard === ProductContractStandard.ERC1155) {
29
+ const isDefaultLanguageActive = locale.language === systemLocale.language;
30
+ const localization = isDefaultLanguageActive
31
+ ? {
32
+ uri: `${process.env.ROOT_URL}/erc-metadata/${product.tokenization.tokenId}/{locale}.json`,
33
+ default: systemLocale.language,
34
+ locales: allLanguages.map((lang) => lang.isoCode),
35
+ }
36
+ : undefined;
37
+
38
+ return {
39
+ name: text.title,
40
+ description: text.description,
41
+ image: url,
42
+ properties: product.meta,
43
+ localization,
44
+ // decimals:
45
+ };
46
+ }
47
+ return {
48
+ name: text.title,
49
+ description: text.description,
50
+ image: url,
51
+ };
52
+ };
@@ -1,6 +1,8 @@
1
1
  import { ProductServices } from '@unchainedshop/types/products';
2
2
  import { removeProductService } from './removeProductService';
3
+ import { ercMetadataService } from './ercMetadataService';
3
4
 
4
5
  export const productServices: ProductServices = {
5
6
  removeProduct: removeProductService,
7
+ ercMetadata: ercMetadataService,
6
8
  };
@@ -0,0 +1,92 @@
1
+ import { getDecimals, normalizeRate } from '../src/module/configureProductPrices';
2
+
3
+ describe('Rate conversion', () => {
4
+ test('getDecimals', () => {
5
+ expect(getDecimals(18)).toBe(9);
6
+ expect(getDecimals(8)).toBe(8);
7
+ expect(getDecimals(1)).toBe(1);
8
+ expect(getDecimals(null)).toBe(2);
9
+ expect(getDecimals(undefined)).toBe(2);
10
+ expect(getDecimals(0)).toBe(0);
11
+ });
12
+
13
+ test('normalizeRate converting between FIAT with 2 decimals', () => {
14
+ expect(normalizeRate({
15
+ isoCode: "USD",
16
+ decimals: 2
17
+ }, {
18
+ isoCode: "CHF",
19
+ decimals: 2
20
+ }, { quoteCurrency: "USD", rate: 0.9})).toBe(1.1111111111111112);
21
+
22
+ expect(normalizeRate({
23
+ isoCode: "CHF", // in Rappen
24
+ decimals: 2
25
+ }, {
26
+ isoCode: "USD", // in Pennies
27
+ decimals: 2
28
+ }, { quoteCurrency: "USD", rate: 0.9})).toBe(0.9);
29
+ });
30
+
31
+ test('normalizeRate converting between FIAT with 0 and 2 decimals', () => {
32
+ expect(normalizeRate({
33
+ isoCode: "CLP", // in Pesos
34
+ decimals: 0
35
+ }, {
36
+ isoCode: "CHF", // in Rappen
37
+ decimals: 2
38
+ }, { baseCurrency: "CLP", quoteCurrency: "CHF", rate: 0.0010451376})).toBe(0.10451376);
39
+
40
+ expect(normalizeRate({
41
+ isoCode: "CLP", // in Pesos
42
+ decimals: 0
43
+ }, {
44
+ isoCode: "CHF", // in Rappen
45
+ decimals: 2
46
+ }, { baseCurrency: "CHF", quoteCurrency: "CLP", rate: 956.75994})).toBe(0.10451942626276765);
47
+ });
48
+
49
+ test('normalizeRate converting FIAT to/from Crypto with Crypto->Fiat Pair', () => {
50
+ expect(normalizeRate({
51
+ isoCode: "USD", // in Pennies
52
+ decimals: 2
53
+ }, {
54
+ isoCode: "BTC", // In Satoshis
55
+ decimals: 9
56
+ }, { baseCurrency: "BTC", quoteCurrency: "USD", rate: 19284.61})).toBe(518.5482102049251);
57
+
58
+ expect(normalizeRate({
59
+ isoCode: "ETH", // in GWEI
60
+ decimals: 18
61
+ }, {
62
+ isoCode: "CHF", // in Rappen
63
+ decimals: 2
64
+ }, { baseCurrency: "ETH", quoteCurrency: "CHF", rate: 1311.63})).toBe(0.000131163);
65
+
66
+ // 1 ETH = 0.000131163
67
+ });
68
+
69
+ test('normalizeRate converting FIAT to/from Crypto with Fiat->Crypto Pair', () => {
70
+ expect(normalizeRate({
71
+ isoCode: "USD", // in Pennies
72
+ decimals: 2
73
+ }, {
74
+ isoCode: "BTC", // in Satoshis
75
+ decimals: 8
76
+ }, { baseCurrency: "USD", quoteCurrency: "BTC", rate: 0.000052})).toBe(52);
77
+
78
+ // 1 USD = 100 Pennies
79
+ // 100 Pennies = 5200 Satoshis
80
+
81
+ expect(normalizeRate({
82
+ isoCode: "ETH", // in GWEI
83
+ decimals: 18
84
+ }, {
85
+ isoCode: "CLP", // in Pesos
86
+ decimals: 0
87
+ }, { baseCurrency: "CLP", quoteCurrency: "ETH", rate: 0.000000794})).toBe(0.0012594458438287153);
88
+
89
+ // 1 ETH = 1,000,000,000 GWEI (10^9)
90
+ // 1,000,000,000 GWEI = 1’259’445 CLP
91
+ });
92
+ });
@@ -1,12 +1,11 @@
1
1
  import { assert } from 'chai';
2
2
  import { initDb } from '@unchainedshop/mongodb';
3
3
  import { configureProductsModule } from '@unchainedshop/core-products';
4
- import { ProductsModule } from '@unchainedshop/types/products';
5
4
 
6
- describe('Test exports', () => {
7
- let module: ProductsModule;
5
+ describe.skip('Test exports', () => {
6
+ let module;
8
7
 
9
- before(async () => {
8
+ beforeAll(async () => {
10
9
  const db = await initDb();
11
10
  module = await configureProductsModule({ db }).catch((error) => {
12
11
  console.error(error);