@devx-commerce/plugin-gati 0.0.34 → 0.0.35-beta.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.medusa/server/src/api/admin/masters/[master]/[id]/route.js +121 -0
- package/.medusa/server/src/api/admin/masters/[master]/route.js +33 -0
- package/.medusa/server/src/api/admin/masters/middlewares.js +35 -0
- package/.medusa/server/src/api/admin/masters/query-config.js +14 -0
- package/.medusa/server/src/api/admin/masters/search-middleware.js +16 -0
- package/.medusa/server/src/api/admin/masters/utils.js +108 -0
- package/.medusa/server/src/api/admin/masters/validators.js +28 -0
- package/.medusa/server/src/api/admin/middlewares.js +6 -2
- package/.medusa/server/src/api/admin/variant-options/recalculate/route.js +446 -0
- package/.medusa/server/src/api/admin/variant-options/sync/route.js +329 -0
- package/.medusa/server/src/api/erp/webhook/config.js +37 -6
- package/.medusa/server/src/api/erp/webhook/route.js +10 -137
- package/.medusa/server/src/api/middlewares.js +3 -1
- package/.medusa/server/src/api/pos/gold-rate/middleware.js +13 -0
- package/.medusa/server/src/api/pos/gold-rate/route.js +96 -0
- package/.medusa/server/src/api/pos/middleware.js +13 -0
- package/.medusa/server/src/api/store/gold-rate/current/route.js +70 -0
- package/.medusa/server/src/api/store/gold-rate/historical/route.js +108 -0
- package/.medusa/server/src/api/store/gold-rate/middleware.js +19 -0
- package/.medusa/server/src/api/store/gold-rate/validators.js +37 -0
- package/.medusa/server/src/api/store/middleware.js +3 -1
- package/.medusa/server/src/jobs/process-erp-events.js +205 -0
- package/.medusa/server/src/jobs/process-variant-option-sync.js +536 -0
- package/.medusa/server/src/jobs/sync-order-erp.js +2 -2
- package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +14 -0
- package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +14 -0
- package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +14 -0
- package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +14 -0
- package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +14 -0
- package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +14 -0
- package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +14 -0
- package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +14 -0
- package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +14 -0
- package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +14 -0
- package/.medusa/server/src/modules/erp/service.js +59 -1
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +14 -0
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251119062526.js +16 -0
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251202055742.js +14 -0
- package/.medusa/server/src/modules/extended-product/migrations/Migration20251202064200.js +16 -0
- package/.medusa/server/src/modules/extended-product/models/extended-product.js +89 -9
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251119063328.js +20 -0
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120045708.js +14 -0
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120051832.js +14 -0
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251120052514.js +14 -0
- package/.medusa/server/src/modules/extended-variant/migrations/Migration20251202055952.js +14 -0
- package/.medusa/server/src/modules/extended-variant/models/extended-variant.js +145 -12
- package/.medusa/server/src/modules/item-size-master/index.js +13 -0
- package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +17 -0
- package/.medusa/server/src/modules/item-size-master/models/item-size-master.js +14 -0
- package/.medusa/server/src/modules/item-size-master/service.js +10 -0
- package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +14 -0
- package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +14 -0
- package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +14 -0
- package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +14 -0
- package/.medusa/server/src/modules/quality-master/index.js +13 -0
- package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +16 -0
- package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +14 -0
- package/.medusa/server/src/modules/quality-master/models/quality-master.js +17 -0
- package/.medusa/server/src/modules/quality-master/service.js +10 -0
- package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +14 -0
- package/.medusa/server/src/modules/raw-master/models/raw-master.js +2 -1
- package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +14 -0
- package/.medusa/server/src/modules/shape-master/models/shape-master.js +2 -1
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +14 -0
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +14 -0
- package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251203083315.js +16 -0
- package/.medusa/server/src/modules/shipping-info-master/models/shipping-info-master.js +2 -2
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +14 -0
- package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +14 -0
- package/.medusa/server/src/modules/tone-master/index.js +13 -0
- package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +16 -0
- package/.medusa/server/src/modules/tone-master/models/tone-master.js +15 -0
- package/.medusa/server/src/modules/tone-master/service.js +10 -0
- package/.medusa/server/src/modules/variant-option-sync-queue/index.js +13 -0
- package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +19 -0
- package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +16 -0
- package/.medusa/server/src/modules/variant-option-sync-queue/models/variant-option-sync-queue.js +23 -0
- package/.medusa/server/src/modules/variant-option-sync-queue/service.js +49 -0
- package/.medusa/server/src/subscribers/cutomer-updated.js +2 -1
- package/.medusa/server/src/subscribers/party-master.js +35 -34
- package/.medusa/server/src/utils/build-redis-key.js +30 -0
- package/.medusa/server/src/workflows/create-or-update-product-options/steps/create-update-product-options.js +39 -2
- package/.medusa/server/src/workflows/helpers/product-helper.js +445 -115
- package/.medusa/server/src/workflows/helpers/update-variant-option-metadata.js +105 -0
- package/.medusa/server/src/workflows/helpers/variant-helper.js +215 -0
- package/.medusa/server/src/workflows/hooks/product-updated.js +6 -11
- package/.medusa/server/src/workflows/inward-master/helper/index.js +88 -39
- package/.medusa/server/src/workflows/inward-master/workflows/update-inward.js +6 -2
- package/.medusa/server/src/workflows/item-size-master/create-or-update-item-size-master.js +51 -0
- package/.medusa/server/src/workflows/item-size-master/index.js +15 -0
- package/.medusa/server/src/workflows/item-size-master/steps/create-item-size.js +21 -0
- package/.medusa/server/src/workflows/item-size-master/steps/delete-item-size.js +23 -0
- package/.medusa/server/src/workflows/item-size-master/steps/fetch-item-size-master.js +55 -0
- package/.medusa/server/src/workflows/item-size-master/steps/update-item-size.js +36 -0
- package/.medusa/server/src/workflows/orders/steps/sync-order-to-erp.js +3 -2
- package/.medusa/server/src/workflows/orders/utils/order-helper.js +6 -5
- package/.medusa/server/src/workflows/orders/workflows/sync-order-to-erp.js +27 -2
- package/.medusa/server/src/workflows/party-master/steps/delete-party.js +4 -7
- package/.medusa/server/src/workflows/party-master/steps/fetch-party-master.js +2 -1
- package/.medusa/server/src/workflows/party-master/workflows/create-or-update-party-master.js +2 -50
- package/.medusa/server/src/workflows/party-master/workflows/delete-party-master.js +60 -0
- package/.medusa/server/src/workflows/party-master/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +80 -195
- package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +448 -0
- package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +126 -4
- package/.medusa/server/src/workflows/quality-master/create-or-update-quality-master.js +58 -0
- package/.medusa/server/src/workflows/quality-master/index.js +30 -0
- package/.medusa/server/src/workflows/quality-master/steps/create-quality.js +22 -0
- package/.medusa/server/src/workflows/quality-master/steps/delete-quality.js +20 -0
- package/.medusa/server/src/workflows/quality-master/steps/fetch-quality-master.js +54 -0
- package/.medusa/server/src/workflows/quality-master/steps/update-quality.js +37 -0
- package/.medusa/server/src/workflows/raw-master/create-or-update-raw-master.js +58 -0
- package/.medusa/server/src/workflows/raw-master/steps/delete-raw.js +9 -11
- package/.medusa/server/src/workflows/shape-master/create-or-update-shape-master.js +53 -0
- package/.medusa/server/src/workflows/shape-master/steps/delete-shape.js +9 -9
- package/.medusa/server/src/workflows/style-master/workflows/create-or-update-style-master.js +2 -2
- package/.medusa/server/src/workflows/tone-master/create-or-update-tone-master.js +52 -0
- package/.medusa/server/src/workflows/tone-master/index.js +30 -0
- package/.medusa/server/src/workflows/tone-master/steps/create-tone.js +22 -0
- package/.medusa/server/src/workflows/tone-master/steps/delete-tone.js +20 -0
- package/.medusa/server/src/workflows/tone-master/steps/fetch-tone-master.js +54 -0
- package/.medusa/server/src/workflows/tone-master/steps/update-tone.js +37 -0
- package/.medusa/server/src/workflows/update-extended-product-from-product/index.js +6 -8
- package/.medusa/server/src/workflows/update-extended-variant-from-variant/workflows/update-extended-variant-status-from-variant.js +9 -3
- package/package.json +1 -1
|
@@ -2,69 +2,12 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = POST;
|
|
4
4
|
const framework_1 = require("@medusajs/framework");
|
|
5
|
-
const bulk_jobs_task_trigger_1 = require("../../../workflows/bulk-jobs-task-trigger");
|
|
6
5
|
const workflows_1 = require("../../../workflows/erp-event/workflows");
|
|
7
|
-
const update_erp_event_1 = require("../../../workflows/erp-event/workflows/update-erp-event");
|
|
8
6
|
const config_1 = require("./config");
|
|
9
7
|
const utils_1 = require("./utils");
|
|
10
|
-
// ECS task configuration for different data types
|
|
11
|
-
const ECS_TASK_CONFIG = {
|
|
12
|
-
StyleMst: {
|
|
13
|
-
taskType: "erp-webhook-batch-processing",
|
|
14
|
-
batchSize: 200,
|
|
15
|
-
enabled: true,
|
|
16
|
-
},
|
|
17
|
-
PartyStyleMst: {
|
|
18
|
-
taskType: "erp-webhook-batch-processing",
|
|
19
|
-
batchSize: 200,
|
|
20
|
-
enabled: true,
|
|
21
|
-
},
|
|
22
|
-
Inward: {
|
|
23
|
-
taskType: "erp-webhook-batch-processing",
|
|
24
|
-
batchSize: 200,
|
|
25
|
-
enabled: true,
|
|
26
|
-
},
|
|
27
|
-
};
|
|
28
8
|
/**
|
|
29
|
-
*
|
|
30
|
-
|
|
31
|
-
async function triggerEcsTask(scope, datafor, operation, data, erpEventId) {
|
|
32
|
-
const taskConfig = ECS_TASK_CONFIG[datafor];
|
|
33
|
-
framework_1.logger.info(`🚀 Triggering ECS task for ${datafor} with ${data.length} items`);
|
|
34
|
-
try {
|
|
35
|
-
const { result } = await (0, bulk_jobs_task_trigger_1.bulkJobsTaskTriggerWorkflow)(scope).run({
|
|
36
|
-
input: {
|
|
37
|
-
taskType: taskConfig.taskType,
|
|
38
|
-
parameters: {
|
|
39
|
-
batchSize: taskConfig.batchSize,
|
|
40
|
-
erpEventId, // Pass the ERP event ID
|
|
41
|
-
},
|
|
42
|
-
},
|
|
43
|
-
});
|
|
44
|
-
framework_1.logger.info(`✅ ECS task triggered successfully for ${datafor}: ${JSON.stringify(result)}`);
|
|
45
|
-
}
|
|
46
|
-
catch (error) {
|
|
47
|
-
framework_1.logger.error(`❌ Failed to trigger ECS task for ${datafor}:`, error);
|
|
48
|
-
throw error; // Throw error since this is the main processing path
|
|
49
|
-
}
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* Processes the webhook request by executing the appropriate workflow
|
|
53
|
-
*/
|
|
54
|
-
async function processWebhookRequest(scope, datafor, operation, data, eventId) {
|
|
55
|
-
const workflowConfig = config_1.MASTER_WORKFLOW_CONFIG[datafor];
|
|
56
|
-
if (!workflowConfig) {
|
|
57
|
-
console.error(`Unsupported datafor type: ${datafor}`);
|
|
58
|
-
}
|
|
59
|
-
const workflowHandler = workflowConfig[operation];
|
|
60
|
-
if (!workflowHandler) {
|
|
61
|
-
throw new Error(`Unsupported operation: ${operation} for ${datafor}`);
|
|
62
|
-
}
|
|
63
|
-
const input = { datafor, operation, data, eventId };
|
|
64
|
-
await workflowHandler(scope, input);
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Handles the webhook request
|
|
9
|
+
* Handles the webhook request by queuing it in the erp_event table
|
|
10
|
+
* Processing is handled by a cron job that processes events in order
|
|
68
11
|
*/
|
|
69
12
|
async function POST(req, res) {
|
|
70
13
|
try {
|
|
@@ -75,39 +18,9 @@ async function POST(req, res) {
|
|
|
75
18
|
}
|
|
76
19
|
const { datafor, operation, data } = req.body;
|
|
77
20
|
// Log the received data
|
|
78
|
-
framework_1.logger.info(`Received webhook: ${operation} for ${datafor} with ${data.length} items`);
|
|
79
|
-
// Check if there's already a pending event for the same datafor and operation
|
|
80
|
-
const query = req.scope.resolve("query");
|
|
81
|
-
const existingPendingEvents = await query.graph({
|
|
82
|
-
entity: "erp_event",
|
|
83
|
-
fields: ["id", "status", "created_at"],
|
|
84
|
-
filters: {
|
|
85
|
-
datafor,
|
|
86
|
-
operation,
|
|
87
|
-
status: "pending",
|
|
88
|
-
},
|
|
89
|
-
pagination: {
|
|
90
|
-
take: 1,
|
|
91
|
-
order: { created_at: "desc" },
|
|
92
|
-
},
|
|
93
|
-
});
|
|
94
|
-
if (existingPendingEvents.data.length > 0) {
|
|
95
|
-
const existingEvent = existingPendingEvents.data[0];
|
|
96
|
-
framework_1.logger.warn(`⚠️ Duplicate processing detected! Found existing pending event ${existingEvent.id} for ${datafor} ${operation}. Adding new request in queue.`);
|
|
97
|
-
// const erpEvent = await createErpEventWorkflow(req.scope).run({
|
|
98
|
-
// input: {
|
|
99
|
-
// datafor,
|
|
100
|
-
// operation,
|
|
101
|
-
// data,
|
|
102
|
-
// status: "pending",
|
|
103
|
-
// sync_completed_at: null,
|
|
104
|
-
// },
|
|
105
|
-
// });
|
|
106
|
-
(0, utils_1.sendErrorResponse)(res, 409, `Processing already in progress for ${datafor} ${operation}. Event ID: ${existingEvent.id}.`);
|
|
107
|
-
return;
|
|
108
|
-
}
|
|
21
|
+
framework_1.logger.info(`Received webhook: ${operation} for ${datafor} with ${data.length} items - queuing for processing`);
|
|
109
22
|
const workflowConfig = config_1.MASTER_WORKFLOW_CONFIG[datafor];
|
|
110
|
-
// If unsupported type, record event as completed
|
|
23
|
+
// If unsupported type, record event as completed immediately
|
|
111
24
|
if (!workflowConfig) {
|
|
112
25
|
const completedEvent = await (0, workflows_1.createErpEventWorkflow)(req.scope).run({
|
|
113
26
|
input: {
|
|
@@ -118,14 +31,14 @@ async function POST(req, res) {
|
|
|
118
31
|
sync_completed_at: new Date(),
|
|
119
32
|
},
|
|
120
33
|
});
|
|
121
|
-
(0, utils_1.sendSuccessResponse)(res, `Successfully
|
|
34
|
+
(0, utils_1.sendSuccessResponse)(res, `Successfully queued ${operation} for ${datafor}`, {
|
|
122
35
|
processingMode: "skipped",
|
|
123
36
|
itemCount: data.length,
|
|
124
37
|
erpEventId: completedEvent.result.id,
|
|
125
38
|
});
|
|
126
39
|
return;
|
|
127
40
|
}
|
|
128
|
-
//
|
|
41
|
+
// Create ERP event with pending status - will be processed by cron job
|
|
129
42
|
const erpEvent = await (0, workflows_1.createErpEventWorkflow)(req.scope).run({
|
|
130
43
|
input: {
|
|
131
44
|
datafor,
|
|
@@ -135,57 +48,17 @@ async function POST(req, res) {
|
|
|
135
48
|
sync_completed_at: null,
|
|
136
49
|
},
|
|
137
50
|
});
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
"StyleMst",
|
|
141
|
-
"PartyStyleMst",
|
|
142
|
-
"Inward",
|
|
143
|
-
].includes(datafor);
|
|
144
|
-
if (shouldUseEcsProcessing && data.length > 100) {
|
|
145
|
-
// Update ERP event status to in-progress
|
|
146
|
-
await (0, update_erp_event_1.updateErpEventWorkflow)(req.scope).run({
|
|
147
|
-
input: {
|
|
148
|
-
id: erpEvent.result.id,
|
|
149
|
-
status: "in-progress",
|
|
150
|
-
sync_completed_at: null,
|
|
151
|
-
},
|
|
152
|
-
});
|
|
153
|
-
// Trigger ECS task for StyleMst and PartyStyleMst
|
|
154
|
-
framework_1.logger.info(`📋 Using ECS processing for ${datafor}`);
|
|
155
|
-
await triggerEcsTask(req.scope, datafor, operation, data, erpEvent.result.id);
|
|
156
|
-
}
|
|
157
|
-
else {
|
|
158
|
-
framework_1.logger.info(`⚡ Using regular workflow processing for ${datafor}`);
|
|
159
|
-
// Update ERP event status to in-progress
|
|
160
|
-
await (0, update_erp_event_1.updateErpEventWorkflow)(req.scope).run({
|
|
161
|
-
input: {
|
|
162
|
-
id: erpEvent.result.id,
|
|
163
|
-
status: "in-progress",
|
|
164
|
-
sync_completed_at: null,
|
|
165
|
-
},
|
|
166
|
-
});
|
|
167
|
-
// Use regular workflow processing for other data types
|
|
168
|
-
await processWebhookRequest(req.scope, datafor, operation, data, erpEvent.result.id);
|
|
169
|
-
// Update ERP event status to completed
|
|
170
|
-
await (0, update_erp_event_1.updateErpEventWorkflow)(req.scope).run({
|
|
171
|
-
input: {
|
|
172
|
-
id: erpEvent.result.id,
|
|
173
|
-
status: "completed",
|
|
174
|
-
sync_completed_at: new Date(),
|
|
175
|
-
},
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
(0, utils_1.sendSuccessResponse)(res, `Successfully processed ${operation} for ${datafor}`, {
|
|
179
|
-
processingMode: shouldUseEcsProcessing && data.length > 100 ? "ecs" : "workflow",
|
|
51
|
+
(0, utils_1.sendSuccessResponse)(res, `Successfully queued ${operation} for ${datafor}`, {
|
|
52
|
+
processingMode: "queued",
|
|
180
53
|
itemCount: data.length,
|
|
181
54
|
erpEventId: erpEvent.result.id,
|
|
182
55
|
});
|
|
183
56
|
}
|
|
184
57
|
catch (error) {
|
|
185
|
-
framework_1.logger.error("Error
|
|
58
|
+
framework_1.logger.error("Error queuing webhook:", error);
|
|
186
59
|
// Provide more specific error messages
|
|
187
60
|
const errorMessage = error instanceof Error ? error.message : "Internal server error";
|
|
188
61
|
(0, utils_1.sendErrorResponse)(res, 500, errorMessage);
|
|
189
62
|
}
|
|
190
63
|
}
|
|
191
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
64
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2VycC93ZWJob29rL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBZ0JBLG9CQTZFQztBQTdGRCxtREFBNkM7QUFHN0Msc0VBQWdGO0FBRWhGLHFDQUFrRDtBQUNsRCxtQ0FJaUI7QUFFakI7OztHQUdHO0FBQ0ksS0FBSyxVQUFVLElBQUksQ0FDeEIsR0FBa0IsRUFDbEIsR0FBbUI7SUFFbkIsSUFBSSxDQUFDO1FBQ0gsd0JBQXdCO1FBQ3hCLElBQUksQ0FBQyxJQUFBLDhCQUFzQixFQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ3RDLElBQUEseUJBQWlCLEVBQ2YsR0FBRyxFQUNILEdBQUcsRUFDSCw2RkFBNkYsQ0FDOUYsQ0FBQztZQUNGLE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxFQUFFLE9BQU8sRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLEdBQUcsR0FBRyxDQUFDLElBQXNCLENBQUM7UUFFaEUsd0JBQXdCO1FBQ3hCLGtCQUFNLENBQUMsSUFBSSxDQUNULHFCQUFxQixTQUFTLFFBQVEsT0FBTyxTQUFTLElBQUksQ0FBQyxNQUFNLGlDQUFpQyxDQUNuRyxDQUFDO1FBRUYsTUFBTSxjQUFjLEdBQUcsK0JBQXNCLENBQUMsT0FBTyxDQUFDLENBQUM7UUFFdkQsNkRBQTZEO1FBQzdELElBQUksQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUNwQixNQUFNLGNBQWMsR0FBRyxNQUFNLElBQUEsa0NBQXNCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztnQkFDakUsS0FBSyxFQUFFO29CQUNMLE9BQU87b0JBQ1AsU0FBUztvQkFDVCxJQUFJO29CQUNKLE1BQU0sRUFBRSxXQUFXO29CQUNuQixpQkFBaUIsRUFBRSxJQUFJLElBQUksRUFBRTtpQkFDOUI7YUFDRixDQUFDLENBQUM7WUFFSCxJQUFBLDJCQUFtQixFQUNqQixHQUFHLEVBQ0gsdUJBQXVCLFNBQVMsUUFBUSxPQUFPLEVBQUUsRUFDakQ7Z0JBQ0UsY0FBYyxFQUFFLFNBQVM7Z0JBQ3pCLFNBQVMsRUFBRSxJQUFJLENBQUMsTUFBTTtnQkFDdEIsVUFBVSxFQUFFLGNBQWMsQ0FBQyxNQUFNLENBQUMsRUFBRTthQUNyQyxDQUNGLENBQUM7WUFDRixPQUFPO1FBQ1QsQ0FBQztRQUVELHVFQUF1RTtRQUN2RSxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsa0NBQXNCLEVBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsQ0FBQztZQUMzRCxLQUFLLEVBQUU7Z0JBQ0wsT0FBTztnQkFDUCxTQUFTO2dCQUNULElBQUk7Z0JBQ0osTUFBTSxFQUFFLFNBQVM7Z0JBQ2pCLGlCQUFpQixFQUFFLElBQUk7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFBLDJCQUFtQixFQUNqQixHQUFHLEVBQ0gsdUJBQXVCLFNBQVMsUUFBUSxPQUFPLEVBQUUsRUFDakQ7WUFDRSxjQUFjLEVBQUUsUUFBUTtZQUN4QixTQUFTLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDdEIsVUFBVSxFQUFFLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtTQUMvQixDQUNGLENBQUM7SUFDSixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLGtCQUFNLENBQUMsS0FBSyxDQUFDLHdCQUF3QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBRTlDLHVDQUF1QztRQUN2QyxNQUFNLFlBQVksR0FDaEIsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7UUFFbkUsSUFBQSx5QkFBaUIsRUFBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLFlBQVksQ0FBQyxDQUFDO0lBQzVDLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -7,11 +7,13 @@ const medusa_1 = require("@medusajs/medusa");
|
|
|
7
7
|
const middlewares_1 = __importDefault(require("./admin/middlewares"));
|
|
8
8
|
const middleware_1 = __importDefault(require("./store/middleware"));
|
|
9
9
|
const middleware_2 = __importDefault(require("./erp/middleware"));
|
|
10
|
+
const middleware_3 = __importDefault(require("./pos/middleware"));
|
|
10
11
|
exports.default = (0, medusa_1.defineMiddlewares)({
|
|
11
12
|
routes: [
|
|
12
13
|
...(middlewares_1.default.routes || []),
|
|
13
14
|
...(middleware_1.default.routes || []),
|
|
14
15
|
...(middleware_2.default.routes || []),
|
|
16
|
+
...(middleware_3.default.routes || []),
|
|
15
17
|
],
|
|
16
18
|
});
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7O0FBQUEsNkNBQXFEO0FBRXJELHNFQUFtRDtBQUNuRCxvRUFBa0Q7QUFDbEQsa0VBQThDO0FBQzlDLGtFQUE4QztBQUU5QyxrQkFBZSxJQUFBLDBCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLEdBQUcsQ0FBQyxxQkFBZ0IsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxvQkFBZ0IsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ2xDLEdBQUcsQ0FBQyxvQkFBYyxDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDaEMsR0FBRyxDQUFDLG9CQUFjLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQztLQUNqQztDQUNGLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const http_1 = require("@medusajs/framework/http");
|
|
4
|
+
exports.default = (0, http_1.defineMiddlewares)({
|
|
5
|
+
routes: [
|
|
6
|
+
{
|
|
7
|
+
matcher: "/store/gold-rate",
|
|
8
|
+
method: "GET",
|
|
9
|
+
middlewares: [],
|
|
10
|
+
}
|
|
11
|
+
],
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvcG9zL2dvbGQtcmF0ZS9taWRkbGV3YXJlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBRWtDO0FBRWxDLGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLE1BQU0sRUFBRSxLQUFLO1lBQ2IsV0FBVyxFQUFFLEVBQUU7U0FDaEI7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const build_redis_key_1 = require("../../../utils/build-redis-key");
|
|
6
|
+
const api_response_1 = require("../../../lib/api-response");
|
|
7
|
+
const erp_1 = require("../../../modules/erp");
|
|
8
|
+
const GET = async (req, res) => {
|
|
9
|
+
try {
|
|
10
|
+
const grams = 1;
|
|
11
|
+
const cacheService = req.scope.resolve(utils_1.Modules.CACHE);
|
|
12
|
+
const erpService = req.scope.resolve(erp_1.ERP_MODULE);
|
|
13
|
+
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
14
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
15
|
+
const cacheKey = (0, build_redis_key_1.buildRedisKey)("gold-rate-pos", { 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
|
+
const [quality14Result, quality18Result, quality22Result] = await Promise.all([
|
|
22
|
+
query.graph({
|
|
23
|
+
entity: "quality_master",
|
|
24
|
+
fields: ["id", "qly_code", "qly_mfg_clarity"],
|
|
25
|
+
filters: {
|
|
26
|
+
qly_code: "14",
|
|
27
|
+
},
|
|
28
|
+
}),
|
|
29
|
+
query.graph({
|
|
30
|
+
entity: "quality_master",
|
|
31
|
+
fields: ["id", "qly_code", "qly_mfg_clarity"],
|
|
32
|
+
filters: {
|
|
33
|
+
qly_code: "18",
|
|
34
|
+
},
|
|
35
|
+
}),
|
|
36
|
+
query.graph({
|
|
37
|
+
entity: "quality_master",
|
|
38
|
+
fields: ["id", "qly_code", "qly_mfg_clarity"],
|
|
39
|
+
filters: {
|
|
40
|
+
qly_code: "22",
|
|
41
|
+
},
|
|
42
|
+
}),
|
|
43
|
+
]);
|
|
44
|
+
const { data: qualityMasters14 } = quality14Result;
|
|
45
|
+
const { data: qualityMasters18 } = quality18Result;
|
|
46
|
+
const { data: qualityMasters22 } = quality22Result;
|
|
47
|
+
const qly14 = qualityMasters14?.[0];
|
|
48
|
+
const qly18 = qualityMasters18?.[0];
|
|
49
|
+
const qly22 = qualityMasters22?.[0];
|
|
50
|
+
if (!qly22?.qly_mfg_clarity ||
|
|
51
|
+
!qly18?.qly_mfg_clarity ||
|
|
52
|
+
!qly14?.qly_mfg_clarity) {
|
|
53
|
+
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));
|
|
54
|
+
}
|
|
55
|
+
const goldRateData = (await erpService.getGoldRateData());
|
|
56
|
+
if (!goldRateData?.CurrentGoldRate ||
|
|
57
|
+
goldRateData.CurrentGoldRate.length === 0) {
|
|
58
|
+
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));
|
|
59
|
+
}
|
|
60
|
+
const purity = ["14", "18", "22", "24"];
|
|
61
|
+
const qlyMap = {
|
|
62
|
+
"14": qly14,
|
|
63
|
+
"18": qly18,
|
|
64
|
+
"22": qly22,
|
|
65
|
+
"24": { qly_mfg_clarity: 100 }, // 24K is always 100% purity
|
|
66
|
+
};
|
|
67
|
+
const currentGoldData = goldRateData.CurrentGoldRate?.find((item) => item.RawName === "GOLD");
|
|
68
|
+
const oldGoldData = goldRateData.CurrentGoldRate?.find((item) => item.RawName === "Old Gold");
|
|
69
|
+
const goldRateList = purity.map((karat) => {
|
|
70
|
+
const qly = qlyMap[karat];
|
|
71
|
+
return {
|
|
72
|
+
rate: `${karat}K`,
|
|
73
|
+
amount: ((currentGoldData?.SaleRate || 0) * qly.qly_mfg_clarity) / 100,
|
|
74
|
+
};
|
|
75
|
+
}).filter(Boolean);
|
|
76
|
+
const oldGoldRateList = purity.map((karat) => {
|
|
77
|
+
const qly = qlyMap[karat];
|
|
78
|
+
return {
|
|
79
|
+
rate: `${karat}K`,
|
|
80
|
+
amount: ((oldGoldData?.SaleRate || 0) * qly.qly_mfg_clarity) / 100,
|
|
81
|
+
};
|
|
82
|
+
}).filter(Boolean);
|
|
83
|
+
const result = {
|
|
84
|
+
currentGoldRateList: goldRateList,
|
|
85
|
+
oldGoldRateList: oldGoldRateList,
|
|
86
|
+
};
|
|
87
|
+
await cacheService.set(cacheKey, result, build_redis_key_1.CACHE_VALIDATION_TIMES.GOLD_RATE);
|
|
88
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)(result, "Historical gold rate fetched successfully"));
|
|
89
|
+
}
|
|
90
|
+
catch (error) {
|
|
91
|
+
console.error("Error fetching historical gold rate:", error);
|
|
92
|
+
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));
|
|
93
|
+
}
|
|
94
|
+
};
|
|
95
|
+
exports.GET = GET;
|
|
96
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3Bvcy9nb2xkLXJhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStFO0FBQy9FLG9FQUd3QztBQUN4Qyw0REFNbUM7QUFFbkMsOENBQWdEO0FBMEJ6QyxNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQWtCLEVBQ2xCLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxDQUFDLENBQUE7UUFDZixNQUFNLFlBQVksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEQsTUFBTSxVQUFVLEdBQWUsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsZ0JBQVUsQ0FBQyxDQUFDO1FBQzdELE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25FLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2pFLE1BQU0sUUFBUSxHQUFHLElBQUEsK0JBQWEsRUFBQyxlQUFlLEVBQUUsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBRTNELE1BQU0sWUFBWSxHQUFHLE1BQU0sWUFBWSxDQUFDLEdBQUcsQ0FDekMsUUFBUSxDQUNULENBQUM7UUFFRixJQUFJLFlBQVksRUFBRSxDQUFDO1lBQ2pCLE1BQU0sQ0FBQyxJQUFJLENBQ1QsK0RBQStELEtBQUssRUFBRSxDQUN2RSxDQUFDO1lBQ0YsT0FBTyxJQUFBLDhCQUFlLEVBQ3BCLEdBQUcsRUFDSCxJQUFBLG9DQUFxQixFQUNuQixZQUFZLEVBQ1osMkNBQTJDLENBQzVDLENBQ0YsQ0FBQztRQUNKLENB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
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
const framework_1 = require("@medusajs/framework");
|
|
7
|
+
const middleware_1 = __importDefault(require("./gold-rate/middleware"));
|
|
8
|
+
exports.default = (0, framework_1.defineMiddlewares)({
|
|
9
|
+
routes: [
|
|
10
|
+
...(middleware_1.default.routes || []),
|
|
11
|
+
],
|
|
12
|
+
});
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvcG9zL21pZGRsZXdhcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxtREFBd0Q7QUFFeEQsd0VBQTREO0FBRTVELGtCQUFlLElBQUEsNkJBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ04sR0FBRyxDQUFDLG9CQUFzQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7S0FDekM7Q0FDRixDQUFDLENBQUMifQ==
|
|
@@ -0,0 +1,70 @@
|
|
|
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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
|
|
@@ -0,0 +1,108 @@
|
|
|
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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
|
|
@@ -0,0 +1,19 @@
|
|
|
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==
|
|
@@ -0,0 +1,37 @@
|
|
|
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==
|
|
@@ -6,10 +6,12 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
const framework_1 = require("@medusajs/framework");
|
|
7
7
|
const middleware_1 = __importDefault(require("./carts/middleware"));
|
|
8
8
|
const middleware_2 = __importDefault(require("./custom-price/middleware"));
|
|
9
|
+
const middleware_3 = __importDefault(require("./gold-rate/middleware"));
|
|
9
10
|
exports.default = (0, framework_1.defineMiddlewares)({
|
|
10
11
|
routes: [
|
|
11
12
|
...(middleware_1.default.routes || []),
|
|
12
13
|
...(middleware_2.default.routes || []),
|
|
14
|
+
...(middleware_3.default.routes || []),
|
|
13
15
|
],
|
|
14
16
|
});
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvbWlkZGxld2FyZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLG1EQUF3RDtBQUV4RCxvRUFBdUQ7QUFDdkQsMkVBQW9FO0FBQ3BFLHdFQUE4RDtBQUU5RCxrQkFBZSxJQUFBLDZCQUFpQixFQUFDO0lBQy9CLE1BQU0sRUFBRTtRQUNOLEdBQUcsQ0FBQyxvQkFBcUIsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQ3ZDLEdBQUcsQ0FBQyxvQkFBMkIsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO1FBQzdDLEdBQUcsQ0FBQyxvQkFBd0IsQ0FBQyxNQUFNLElBQUksRUFBRSxDQUFDO0tBQzNDO0NBQ0YsQ0FBQyxDQUFDIn0=
|