@devx-commerce/plugin-gati 0.0.31-beta.6 → 0.0.31

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 (91) 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 +5 -28
  4. package/.medusa/server/src/api/store/middleware.js +1 -3
  5. package/.medusa/server/src/modules/erp/service.js +1 -14
  6. package/.medusa/server/src/modules/extended-product/models/extended-product.js +1 -2
  7. package/.medusa/server/src/modules/raw-master/models/raw-master.js +1 -2
  8. package/.medusa/server/src/modules/shape-master/models/shape-master.js +1 -2
  9. package/.medusa/server/src/workflows/create-or-update-product-options/steps/create-update-product-options.js +2 -39
  10. package/.medusa/server/src/workflows/helpers/product-helper.js +53 -145
  11. package/.medusa/server/src/workflows/party-master/steps/delete-party.js +6 -2
  12. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-deletion.js +189 -307
  13. package/.medusa/server/src/workflows/party-style-master/workflows/create-or-update-party-style-master.js +2 -108
  14. package/.medusa/server/src/workflows/raw-master/steps/delete-raw.js +11 -9
  15. package/.medusa/server/src/workflows/shape-master/steps/delete-shape.js +9 -9
  16. package/package.json +1 -1
  17. package/.medusa/server/src/api/admin/masters/[master]/[id]/route.js +0 -121
  18. package/.medusa/server/src/api/admin/masters/[master]/route.js +0 -33
  19. package/.medusa/server/src/api/admin/masters/middlewares.js +0 -35
  20. package/.medusa/server/src/api/admin/masters/query-config.js +0 -14
  21. package/.medusa/server/src/api/admin/masters/search-middleware.js +0 -16
  22. package/.medusa/server/src/api/admin/masters/utils.js +0 -108
  23. package/.medusa/server/src/api/admin/masters/validators.js +0 -28
  24. package/.medusa/server/src/api/admin/variant-options/sync/route.js +0 -313
  25. package/.medusa/server/src/api/store/gold-rate/current/route.js +0 -70
  26. package/.medusa/server/src/api/store/gold-rate/historical/route.js +0 -108
  27. package/.medusa/server/src/api/store/gold-rate/middleware.js +0 -19
  28. package/.medusa/server/src/api/store/gold-rate/validators.js +0 -37
  29. package/.medusa/server/src/jobs/process-variant-option-sync.js +0 -471
  30. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251031061116.js +0 -14
  31. package/.medusa/server/src/modules/category-group-master/migrations/Migration20251104045912.js +0 -14
  32. package/.medusa/server/src/modules/category-master/migrations/Migration20251031061327.js +0 -14
  33. package/.medusa/server/src/modules/category-master/migrations/Migration20251104045755.js +0 -14
  34. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251031061432.js +0 -14
  35. package/.medusa/server/src/modules/collection-group-master/migrations/Migration20251104050102.js +0 -14
  36. package/.medusa/server/src/modules/collection-master/migrations/Migration20251031060941.js +0 -14
  37. package/.medusa/server/src/modules/collection-master/migrations/Migration20251104050012.js +0 -14
  38. package/.medusa/server/src/modules/discount-master/migrations/Migration20251031061523.js +0 -14
  39. package/.medusa/server/src/modules/discount-master/migrations/Migration20251104050153.js +0 -14
  40. package/.medusa/server/src/modules/extended-product/migrations/Migration20251103182726.js +0 -14
  41. package/.medusa/server/src/modules/item-size-master/index.js +0 -13
  42. package/.medusa/server/src/modules/item-size-master/migrations/Migration20251031111036.js +0 -17
  43. package/.medusa/server/src/modules/item-size-master/models/item-size-master.js +0 -14
  44. package/.medusa/server/src/modules/item-size-master/service.js +0 -10
  45. package/.medusa/server/src/modules/party-master/migrations/Migration20251031061657.js +0 -14
  46. package/.medusa/server/src/modules/party-master/migrations/Migration20251104050242.js +0 -14
  47. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251031061829.js +0 -14
  48. package/.medusa/server/src/modules/promocode-master/migrations/Migration20251104050332.js +0 -14
  49. package/.medusa/server/src/modules/quality-master/index.js +0 -13
  50. package/.medusa/server/src/modules/quality-master/migrations/Migration20251031095211.js +0 -16
  51. package/.medusa/server/src/modules/quality-master/migrations/Migration20251105045114.js +0 -14
  52. package/.medusa/server/src/modules/quality-master/models/quality-master.js +0 -17
  53. package/.medusa/server/src/modules/quality-master/service.js +0 -10
  54. package/.medusa/server/src/modules/raw-master/migrations/Migration20251031061912.js +0 -14
  55. package/.medusa/server/src/modules/shape-master/migrations/Migration20251031062019.js +0 -14
  56. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251031062128.js +0 -14
  57. package/.medusa/server/src/modules/shipping-info-master/migrations/Migration20251104050501.js +0 -14
  58. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251031062303.js +0 -14
  59. package/.medusa/server/src/modules/sub-category-master/migrations/Migration20251104050743.js +0 -14
  60. package/.medusa/server/src/modules/tone-master/index.js +0 -13
  61. package/.medusa/server/src/modules/tone-master/migrations/Migration20251031104320.js +0 -16
  62. package/.medusa/server/src/modules/tone-master/models/tone-master.js +0 -15
  63. package/.medusa/server/src/modules/tone-master/service.js +0 -10
  64. package/.medusa/server/src/modules/variant-option-sync-queue/index.js +0 -13
  65. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251101082220.js +0 -19
  66. package/.medusa/server/src/modules/variant-option-sync-queue/migrations/Migration20251103123857.js +0 -16
  67. package/.medusa/server/src/modules/variant-option-sync-queue/models/variant-option-sync-queue.js +0 -23
  68. package/.medusa/server/src/modules/variant-option-sync-queue/service.js +0 -10
  69. package/.medusa/server/src/utils/build-redis-key.js +0 -30
  70. package/.medusa/server/src/workflows/helpers/variant-helper.js +0 -212
  71. package/.medusa/server/src/workflows/item-size-master/create-or-update-item-size-master.js +0 -51
  72. package/.medusa/server/src/workflows/item-size-master/index.js +0 -15
  73. package/.medusa/server/src/workflows/item-size-master/steps/create-item-size.js +0 -21
  74. package/.medusa/server/src/workflows/item-size-master/steps/delete-item-size.js +0 -23
  75. package/.medusa/server/src/workflows/item-size-master/steps/fetch-item-size-master.js +0 -55
  76. package/.medusa/server/src/workflows/item-size-master/steps/update-item-size.js +0 -36
  77. package/.medusa/server/src/workflows/party-style-master/steps/update-product-options-after-variant-update.js +0 -317
  78. package/.medusa/server/src/workflows/quality-master/create-or-update-quality-master.js +0 -58
  79. package/.medusa/server/src/workflows/quality-master/index.js +0 -30
  80. package/.medusa/server/src/workflows/quality-master/steps/create-quality.js +0 -22
  81. package/.medusa/server/src/workflows/quality-master/steps/delete-quality.js +0 -20
  82. package/.medusa/server/src/workflows/quality-master/steps/fetch-quality-master.js +0 -54
  83. package/.medusa/server/src/workflows/quality-master/steps/update-quality.js +0 -37
  84. package/.medusa/server/src/workflows/raw-master/create-or-update-raw-master.js +0 -58
  85. package/.medusa/server/src/workflows/shape-master/create-or-update-shape-master.js +0 -53
  86. package/.medusa/server/src/workflows/tone-master/create-or-update-tone-master.js +0 -52
  87. package/.medusa/server/src/workflows/tone-master/index.js +0 -30
  88. package/.medusa/server/src/workflows/tone-master/steps/create-tone.js +0 -22
  89. package/.medusa/server/src/workflows/tone-master/steps/delete-tone.js +0 -20
  90. package/.medusa/server/src/workflows/tone-master/steps/fetch-tone-master.js +0 -54
  91. package/.medusa/server/src/workflows/tone-master/steps/update-tone.js +0 -37
@@ -1,471 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.config = void 0;
4
- exports.default = processVariantOptionSync;
5
- const utils_1 = require("@medusajs/framework/utils");
6
- const core_flows_1 = require("@medusajs/medusa/core-flows");
7
- const variant_option_sync_queue_1 = require("../modules/variant-option-sync-queue");
8
- const variant_helper_1 = require("../workflows/helpers/variant-helper");
9
- /**
10
- /**
11
- * This function processes queued variant/product option sync records
12
- * (triggered by changes to master tables like Raw, Quality, Tone, Size).
13
- *
14
- * - It fetches all pending queue records,
15
- * - Determines all affected variants and their products,
16
- * - Regenerates option values for each variant based on master data,
17
- * - Updates products to ensure their option lists include all required values,
18
- * - Updates the product variants with the correct options,
19
- * - Marks each queue record as complete or failed.
20
- */
21
- async function processVariantOptionSync(container) {
22
- const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
23
- const logger = container.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
24
- const syncQueueService = container.resolve(variant_option_sync_queue_1.VARIANT_OPTION_SYNC_QUEUE_MODULE);
25
- logger.info("------Starting variant option sync job------");
26
- let pendingRecords = [];
27
- try {
28
- // Query all pending tracking records
29
- const { data: records } = await query.graph({
30
- entity: "variant_option_sync_queue",
31
- fields: [
32
- "id",
33
- "master_type",
34
- "master_code",
35
- "master_id",
36
- "old_title",
37
- "new_title",
38
- ],
39
- filters: {
40
- status: "pending",
41
- },
42
- pagination: {
43
- take: 50, // Process 50 records at a time
44
- },
45
- });
46
- pendingRecords = records || [];
47
- if (!pendingRecords || pendingRecords.length === 0) {
48
- logger.info("------No pending variant option sync records found------");
49
- return;
50
- }
51
- logger.info(`------Found ${pendingRecords.length} pending records to process------`);
52
- // Build master maps once for all records
53
- const { data: rawMasterArr } = await query.graph({
54
- entity: "raw_master",
55
- fields: ["id", "title", "raw_code"],
56
- });
57
- const { data: qualityMasterArr } = await query.graph({
58
- entity: "quality_master",
59
- fields: ["id", "title", "qly_code"],
60
- });
61
- const { data: toneMasterArr } = await query.graph({
62
- entity: "tone_master",
63
- fields: ["id", "title", "tone_code"],
64
- });
65
- const { data: itemSizeMasterArr } = await query.graph({
66
- entity: "item_size_master",
67
- fields: ["id", "title", "item_size_code"],
68
- });
69
- const { data: shapeMasterArr } = await query.graph({
70
- entity: "shape_master",
71
- fields: ["id", "title", "shape_code"],
72
- });
73
- const rawMasterMap = new Map();
74
- rawMasterArr?.forEach((x) => rawMasterMap.set(x.raw_code, x.title));
75
- const qualityMasterMap = new Map();
76
- qualityMasterArr?.forEach((x) => qualityMasterMap.set(x.qly_code, x.title));
77
- const toneMasterMap = new Map();
78
- toneMasterArr?.forEach((x) => toneMasterMap.set(x.tone_code, x.title));
79
- const itemSizeMasterMap = new Map();
80
- itemSizeMasterArr?.forEach((x) => itemSizeMasterMap.set(x.item_size_code, x.title));
81
- const shapeMasterMap = new Map();
82
- shapeMasterArr?.forEach((x) => shapeMasterMap.set(x.shape_code, x.title));
83
- const masterMaps = {
84
- rawMasterMap,
85
- qualityMasterMap,
86
- toneMasterMap,
87
- itemSizeMasterMap,
88
- shapeMasterMap,
89
- };
90
- // STEP 1: Collect all affected products across all records
91
- // Update all records to processing status
92
- await syncQueueService.updateVariantOptionSyncQueues(pendingRecords.map((r) => ({
93
- id: r.id,
94
- status: "processing",
95
- })));
96
- logger.info(`------Processing ${pendingRecords.length} records in batch------`);
97
- // Collect all affected products across all records
98
- const affectedProductsSet = new Set();
99
- const recordAffectedVariantsMap = new Map();
100
- for (const record of pendingRecords) {
101
- logger.info(`------Finding affected variants for record ${record.id}: ${record.master_type} - ${record.master_code}------`);
102
- // Find affected variants
103
- const affectedVariants = await (0, variant_helper_1.findVariantsAffectedByMasterUpdate)(query, record.master_type, record.master_code);
104
- if (affectedVariants.length === 0) {
105
- logger.info(`------No affected variants found for ${record.master_type} - ${record.master_code}------ (record id: ${record.id})`);
106
- recordAffectedVariantsMap.set(record.id, {
107
- recordId: record.id,
108
- affectedVariants: [],
109
- });
110
- continue;
111
- }
112
- // Collect affected product IDs
113
- affectedVariants.forEach((v) => affectedProductsSet.add(v.productId));
114
- recordAffectedVariantsMap.set(record.id, {
115
- recordId: record.id,
116
- affectedVariants,
117
- });
118
- logger.info(`------Found ${affectedVariants.length} affected variants for record ${record.id}------`);
119
- }
120
- const productIds = Array.from(affectedProductsSet);
121
- if (productIds.length === 0) {
122
- logger.info("------No affected products found, marking all records as completed------");
123
- // Mark all records as completed with 0 affected variants
124
- await syncQueueService.updateVariantOptionSyncQueues(pendingRecords.map((r) => ({
125
- id: r.id,
126
- status: "completed",
127
- affected_variant_count: 0,
128
- processed_at: new Date(),
129
- })));
130
- return;
131
- }
132
- logger.info(`------Found ${productIds.length} unique products affected across all records------`);
133
- // STEP 2: Process products in batches
134
- const PRODUCT_BATCH_SIZE = 10;
135
- const productBatches = [];
136
- for (let i = 0; i < productIds.length; i += PRODUCT_BATCH_SIZE) {
137
- productBatches.push(productIds.slice(i, i + PRODUCT_BATCH_SIZE));
138
- }
139
- logger.info(`------Processing ${productIds.length} products in ${productBatches.length} batches of ${PRODUCT_BATCH_SIZE}------`);
140
- // Process each product batch
141
- for (let productBatchIndex = 0; productBatchIndex < productBatches.length; productBatchIndex++) {
142
- const productBatch = productBatches[productBatchIndex];
143
- logger.info(`------Processing product batch ${productBatchIndex + 1}/${productBatches.length} (${productBatch.length} products)------`);
144
- // Get product all options for this batch
145
- const { data: products } = await query.graph({
146
- entity: "product",
147
- fields: ["id", "external_id", "options.*"],
148
- filters: {
149
- id: productBatch,
150
- },
151
- });
152
- // Get all variants for products in this batch
153
- const { data: variants } = await query.graph({
154
- entity: "product_variant",
155
- fields: [
156
- "id",
157
- "product_id",
158
- "extended_variant.id",
159
- "extended_variant.item_size",
160
- "extended_variant.party_style_details.*",
161
- ],
162
- filters: {
163
- product_id: productBatch,
164
- },
165
- });
166
- logger.info(`------Found ${variants?.length || 0} variants for product batch ${productBatchIndex + 1}------`);
167
- if (!variants || variants.length === 0) {
168
- continue;
169
- }
170
- // Get extended variant IDs
171
- const extendedVariantIds = variants
172
- .map((v) => v.extended_variant?.id)
173
- .filter(Boolean);
174
- // Get extended variants with party_style_details in batches
175
- const EXTENDED_VARIANT_BATCH_SIZE = 100;
176
- const extendedVariantBatches = [];
177
- for (let i = 0; i < extendedVariantIds.length; i += EXTENDED_VARIANT_BATCH_SIZE) {
178
- extendedVariantBatches.push(extendedVariantIds.slice(i, i + EXTENDED_VARIANT_BATCH_SIZE));
179
- }
180
- const allExtendedVariants = [];
181
- for (let evBatchIndex = 0; evBatchIndex < extendedVariantBatches.length; evBatchIndex++) {
182
- const evBatch = extendedVariantBatches[evBatchIndex];
183
- const { data: extendedVariants } = await query.graph({
184
- entity: "extended_variant",
185
- fields: ["id", "item_size", "stock_type", "party_style_details.*"],
186
- filters: {
187
- id: evBatch,
188
- },
189
- });
190
- if (extendedVariants) {
191
- allExtendedVariants.push(...extendedVariants);
192
- }
193
- }
194
- logger.info(`------Found ${allExtendedVariants.length} extended variants for product batch ${productBatchIndex + 1}------`);
195
- // Calculate variant options for this batch
196
- const productOptionsMap = new Map();
197
- const variantsToUpdate = [];
198
- for (const variant of variants) {
199
- const productId = variant.product_id;
200
- if (!productId)
201
- continue;
202
- const product = products?.find((p) => p.id === productId);
203
- const extendedVariant = allExtendedVariants.find((ev) => ev.id === variant.extended_variant?.id);
204
- if (!product || !extendedVariant)
205
- continue;
206
- // Initialize product options map if not exists
207
- if (!productOptionsMap.has(productId)) {
208
- productOptionsMap.set(productId, new Map());
209
- }
210
- const productOptionMap = productOptionsMap.get(productId);
211
- // Generate options from extended variant data
212
- const variantOptions = {};
213
- // Detect solitaire styles based on stock_type
214
- const stockType = extendedVariant?.stock_type;
215
- const isSolitaire = stockType === "LGSOLITAIRE" || stockType === "SOLITAIRE";
216
- // Size
217
- if (extendedVariant.item_size) {
218
- const sizeTitle = (masterMaps.itemSizeMasterMap.get(extendedVariant.item_size) ||
219
- String(extendedVariant.item_size)).trim();
220
- const sizeOption = product.options?.find((opt) => opt.title === "Size");
221
- if (sizeOption) {
222
- variantOptions["Size"] = sizeTitle;
223
- if (!productOptionMap.has("Size")) {
224
- productOptionMap.set("Size", new Set());
225
- }
226
- productOptionMap.get("Size").add(sizeTitle);
227
- }
228
- }
229
- // Process party_style_details for metals, metal colors, diamond qualities, shapes and solitaire carat
230
- if (extendedVariant.party_style_details) {
231
- for (const detail of extendedVariant.party_style_details) {
232
- // Metal options
233
- if (detail.raw_type === "Metal" && detail.is_base) {
234
- const qualityTitle = (masterMaps.qualityMasterMap.get(detail.qly_code) ||
235
- detail.qly_code).trim();
236
- const rawTitle = (masterMaps.rawMasterMap.get(detail.raw_code) || detail.raw_code).trim();
237
- const metalValue = `${qualityTitle} ${rawTitle}`.trim();
238
- const metalOption = product.options?.find((opt) => opt.title === "Metal");
239
- if (metalOption) {
240
- variantOptions["Metal"] = metalValue;
241
- if (!productOptionMap.has("Metal")) {
242
- productOptionMap.set("Metal", new Set());
243
- }
244
- productOptionMap.get("Metal").add(metalValue);
245
- }
246
- // Metal Color
247
- if (detail.tone_code) {
248
- let colorTitle = masterMaps.toneMasterMap.get(detail.tone_code) ||
249
- detail.tone_code;
250
- // Fallback to static mappings if not in master
251
- if (!masterMaps.toneMasterMap.has(detail.tone_code)) {
252
- if (detail.tone_code === "R")
253
- colorTitle = "Rose";
254
- else if (detail.tone_code === "Y")
255
- colorTitle = "Yellow";
256
- else if (detail.tone_code === "W")
257
- colorTitle = "White";
258
- else if (detail.tone_code === "YRW")
259
- colorTitle = "YELLOW/ROSE/WHITE";
260
- else if (detail.tone_code === "YW")
261
- colorTitle = "YELLOW/WHITE";
262
- else if (detail.tone_code === "RW")
263
- colorTitle = "ROSE/WHITE";
264
- else if (detail.tone_code === "BU")
265
- colorTitle = "BLUE";
266
- else if (detail.tone_code === "BL")
267
- colorTitle = "BLACK";
268
- }
269
- colorTitle = colorTitle.trim();
270
- const metalColorOption = product.options?.find((opt) => opt.title === "Metal Color");
271
- if (metalColorOption) {
272
- variantOptions["Metal Color"] = colorTitle;
273
- if (!productOptionMap.has("Metal Color")) {
274
- productOptionMap.set("Metal Color", new Set());
275
- }
276
- productOptionMap.get("Metal Color").add(colorTitle);
277
- }
278
- }
279
- }
280
- // Diamond Quality
281
- if (detail.raw_type === "Diamond" &&
282
- detail.tone_code &&
283
- detail.qly_code &&
284
- detail.is_base) {
285
- const toneTitle = (masterMaps.toneMasterMap.get(detail.tone_code) ||
286
- detail.tone_code).trim();
287
- const qualityTitle = (masterMaps.qualityMasterMap.get(detail.qly_code) ||
288
- detail.qly_code).trim();
289
- const diamondValue = `${toneTitle} ${qualityTitle}`.trim();
290
- const diamondOption = product.options?.find((opt) => opt.title === "Diamond Quality");
291
- if (diamondOption) {
292
- variantOptions["Diamond Quality"] = diamondValue;
293
- if (!productOptionMap.has("Diamond Quality")) {
294
- productOptionMap.set("Diamond Quality", new Set());
295
- }
296
- productOptionMap.get("Diamond Quality").add(diamondValue);
297
- }
298
- }
299
- // Shape and Carat logic
300
- if (isSolitaire &&
301
- detail.raw_type === "Diamond" &&
302
- detail.raw_code === "LGS" &&
303
- detail.is_base) {
304
- // Use the shape from the LGS base diamond detail
305
- const shapeTitle = (masterMaps.shapeMasterMap.get(detail.shape_code) ||
306
- String(detail.shape_code || "")).trim();
307
- if (shapeTitle) {
308
- const shapeOption = product.options?.find((opt) => opt.title === "Shape");
309
- if (shapeOption) {
310
- variantOptions["Shape"] = shapeTitle;
311
- if (!productOptionMap.has("Shape")) {
312
- productOptionMap.set("Shape", new Set());
313
- }
314
- productOptionMap.get("Shape").add(shapeTitle);
315
- }
316
- }
317
- // Carat from detail weight
318
- const weightStr = String(detail?.weight || "").trim();
319
- if (weightStr) {
320
- variantOptions["Carat"] = weightStr;
321
- if (!productOptionMap.has("Carat")) {
322
- productOptionMap.set("Carat", new Set());
323
- }
324
- productOptionMap.get("Carat").add(weightStr);
325
- }
326
- }
327
- }
328
- }
329
- // Sort variant options keys alphabetically for consistent ordering
330
- const sortedVariantOptions = {};
331
- const sortedKeys = Object.keys(variantOptions).sort((a, b) => a.localeCompare(b));
332
- for (const key of sortedKeys) {
333
- sortedVariantOptions[key] = variantOptions[key];
334
- }
335
- variantsToUpdate.push({
336
- variant: {
337
- id: variant.id,
338
- options: sortedVariantOptions,
339
- },
340
- });
341
- }
342
- // Update products for this batch FIRST
343
- const productsToUpdate = Array.from(productOptionsMap.entries()).map(([productId, optionsMap]) => {
344
- const options = Array.from(optionsMap.entries())
345
- .sort(([titleA], [titleB]) => titleA.localeCompare(titleB)) // Sort option titles alphabetically
346
- .map(([title, values]) => ({
347
- title,
348
- values: Array.from(values).sort((a, b) => a.localeCompare(b)), // Sort option values alphabetically
349
- }));
350
- return {
351
- id: productId,
352
- options,
353
- };
354
- });
355
- if (productsToUpdate.length > 0) {
356
- logger.info(`------Updating ${productsToUpdate.length} products in batch ${productBatchIndex + 1}------`);
357
- await (0, core_flows_1.updateProductsWorkflow)(container).run({
358
- input: {
359
- products: productsToUpdate,
360
- },
361
- });
362
- }
363
- // Update all variants for this batch at once
364
- if (variantsToUpdate.length > 0) {
365
- logger.info(`------Updating ${variantsToUpdate.length} variants for product batch ${productBatchIndex + 1}------`);
366
- await (0, core_flows_1.updateProductVariantsWorkflow)(container).run({
367
- input: {
368
- product_variants: variantsToUpdate.map((v) => v.variant),
369
- },
370
- });
371
- logger.info(`------Completed variant updates for product batch ${productBatchIndex + 1}------`);
372
- }
373
- }
374
- logger.info(`------Completed processing all product batches------`);
375
- // Final consistency check - recalculate product options from all updated variants
376
- logger.info(`------Performing final consistency check for all ${productIds.length} products------`);
377
- // Process final recalculation in batches
378
- for (let productBatchIndex = 0; productBatchIndex < productBatches.length; productBatchIndex++) {
379
- const productBatch = productBatches[productBatchIndex];
380
- // Get all variants again after update to collect latest option values
381
- const { data: updatedVariants } = await query.graph({
382
- entity: "product_variant",
383
- fields: ["id", "product_id", "options.*", "options.option.title"],
384
- filters: {
385
- product_id: productBatch,
386
- },
387
- });
388
- // Group options by product_id, then by title within each product
389
- const finalProductOptionsMap = new Map();
390
- updatedVariants.forEach((variant) => {
391
- const productId = variant.product_id;
392
- if (!productId)
393
- return;
394
- if (!finalProductOptionsMap.has(productId)) {
395
- finalProductOptionsMap.set(productId, new Map());
396
- }
397
- const optionsMap = finalProductOptionsMap.get(productId);
398
- variant.options?.forEach((optionValue) => {
399
- const title = optionValue.option?.title;
400
- const value = optionValue.value;
401
- if (title && value) {
402
- if (!optionsMap.has(title)) {
403
- optionsMap.set(title, new Set());
404
- }
405
- optionsMap.get(title).add(value);
406
- }
407
- });
408
- });
409
- // Convert to products array format for final update
410
- const finalProductsToUpdate = Array.from(finalProductOptionsMap.entries()).map(([productId, optionsMap]) => {
411
- const options = Array.from(optionsMap.entries())
412
- .sort(([titleA], [titleB]) => titleA.localeCompare(titleB)) // Sort option titles alphabetically
413
- .map(([title, values]) => ({
414
- title,
415
- values: Array.from(values).sort((a, b) => a.localeCompare(b)), // Sort option values alphabetically
416
- }));
417
- return {
418
- id: productId,
419
- options,
420
- };
421
- });
422
- // Final update of products with all option values from updated variants
423
- if (finalProductsToUpdate.length > 0) {
424
- logger.info(`------Final update of ${finalProductsToUpdate.length} products in batch ${productBatchIndex + 1}------`);
425
- await (0, core_flows_1.updateProductsWorkflow)(container).run({
426
- input: {
427
- products: finalProductsToUpdate,
428
- },
429
- });
430
- }
431
- }
432
- logger.info(`------Final consistency check completed for all products------`);
433
- // STEP 7: Mark all records as completed
434
- const recordsToComplete = [];
435
- for (const record of pendingRecords) {
436
- const recordData = recordAffectedVariantsMap.get(record.id);
437
- const affectedCount = recordData?.affectedVariants.length || 0;
438
- recordsToComplete.push({
439
- id: record.id,
440
- status: "completed",
441
- affected_variant_count: affectedCount,
442
- processed_at: new Date(),
443
- });
444
- }
445
- await syncQueueService.updateVariantOptionSyncQueues(recordsToComplete);
446
- logger.info(`------Completed processing ${pendingRecords.length} records------`);
447
- logger.info("------Variant option sync job completed------");
448
- }
449
- catch (error) {
450
- logger.error("------Error in variant option sync job:------", error);
451
- // Mark all records as failed
452
- try {
453
- await syncQueueService.updateVariantOptionSyncQueues(pendingRecords.map((r) => ({
454
- id: r.id,
455
- status: "failed",
456
- error_message: error?.message || "Unknown error",
457
- processed_at: new Date(),
458
- })));
459
- }
460
- catch (updateError) {
461
- logger.error("------Error marking records as failed:------", updateError);
462
- }
463
- throw error;
464
- }
465
- }
466
- exports.config = {
467
- name: "process-variant-option-sync",
468
- schedule: "*/30 * * * *", // Every 30 minutes
469
- // schedule: "0 3 * * *", // Every day at 3:00 AM
470
- };
471
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvY2Vzcy12YXJpYW50LW9wdGlvbi1zeW5jLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL2pvYnMvcHJvY2Vzcy12YXJpYW50LW9wdGlvbi1zeW5jLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQTBCQSwyQ0FnbkJDO0FBem9CRCxxREFBc0U7QUFDdEUsNERBR3FDO0FBRXJDLG9GQUF3RjtBQUN4Rix3RUFHNkM7QUFHN0M7Ozs7Ozs7Ozs7O0lBV0k7QUFDVyxLQUFLLFVBQVUsd0JBQXdCLENBQ3BELFNBQTBCO0lBRTFCLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDakUsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxNQUFNLENBQUMsQ0FBQztJQUNuRSxNQUFNLGdCQUFnQixHQUFrQyxTQUFTLENBQUMsT0FBTyxDQUN2RSw0REFBZ0MsQ0FDakMsQ0FBQztJQUVGLE1BQU0sQ0FBQyxJQUFJLENBQUMsOENBQThDLENBQUMsQ0FBQztJQUU1RCxJQUFJLGNBQWMsR0FBVSxFQUFFLENBQUM7SUFFL0IsSUFBSSxDQUFDO1FBQ0gscUNBQXFDO1FBQ3JDLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzFDLE1BQU0sRUFBRSwyQkFBMkI7WUFDbkMsTUFBTSxFQUFFO2dCQUNOLElBQUk7Z0JBQ0osYUFBYTtnQkFDYixhQUFhO2dCQUNiLFdBQVc7Z0JBQ1gsV0FBVztnQkFDWCxXQUFXO2FBQ1o7WUFDRCxPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLFNBQVM7YUFDbEI7WUFDRCxVQUFVLEVBQUU7Z0JBQ1YsSUFBSSxFQUFFLEVBQUUsRUFBRSwrQkFBK0I7YUFDMUM7U0FDRixDQUFDLENBQUM7UUFFSCxjQUFjLEdBQUcsT0FBTyxJQUFJLEVBQUUs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
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251031061116 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251031061116 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "category_group_master" add column if not exists "title" text null;`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "category_group_master" drop column if exists "title";`);
11
- }
12
- }
13
- exports.Migration20251031061116 = Migration20251031061116;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEwMzEwNjExMTYuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jYXRlZ29yeS1ncm91cC1tYXN0ZXIvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MTAzMTA2MTExNi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBa0Q7QUFFbEQsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsMkZBQTJGLENBQUMsQ0FBQztJQUMzRyxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw4RUFBOEUsQ0FBQyxDQUFDO0lBQzlGLENBQUM7Q0FFRjtBQVZELDBEQVVDIn0=
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251104045912 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251104045912 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "category_group_master" drop column if exists "title";`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "category_group_master" add column if not exists "title" text null;`);
11
- }
12
- }
13
- exports.Migration20251104045912 = Migration20251104045912;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTExMDQwNDU5MTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jYXRlZ29yeS1ncm91cC1tYXN0ZXIvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MTEwNDA0NTkxMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBa0Q7QUFFbEQsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsOEVBQThFLENBQUMsQ0FBQztJQUM5RixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQywyRkFBMkYsQ0FBQyxDQUFDO0lBQzNHLENBQUM7Q0FFRjtBQVZELDBEQVVDIn0=
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251031061327 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251031061327 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "category_master" add column if not exists "title" text null;`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "category_master" drop column if exists "title";`);
11
- }
12
- }
13
- exports.Migration20251031061327 = Migration20251031061327;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEwMzEwNjEzMjcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jYXRlZ29yeS1tYXN0ZXIvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MTAzMTA2MTMyNy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBa0Q7QUFFbEQsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMscUZBQXFGLENBQUMsQ0FBQztJQUNyRyxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyx3RUFBd0UsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7Q0FFRjtBQVZELDBEQVVDIn0=
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251104045755 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251104045755 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "category_master" drop column if exists "title";`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "category_master" add column if not exists "title" text null;`);
11
- }
12
- }
13
- exports.Migration20251104045755 = Migration20251104045755;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTExMDQwNDU3NTUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jYXRlZ29yeS1tYXN0ZXIvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI1MTEwNDA0NTc1NS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxzREFBa0Q7QUFFbEQsTUFBYSx1QkFBd0IsU0FBUSxzQkFBUztJQUUzQyxLQUFLLENBQUMsRUFBRTtRQUNmLElBQUksQ0FBQyxNQUFNLENBQUMsd0VBQXdFLENBQUMsQ0FBQztJQUN4RixDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxRkFBcUYsQ0FBQyxDQUFDO0lBQ3JHLENBQUM7Q0FFRjtBQVZELDBEQVVDIn0=
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251031061432 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251031061432 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "collection_group_master" add column if not exists "title" text null;`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "collection_group_master" drop column if exists "title";`);
11
- }
12
- }
13
- exports.Migration20251031061432 = Migration20251031061432;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEwMzEwNjE0MzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb2xsZWN0aW9uLWdyb3VwLW1hc3Rlci9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUxMDMxMDYxNDMyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2RkFBNkYsQ0FBQyxDQUFDO0lBQzdHLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLGdGQUFnRixDQUFDLENBQUM7SUFDaEcsQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251104050102 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251104050102 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "collection_group_master" drop column if exists "title";`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "collection_group_master" add column if not exists "title" text null;`);
11
- }
12
- }
13
- exports.Migration20251104050102 = Migration20251104050102;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTExMDQwNTAxMDIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb2xsZWN0aW9uLWdyb3VwLW1hc3Rlci9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUxMTA0MDUwMTAyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyxnRkFBZ0YsQ0FBQyxDQUFDO0lBQ2hHLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLDZGQUE2RixDQUFDLENBQUM7SUFDN0csQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251031060941 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251031060941 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "collection_master" add column if not exists "title" text null;`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "collection_master" drop column if exists "title";`);
11
- }
12
- }
13
- exports.Migration20251031060941 = Migration20251031060941;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTEwMzEwNjA5NDEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb2xsZWN0aW9uLW1hc3Rlci9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUxMDMxMDYwOTQxLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1RkFBdUYsQ0FBQyxDQUFDO0lBQ3ZHLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLDBFQUEwRSxDQUFDLENBQUM7SUFDMUYsQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==
@@ -1,14 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.Migration20251104050012 = void 0;
4
- const migrations_1 = require("@mikro-orm/migrations");
5
- class Migration20251104050012 extends migrations_1.Migration {
6
- async up() {
7
- this.addSql(`alter table if exists "collection_master" drop column if exists "title";`);
8
- }
9
- async down() {
10
- this.addSql(`alter table if exists "collection_master" add column if not exists "title" text null;`);
11
- }
12
- }
13
- exports.Migration20251104050012 = Migration20251104050012;
14
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTExMDQwNTAwMTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9jb2xsZWN0aW9uLW1hc3Rlci9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjUxMTA0MDUwMDEyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFrRDtBQUVsRCxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBRTNDLEtBQUssQ0FBQyxFQUFFO1FBQ2YsSUFBSSxDQUFDLE1BQU0sQ0FBQywwRUFBMEUsQ0FBQyxDQUFDO0lBQzFGLENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLHVGQUF1RixDQUFDLENBQUM7SUFDdkcsQ0FBQztDQUVGO0FBVkQsMERBVUMifQ==