@devx-commerce/plugin-gati 0.0.34-beta.3 → 0.0.35

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 (114) hide show
  1. package/.medusa/server/development/erp-order-payload-example.js +76 -0
  2. package/.medusa/server/src/api/admin/middlewares.js +2 -6
  3. package/.medusa/server/src/api/erp/webhook/config.js +6 -32
  4. package/.medusa/server/src/api/middlewares.js +1 -3
  5. package/.medusa/server/src/api/store/middleware.js +1 -3
  6. package/.medusa/server/src/modules/erp/service.js +1 -59
  7. package/.medusa/server/src/modules/extended-product/models/extended-product.js +9 -89
  8. package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +12 -145
  9. package/.medusa/server/src/modules/raw-master/models/raw-master.js +1 -2
  10. package/.medusa/server/src/modules/shape-master/models/shape-master.js +1 -2
  11. package/.medusa/server/src/modules/shipping-info-master/models/shipping-info-master.js +2 -2
  12. package/.medusa/server/src/subscribers/cutomer-updated.js +2 -1
  13. package/.medusa/server/src/subscribers/party-master.js +2 -2
  14. package/.medusa/server/src/workflows/create-or-update-product-options/steps/create-update-product-options.js +2 -39
  15. package/.medusa/server/src/workflows/helpers/product-helper.js +111 -425
  16. package/.medusa/server/src/workflows/inward-master/helper/index.js +39 -88
  17. package/.medusa/server/src/workflows/party-master/steps/delete-party.js +7 -4
  18. package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
  19. package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +49 -1
  20. package/.medusa/server/src/workflows/party-master/workflows/index.js +1 -2
  21. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +189 -307
  22. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +4 -120
  23. package/.medusa/server/src/workflows/raw-master/steps/delete-raw.js +11 -9
  24. package/.medusa/server/src/workflows/shape-master/steps/delete-shape.js +9 -9
  25. package/package.json +1 -1
  26. package/.medusa/server/src/api/admin/masters/[master]/[id]/route.js +0 -121
  27. package/.medusa/server/src/api/admin/masters/[master]/route.js +0 -33
  28. package/.medusa/server/src/api/admin/masters/middlewares.js +0 -35
  29. package/.medusa/server/src/api/admin/masters/query-config.js +0 -14
  30. package/.medusa/server/src/api/admin/masters/search-middleware.js +0 -16
  31. package/.medusa/server/src/api/admin/masters/utils.js +0 -108
  32. package/.medusa/server/src/api/admin/masters/validators.js +0 -28
  33. package/.medusa/server/src/api/admin/variant-options/sync/route.js +0 -313
  34. package/.medusa/server/src/api/pos/gold-rate/middleware.js +0 -13
  35. package/.medusa/server/src/api/pos/gold-rate/route.js +0 -96
  36. package/.medusa/server/src/api/pos/middleware.js +0 -13
  37. package/.medusa/server/src/api/store/gold-rate/current/route.js +0 -70
  38. package/.medusa/server/src/api/store/gold-rate/historical/route.js +0 -108
  39. package/.medusa/server/src/api/store/gold-rate/middleware.js +0 -19
  40. package/.medusa/server/src/api/store/gold-rate/validators.js +0 -37
  41. package/.medusa/server/src/jobs/process-variant-option-sync.js +0 -521
  42. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +0 -14
  43. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +0 -14
  44. package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +0 -14
  45. package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +0 -14
  46. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +0 -14
  47. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +0 -14
  48. package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +0 -14
  49. package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +0 -14
  50. package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +0 -14
  51. package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +0 -14
  52. package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +0 -14
  53. package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +0 -16
  54. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +0 -14
  55. package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +0 -16
  56. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +0 -20
  57. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +0 -14
  58. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +0 -14
  59. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +0 -14
  60. package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +0 -14
  61. package/.medusa/server/src/modules/item-size-master/index.js +0 -13
  62. package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +0 -17
  63. package/.medusa/server/src/modules/item-size-master/models/item-size-master.js +0 -14
  64. package/.medusa/server/src/modules/item-size-master/service.js +0 -10
  65. package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +0 -14
  66. package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +0 -14
  67. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +0 -14
  68. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +0 -14
  69. package/.medusa/server/src/modules/quality-master/index.js +0 -13
  70. package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +0 -16
  71. package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +0 -14
  72. package/.medusa/server/src/modules/quality-master/models/quality-master.js +0 -17
  73. package/.medusa/server/src/modules/quality-master/service.js +0 -10
  74. package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +0 -14
  75. package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +0 -14
  76. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +0 -14
  77. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +0 -14
  78. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +0 -16
  79. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +0 -14
  80. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +0 -14
  81. package/.medusa/server/src/modules/tone-master/index.js +0 -13
  82. package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +0 -16
  83. package/.medusa/server/src/modules/tone-master/models/tone-master.js +0 -15
  84. package/.medusa/server/src/modules/tone-master/service.js +0 -10
  85. package/.medusa/server/src/modules/variant-option-sync-queue/index.js +0 -13
  86. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +0 -19
  87. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +0 -16
  88. package/.medusa/server/src/modules/variant-option-sync-queue/models/variant-option-sync-queue.js +0 -23
  89. package/.medusa/server/src/modules/variant-option-sync-queue/service.js +0 -49
  90. package/.medusa/server/src/utils/build-redis-key.js +0 -30
  91. package/.medusa/server/src/workflows/helpers/update-variant-option-metadata.js +0 -105
  92. package/.medusa/server/src/workflows/helpers/variant-helper.js +0 -212
  93. package/.medusa/server/src/workflows/item-size-master/create-or-update-item-size-master.js +0 -51
  94. package/.medusa/server/src/workflows/item-size-master/index.js +0 -15
  95. package/.medusa/server/src/workflows/item-size-master/steps/create-item-size.js +0 -21
  96. package/.medusa/server/src/workflows/item-size-master/steps/delete-item-size.js +0 -23
  97. package/.medusa/server/src/workflows/item-size-master/steps/fetch-item-size-master.js +0 -55
  98. package/.medusa/server/src/workflows/item-size-master/steps/update-item-size.js +0 -36
  99. package/.medusa/server/src/workflows/party-master/workflows/delete-party-master.js +0 -60
  100. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +0 -367
  101. package/.medusa/server/src/workflows/quality-master/create-or-update-quality-master.js +0 -58
  102. package/.medusa/server/src/workflows/quality-master/index.js +0 -30
  103. package/.medusa/server/src/workflows/quality-master/steps/create-quality.js +0 -22
  104. package/.medusa/server/src/workflows/quality-master/steps/delete-quality.js +0 -20
  105. package/.medusa/server/src/workflows/quality-master/steps/fetch-quality-master.js +0 -54
  106. package/.medusa/server/src/workflows/quality-master/steps/update-quality.js +0 -37
  107. package/.medusa/server/src/workflows/raw-master/create-or-update-raw-master.js +0 -58
  108. package/.medusa/server/src/workflows/shape-master/create-or-update-shape-master.js +0 -53
  109. package/.medusa/server/src/workflows/tone-master/create-or-update-tone-master.js +0 -52
  110. package/.medusa/server/src/workflows/tone-master/index.js +0 -30
  111. package/.medusa/server/src/workflows/tone-master/steps/create-tone.js +0 -22
  112. package/.medusa/server/src/workflows/tone-master/steps/delete-tone.js +0 -20
  113. package/.medusa/server/src/workflows/tone-master/steps/fetch-tone-master.js +0 -54
  114. package/.medusa/server/src/workflows/tone-master/steps/update-tone.js +0 -37
@@ -1,70 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.POST = void 0;
4
- const utils_1 = require("@medusajs/framework/utils");
5
- const erp_1 = require("../../../../modules/erp");
6
- const api_response_1 = require("../../../../lib/api-response");
7
- const build_redis_key_1 = require("../../../../utils/build-redis-key");
8
- const POST = async (req, res) => {
9
- try {
10
- const { grams, purity } = req.validatedBody;
11
- const cacheService = req.scope.resolve(utils_1.Modules.CACHE);
12
- const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
- const erpService = req.scope.resolve(erp_1.ERP_MODULE);
14
- const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
15
- const calculationCacheKey = (0, build_redis_key_1.buildRedisKey)("gold-rate:calculation", {
16
- grams,
17
- purity,
18
- });
19
- const cachedResult = await cacheService.get(calculationCacheKey);
20
- if (cachedResult) {
21
- logger.info(`[CURRENT-GOLD-RATE] : Returning cached result for grams: ${grams}, purity: ${purity}`);
22
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(cachedResult, "Gold rate calculated successfully"));
23
- }
24
- const goldRateData = (await erpService.getGoldRateData());
25
- if (!goldRateData?.CurrentGoldRate?.length) {
26
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("No gold rate data available from ERP", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
27
- }
28
- const { data: qualityMasters } = await query.graph({
29
- entity: "quality_master",
30
- fields: ["id", "qly_code", "qly_mfg_clarity"],
31
- filters: {
32
- qly_code: purity.toString(),
33
- },
34
- });
35
- const qly = qualityMasters?.[0];
36
- if (!qly && purity !== 24) {
37
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`Purity ${purity} not found in QualityMaster`, api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
38
- }
39
- if (!qly?.qly_mfg_clarity && purity !== 24) {
40
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(`Quality master for purity ${purity} does not have qly_mfg_clarity set`, api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
41
- }
42
- const baseGold = goldRateData.CurrentGoldRate.find((g) => g.RawName === "GOLD");
43
- if (!baseGold) {
44
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Base gold rate (GOLD) not found in ERP response", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
45
- }
46
- let ratePerGram;
47
- if (purity === 24) {
48
- ratePerGram = baseGold.SaleRate;
49
- }
50
- else {
51
- ratePerGram = (baseGold.SaleRate * qly.qly_mfg_clarity) / 100.0;
52
- }
53
- const totalPrice = ratePerGram * grams;
54
- const result = {
55
- purity,
56
- grams,
57
- base_rate: baseGold.SaleRate,
58
- rate_per_gram: ratePerGram,
59
- total_price: totalPrice,
60
- };
61
- await cacheService.set(calculationCacheKey, result, build_redis_key_1.CACHE_VALIDATION_TIMES.GOLD_RATE);
62
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result, "Gold rate calculated successfully"));
63
- }
64
- catch (error) {
65
- console.error("Error fetching gold rate:", error);
66
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error instanceof Error ? error.message : "Internal server error", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
67
- }
68
- };
69
- exports.POST = POST;
70
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2dvbGQtcmF0ZS9jdXJyZW50L3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUMvRSxpREFBcUQ7QUFFckQsK0RBTXNDO0FBRXRDLHVFQUcyQztBQTBCcEMsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUFFLEdBQWtCLEVBQUUsR0FBbUIsRUFBRSxFQUFFO0lBQ3BFLElBQUksQ0FBQztRQUNILE1BQU0sRUFBRSxLQUFLLEVBQUUsTUFBTSxFQUFFLEdBQUcsR0FBRyxDQUFDLGFBQTJDLENBQUM7UUFFMUUsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sVUFBVSxHQUFlLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFVLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRSxNQUFNLG1CQUFtQixHQUFHLElBQUEsK0JBQWEsRUFBQyx1QkFBdUIsRUFBRTtZQUNqRSxLQUFLO1lBQ0wsTUFBTTtTQUNQLENBQUMsQ0FBQztRQUVILE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FDekMsbUJBQW1CLENBQ3BCLENBQUM7UUFFRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsNERBQTRELEtBQUssYUFBYSxNQUFNLEVBQUUsQ0FDdkYsQ0FBQztZQUNGLE9BQU8sSUFBQSw4QkFBZSxFQUNw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
@@ -1,108 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.POST = void 0;
4
- const utils_1 = require("@medusajs/framework/utils");
5
- const erp_1 = require("../../../../modules/erp");
6
- const build_redis_key_1 = require("../../../../utils/build-redis-key");
7
- const api_response_1 = require("../../../../lib/api-response");
8
- const POST = async (req, res) => {
9
- try {
10
- const { grams } = req.validatedBody;
11
- const cacheService = req.scope.resolve(utils_1.Modules.CACHE);
12
- const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
- const erpService = req.scope.resolve(erp_1.ERP_MODULE);
14
- const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
15
- const cacheKey = (0, build_redis_key_1.buildRedisKey)("gold-rate:historical", { grams });
16
- const cachedResult = await cacheService.get(cacheKey);
17
- if (cachedResult) {
18
- logger.info(`[HISTORICAL-GOLD-RATE] : Returning cached result for grams: ${grams}`);
19
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(cachedResult, "Historical gold rate fetched successfully"));
20
- }
21
- // Fetch gold rate data from ERP
22
- const goldRateData = (await erpService.getGoldRateData());
23
- if (!goldRateData?.PreviousGoldRateDetail ||
24
- goldRateData.PreviousGoldRateDetail.length === 0) {
25
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("No historical gold rate data available from ERP", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
26
- }
27
- // Fetch quality masters for 14, 18 and 22 karat (24 karat uses base rate directly)
28
- const [quality14Result, quality18Result, quality22Result] = await Promise.all([
29
- query.graph({
30
- entity: "quality_master",
31
- fields: ["id", "qly_code", "qly_mfg_clarity"],
32
- filters: {
33
- qly_code: "14",
34
- },
35
- }),
36
- query.graph({
37
- entity: "quality_master",
38
- fields: ["id", "qly_code", "qly_mfg_clarity"],
39
- filters: {
40
- qly_code: "18",
41
- },
42
- }),
43
- query.graph({
44
- entity: "quality_master",
45
- fields: ["id", "qly_code", "qly_mfg_clarity"],
46
- filters: {
47
- qly_code: "22",
48
- },
49
- }),
50
- ]);
51
- const { data: qualityMasters14 } = quality14Result;
52
- const { data: qualityMasters18 } = quality18Result;
53
- const { data: qualityMasters22 } = quality22Result;
54
- const qly14 = qualityMasters14?.[0];
55
- const qly18 = qualityMasters18?.[0];
56
- const qly22 = qualityMasters22?.[0];
57
- if (!qly22?.qly_mfg_clarity ||
58
- !qly18?.qly_mfg_clarity ||
59
- !qly14?.qly_mfg_clarity) {
60
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Quality masters for 14/18/22 karat not found or missing qly_mfg_clarity", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
61
- }
62
- // Group historical data by date
63
- const dateGroups = new Map();
64
- for (const entry of goldRateData.PreviousGoldRateDetail) {
65
- if (entry.RawName === "GOLD") {
66
- const dateKey = entry.RateDate.split("T")[0]; // Extract date part
67
- if (!dateGroups.has(dateKey)) {
68
- dateGroups.set(dateKey, []);
69
- }
70
- dateGroups.get(dateKey).push(entry);
71
- }
72
- }
73
- const result = [];
74
- for (const [dateStr, entries] of dateGroups.entries()) {
75
- // Get the most recent entry for this date (in case of duplicates)
76
- const entry = entries.sort((a, b) => new Date(b.RateDate).getTime() - new Date(a.RateDate).getTime())[0];
77
- const baseSaleRate = entry.SaleRate;
78
- // Calculate rates per gram for each karat
79
- const rate24PerGram = baseSaleRate;
80
- const rate14PerGram = (baseSaleRate * qly14.qly_mfg_clarity) / 100.0;
81
- const rate22PerGram = (baseSaleRate * qly22.qly_mfg_clarity) / 100.0;
82
- const rate18PerGram = (baseSaleRate * qly18.qly_mfg_clarity) / 100.0;
83
- // Calculate total prices for given grams
84
- const carat24 = rate24PerGram * grams;
85
- const carat14 = rate14PerGram * grams;
86
- const carat22 = rate22PerGram * grams;
87
- const carat18 = rate18PerGram * grams;
88
- result.push({
89
- date: entry.RateDate,
90
- carat14,
91
- carat24,
92
- carat22,
93
- carat18,
94
- });
95
- }
96
- // // Sort by date (oldest first)
97
- // result.sort((a, b) => a.date.getTime() - b.date.getTime());
98
- // Cache the result
99
- await cacheService.set(cacheKey, result, build_redis_key_1.CACHE_VALIDATION_TIMES.GOLD_RATE);
100
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result, "Historical gold rate fetched successfully"));
101
- }
102
- catch (error) {
103
- console.error("Error fetching historical gold rate:", error);
104
- return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(error instanceof Error ? error.message : "Internal server error", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
105
- }
106
- };
107
- exports.POST = POST;
108
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2dvbGQtcmF0ZS9oaXN0b3JpY2FsL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUErRTtBQUcvRSxpREFBcUQ7QUFDckQsdUVBRzJDO0FBQzNDLCtEQU1zQztBQTBCL0IsTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUFpRCxFQUNqRCxHQUFtQixFQUNuQixFQUFFO0lBQ0YsSUFBSSxDQUFDO1FBQ0gsTUFBTSxFQUFFLEtBQUssRUFBRSxHQUFHLEdBQUcsQ0FBQyxhQUFhLENBQUM7UUFFcEMsTUFBTSxZQUFZLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZUFBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3RELE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sVUFBVSxHQUFlLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGdCQUFVLENBQUMsQ0FBQztRQUM3RCxNQUFNLE1BQU0sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUVuRSxNQUFNLFFBQVEsR0FBRyxJQUFBLCtCQUFhLEVBQUMsc0JBQXNCLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRWxFLE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FDekMsUUFBUSxDQUNULENBQUM7UUFFRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsK0RBQStELEtBQUssRUFBRSxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQixZ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
@@ -1,19 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const http_1 = require("@medusajs/framework/http");
4
- const validators_1 = require("./validators");
5
- exports.default = (0, http_1.defineMiddlewares)({
6
- routes: [
7
- {
8
- matcher: "/store/gold-rate/current",
9
- method: "POST",
10
- middlewares: [(0, http_1.validateAndTransformBody)(validators_1.GetCurrentGoldRateBody)],
11
- },
12
- {
13
- matcher: "/store/gold-rate/historical",
14
- method: "POST",
15
- middlewares: [(0, http_1.validateAndTransformBody)(validators_1.GetHistoricalGoldRateBody)],
16
- },
17
- ],
18
- });
19
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvZ29sZC1yYXRlL21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSxtREFHa0M7QUFDbEMsNkNBR3NCO0FBRXRCLGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsMEJBQTBCO1lBQ25DLE1BQU0sRUFBRSxNQUFNO1lBQ2QsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxtQ0FBc0IsQ0FBQyxDQUFDO1NBQ2hFO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsNkJBQTZCO1lBQ3RDLE1BQU0sRUFBRSxNQUFNO1lBQ2QsV0FBVyxFQUFFLENBQUMsSUFBQSwrQkFBd0IsRUFBQyxzQ0FBeUIsQ0FBQyxDQUFDO1NBQ25FO0tBQ0Y7Q0FDRixDQUFDLENBQUMifQ==
@@ -1,37 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.GetHistoricalGoldRateBody = exports.GetCurrentGoldRateBody = void 0;
4
- const zod_1 = require("zod");
5
- exports.GetCurrentGoldRateBody = zod_1.z
6
- .object({
7
- grams: zod_1.z
8
- .number({
9
- required_error: "Grams is required",
10
- invalid_type_error: "Grams must be a number",
11
- })
12
- .positive({
13
- message: "Grams must be a positive number",
14
- }),
15
- purity: zod_1.z
16
- .number({
17
- required_error: "Purity is required",
18
- invalid_type_error: "Purity must be a number",
19
- })
20
- .positive({
21
- message: "Purity must be a positive number",
22
- }),
23
- })
24
- .strict();
25
- exports.GetHistoricalGoldRateBody = zod_1.z
26
- .object({
27
- grams: zod_1.z
28
- .number({
29
- required_error: "Grams is required",
30
- invalid_type_error: "Grams must be a number",
31
- })
32
- .positive({
33
- message: "Grams must be a positive number",
34
- }),
35
- })
36
- .strict();
37
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvZ29sZC1yYXRlL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXdCO0FBRVgsUUFBQSxzQkFBc0IsR0FBRyxPQUFDO0tBQ3BDLE1BQU0sQ0FBQztJQUNOLEtBQUssRUFBRSxPQUFDO1NBQ0wsTUFBTSxDQUFDO1FBQ04sY0FBYyxFQUFFLG1CQUFtQjtRQUNuQyxrQkFBa0IsRUFBRSx3QkFBd0I7S0FDN0MsQ0FBQztTQUNELFFBQVEsQ0FBQztRQUNSLE9BQU8sRUFBRSxpQ0FBaUM7S0FDM0MsQ0FBQztJQUNKLE1BQU0sRUFBRSxPQUFDO1NBQ04sTUFBTSxDQUFDO1FBQ04sY0FBYyxFQUFFLG9CQUFvQjtRQUNwQyxrQkFBa0IsRUFBRSx5QkFBeUI7S0FDOUMsQ0FBQztTQUNELFFBQVEsQ0FBQztRQUNSLE9BQU8sRUFBRSxrQ0FBa0M7S0FDNUMsQ0FBQztDQUNMLENBQUM7S0FDRCxNQUFNLEVBQUUsQ0FBQztBQUlDLFFBQUEseUJBQXlCLEdBQUcsT0FBQztLQUN2QyxNQUFNLENBQUM7SUFDTixLQUFLLEVBQUUsT0FBQztTQUNMLE1BQU0sQ0FBQztRQUNOLGNBQWMsRUFBRSxtQkFBbUI7UUFDbkMsa0JBQWtCLEVBQUUsd0JBQXdCO0tBQzdDLENBQUM7U0FDRCxRQUFRLENBQUM7UUFDUixPQUFPLEVBQUUsaUNBQWlDO0tBQzNDLENBQUM7Q0FDTCxDQUFDO0tBQ0QsTUFBTSxFQUFFLENBQUMifQ==