@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
|
@@ -0,0 +1,329 @@
|
|
|
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 core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
6
|
+
const api_response_1 = require("../../../../lib/api-response");
|
|
7
|
+
const POST = async (req, res) => {
|
|
8
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
9
|
+
const logger = req.scope.resolve(utils_1.ContainerRegistrationKeys.LOGGER);
|
|
10
|
+
const { product_id: productIdInput, variant_id: variantIdInput } = (req.body || {});
|
|
11
|
+
if (!productIdInput && !variantIdInput) {
|
|
12
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Provide either product_id or variant_id", api_response_1.HttpStatus.BAD_REQUEST, api_response_1.ErrorCode.VALIDATION_ERROR));
|
|
13
|
+
}
|
|
14
|
+
try {
|
|
15
|
+
// Build master maps (same as job)
|
|
16
|
+
const { data: rawMasterArr } = await query.graph({
|
|
17
|
+
entity: "raw_master",
|
|
18
|
+
fields: ["id", "title", "raw_code"],
|
|
19
|
+
});
|
|
20
|
+
const { data: qualityMasterArr } = await query.graph({
|
|
21
|
+
entity: "quality_master",
|
|
22
|
+
fields: ["id", "title", "qly_code"],
|
|
23
|
+
});
|
|
24
|
+
const { data: toneMasterArr } = await query.graph({
|
|
25
|
+
entity: "tone_master",
|
|
26
|
+
fields: ["id", "title", "tone_code"],
|
|
27
|
+
});
|
|
28
|
+
const { data: itemSizeMasterArr } = await query.graph({
|
|
29
|
+
entity: "item_size_master",
|
|
30
|
+
fields: ["id", "title", "item_size_code"],
|
|
31
|
+
});
|
|
32
|
+
const rawMasterMap = new Map();
|
|
33
|
+
rawMasterArr?.forEach((x) => rawMasterMap.set(x.raw_code, x.title));
|
|
34
|
+
const qualityMasterMap = new Map();
|
|
35
|
+
qualityMasterArr?.forEach((x) => qualityMasterMap.set(x.qly_code, x.title));
|
|
36
|
+
const toneMasterMap = new Map();
|
|
37
|
+
toneMasterArr?.forEach((x) => toneMasterMap.set(x.tone_code, x.title));
|
|
38
|
+
const itemSizeMasterMap = new Map();
|
|
39
|
+
itemSizeMasterArr?.forEach((x) => itemSizeMasterMap.set(x.item_size_code, x.title));
|
|
40
|
+
const masterMaps = {
|
|
41
|
+
rawMasterMap,
|
|
42
|
+
qualityMasterMap,
|
|
43
|
+
toneMasterMap,
|
|
44
|
+
itemSizeMasterMap,
|
|
45
|
+
};
|
|
46
|
+
// Determine target variants and products
|
|
47
|
+
let productIds = [];
|
|
48
|
+
let targetVariants = [];
|
|
49
|
+
if (variantIdInput) {
|
|
50
|
+
const { data: variantArr } = await query.graph({
|
|
51
|
+
entity: "product_variant",
|
|
52
|
+
fields: ["id", "product_id"],
|
|
53
|
+
filters: { id: variantIdInput },
|
|
54
|
+
});
|
|
55
|
+
const variant = variantArr?.[0];
|
|
56
|
+
if (!variant) {
|
|
57
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Variant not found", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
|
|
58
|
+
}
|
|
59
|
+
const { data: evArr } = await query.graph({
|
|
60
|
+
entity: "extended_variant",
|
|
61
|
+
fields: ["id", "mapping_id"],
|
|
62
|
+
filters: { mapping_id: variant.id },
|
|
63
|
+
});
|
|
64
|
+
const ev = evArr?.[0];
|
|
65
|
+
if (!ev) {
|
|
66
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("Extended variant not found for mapping", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
|
|
67
|
+
}
|
|
68
|
+
productIds = [variant.product_id];
|
|
69
|
+
targetVariants = [
|
|
70
|
+
{ variantId: variant.id, productId: variant.product_id, extendedVariantId: ev.id },
|
|
71
|
+
];
|
|
72
|
+
}
|
|
73
|
+
else if (productIdInput) {
|
|
74
|
+
const { data: variantArr } = await query.graph({
|
|
75
|
+
entity: "product_variant",
|
|
76
|
+
fields: ["id", "product_id"],
|
|
77
|
+
filters: { product_id: productIdInput },
|
|
78
|
+
});
|
|
79
|
+
if (!variantArr || variantArr.length === 0) {
|
|
80
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("No variants for product", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
|
|
81
|
+
}
|
|
82
|
+
const mappingIds = variantArr.map((v) => v.id);
|
|
83
|
+
const { data: evArr } = await query.graph({
|
|
84
|
+
entity: "extended_variant",
|
|
85
|
+
fields: ["id", "mapping_id"],
|
|
86
|
+
filters: { mapping_id: mappingIds },
|
|
87
|
+
});
|
|
88
|
+
const mappingToEv = new Map();
|
|
89
|
+
evArr?.forEach((ev) => {
|
|
90
|
+
if (ev.mapping_id)
|
|
91
|
+
mappingToEv.set(ev.mapping_id, ev.id);
|
|
92
|
+
});
|
|
93
|
+
productIds = [productIdInput];
|
|
94
|
+
targetVariants = variantArr
|
|
95
|
+
.filter((v) => mappingToEv.has(v.id))
|
|
96
|
+
.map((v) => ({
|
|
97
|
+
variantId: v.id,
|
|
98
|
+
productId: v.product_id,
|
|
99
|
+
extendedVariantId: mappingToEv.get(v.id),
|
|
100
|
+
}));
|
|
101
|
+
if (targetVariants.length === 0) {
|
|
102
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)("No extended variants found for product variants", api_response_1.HttpStatus.NOT_FOUND, api_response_1.ErrorCode.NOT_FOUND));
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// Load products with options
|
|
106
|
+
const { data: products } = await query.graph({
|
|
107
|
+
entity: "product",
|
|
108
|
+
fields: ["id", "external_id", "options.*"],
|
|
109
|
+
filters: { id: productIds },
|
|
110
|
+
});
|
|
111
|
+
// Load extended variants for target list (include details needed for option generation)
|
|
112
|
+
const evIds = targetVariants.map((v) => v.extendedVariantId);
|
|
113
|
+
const { data: extendedVariants } = await query.graph({
|
|
114
|
+
entity: "extended_variant",
|
|
115
|
+
fields: [
|
|
116
|
+
"id",
|
|
117
|
+
"mapping_id",
|
|
118
|
+
"party_style_id",
|
|
119
|
+
"style_id",
|
|
120
|
+
"item_size",
|
|
121
|
+
"party_style_details.*",
|
|
122
|
+
],
|
|
123
|
+
filters: { id: evIds },
|
|
124
|
+
});
|
|
125
|
+
const newOptionValuesByProduct = new Map();
|
|
126
|
+
const variantsToUpdate = [];
|
|
127
|
+
for (const tv of targetVariants) {
|
|
128
|
+
const product = products?.find((p) => p.id === tv.productId);
|
|
129
|
+
const extendedVariant = extendedVariants?.find((ev) => ev.id === tv.extendedVariantId);
|
|
130
|
+
if (!product || !extendedVariant)
|
|
131
|
+
continue;
|
|
132
|
+
if (!newOptionValuesByProduct.has(tv.productId)) {
|
|
133
|
+
newOptionValuesByProduct.set(tv.productId, new Map());
|
|
134
|
+
}
|
|
135
|
+
const productOptionMap = newOptionValuesByProduct.get(tv.productId);
|
|
136
|
+
const variantOptions = {};
|
|
137
|
+
// Size
|
|
138
|
+
if (extendedVariant.item_size) {
|
|
139
|
+
const sizeTitle = (masterMaps.itemSizeMasterMap.get(extendedVariant.item_size) ||
|
|
140
|
+
String(extendedVariant.item_size)).trim();
|
|
141
|
+
const sizeOption = product.options?.find((opt) => opt.title === "Size");
|
|
142
|
+
if (sizeOption) {
|
|
143
|
+
variantOptions["Size"] = sizeTitle;
|
|
144
|
+
// Track this value for product options update
|
|
145
|
+
if (!productOptionMap.has("Size")) {
|
|
146
|
+
productOptionMap.set("Size", new Set());
|
|
147
|
+
}
|
|
148
|
+
productOptionMap.get("Size").add(sizeTitle);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
// Process party_style_details for metals, metal colors, and diamond qualities
|
|
152
|
+
let hasMetalOption = false;
|
|
153
|
+
let hasDiamondOption = false;
|
|
154
|
+
if (extendedVariant.party_style_details) {
|
|
155
|
+
// First, find diamond details for processing
|
|
156
|
+
const diamondDetails = extendedVariant.party_style_details.filter((detail) => detail.raw_type === "Diamond" &&
|
|
157
|
+
detail.tone_code &&
|
|
158
|
+
detail.qly_code);
|
|
159
|
+
const baseDiamondDetail = diamondDetails.find((detail) => detail.is_base);
|
|
160
|
+
const diamondDetailToUse = baseDiamondDetail || diamondDetails[0];
|
|
161
|
+
for (const detail of extendedVariant.party_style_details) {
|
|
162
|
+
// Metal options
|
|
163
|
+
if (detail.raw_type === "Metal" && detail.is_base) {
|
|
164
|
+
hasMetalOption = true;
|
|
165
|
+
const qualityTitle = (masterMaps.qualityMasterMap.get(detail.qly_code) ||
|
|
166
|
+
detail.qly_code).trim();
|
|
167
|
+
const rawTitle = (masterMaps.rawMasterMap.get(detail.raw_code) ||
|
|
168
|
+
detail.raw_code).trim();
|
|
169
|
+
const metalValue = `${qualityTitle} ${rawTitle}`.trim();
|
|
170
|
+
const metalOption = product.options?.find((opt) => opt.title === "Metal");
|
|
171
|
+
if (metalOption) {
|
|
172
|
+
variantOptions["Metal"] = metalValue;
|
|
173
|
+
// Track this value for product options update
|
|
174
|
+
if (!productOptionMap.has("Metal")) {
|
|
175
|
+
productOptionMap.set("Metal", new Set());
|
|
176
|
+
}
|
|
177
|
+
productOptionMap.get("Metal").add(metalValue);
|
|
178
|
+
}
|
|
179
|
+
// Metal Color
|
|
180
|
+
if (detail.tone_code) {
|
|
181
|
+
let colorTitle = masterMaps.toneMasterMap.get(detail.tone_code) ||
|
|
182
|
+
detail.tone_code;
|
|
183
|
+
// Fallback to static mappings if not in master
|
|
184
|
+
if (!masterMaps.toneMasterMap.has(detail.tone_code)) {
|
|
185
|
+
if (detail.tone_code === "R")
|
|
186
|
+
colorTitle = "Rose";
|
|
187
|
+
else if (detail.tone_code === "Y")
|
|
188
|
+
colorTitle = "Yellow";
|
|
189
|
+
else if (detail.tone_code === "W")
|
|
190
|
+
colorTitle = "White";
|
|
191
|
+
else if (detail.tone_code === "YRW")
|
|
192
|
+
colorTitle = "YELLOW/ROSE/WHITE";
|
|
193
|
+
else if (detail.tone_code === "YW")
|
|
194
|
+
colorTitle = "YELLOW/WHITE";
|
|
195
|
+
else if (detail.tone_code === "RW")
|
|
196
|
+
colorTitle = "ROSE/WHITE";
|
|
197
|
+
else if (detail.tone_code === "BU")
|
|
198
|
+
colorTitle = "BLUE";
|
|
199
|
+
else if (detail.tone_code === "BL")
|
|
200
|
+
colorTitle = "BLACK";
|
|
201
|
+
}
|
|
202
|
+
colorTitle = colorTitle.trim();
|
|
203
|
+
const metalColorOption = product.options?.find((opt) => opt.title === "Metal Color");
|
|
204
|
+
if (metalColorOption) {
|
|
205
|
+
variantOptions["Metal Color"] = colorTitle;
|
|
206
|
+
// Track this value for product options update
|
|
207
|
+
if (!productOptionMap.has("Metal Color")) {
|
|
208
|
+
productOptionMap.set("Metal Color", new Set());
|
|
209
|
+
}
|
|
210
|
+
productOptionMap.get("Metal Color").add(colorTitle);
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
214
|
+
// Diamond Quality
|
|
215
|
+
if (diamondDetailToUse &&
|
|
216
|
+
detail === diamondDetailToUse) {
|
|
217
|
+
hasDiamondOption = true;
|
|
218
|
+
const toneTitle = (masterMaps.toneMasterMap.get(detail.tone_code) ||
|
|
219
|
+
detail.tone_code).trim();
|
|
220
|
+
const qualityTitle = (masterMaps.qualityMasterMap.get(detail.qly_code) ||
|
|
221
|
+
detail.qly_code).trim();
|
|
222
|
+
const diamondValue = `${toneTitle} ${qualityTitle}`.trim();
|
|
223
|
+
const diamondOption = product.options?.find((opt) => opt.title === "Diamond Quality");
|
|
224
|
+
if (diamondOption) {
|
|
225
|
+
variantOptions["Diamond Quality"] = diamondValue;
|
|
226
|
+
// Track this value for product options update
|
|
227
|
+
if (!productOptionMap.has("Diamond Quality")) {
|
|
228
|
+
productOptionMap.set("Diamond Quality", new Set());
|
|
229
|
+
}
|
|
230
|
+
productOptionMap.get("Diamond Quality").add(diamondValue);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
// Get the product's required option titles
|
|
236
|
+
const productOptionTitles = product.options?.map((opt) => opt.title) || [];
|
|
237
|
+
// Validate: Check if we have all required options for the product
|
|
238
|
+
// Skip variants with incomplete options to prevent batch failure
|
|
239
|
+
const hasAllOptions = productOptionTitles.every((title) => variantOptions[title] !== undefined);
|
|
240
|
+
if (!hasAllOptions) {
|
|
241
|
+
logger.warn(`[variant-options-sync] Variant ${tv.variantId} has incomplete options. ` +
|
|
242
|
+
`Product requires: [${productOptionTitles.join(", ")}], ` +
|
|
243
|
+
`Variant has: [${Object.keys(variantOptions).join(", ")}]. ` +
|
|
244
|
+
`Skipping to prevent batch failure.`);
|
|
245
|
+
continue;
|
|
246
|
+
}
|
|
247
|
+
variantsToUpdate.push({
|
|
248
|
+
variant: {
|
|
249
|
+
id: tv.variantId,
|
|
250
|
+
options: variantOptions,
|
|
251
|
+
},
|
|
252
|
+
});
|
|
253
|
+
}
|
|
254
|
+
// STEP 1: Update product options FIRST to include all new values
|
|
255
|
+
// This ensures option values exist before assigning them to variants
|
|
256
|
+
const productsToUpdate = [];
|
|
257
|
+
for (const productId of productIds) {
|
|
258
|
+
const { data: allVariants } = await query.graph({
|
|
259
|
+
entity: "product_variant",
|
|
260
|
+
fields: ["id", "options.*"],
|
|
261
|
+
filters: { product_id: productId },
|
|
262
|
+
});
|
|
263
|
+
// Collect unique option values from existing variants
|
|
264
|
+
const productOptionsMap = new Map();
|
|
265
|
+
// First, collect from existing variants
|
|
266
|
+
for (const variant of allVariants || []) {
|
|
267
|
+
if (variant.options) {
|
|
268
|
+
for (const opt of variant.options) {
|
|
269
|
+
if (opt.title && opt.value) {
|
|
270
|
+
if (!productOptionsMap.has(opt.title)) {
|
|
271
|
+
productOptionsMap.set(opt.title, new Set());
|
|
272
|
+
}
|
|
273
|
+
productOptionsMap.get(opt.title).add(opt.value.trim());
|
|
274
|
+
}
|
|
275
|
+
}
|
|
276
|
+
}
|
|
277
|
+
}
|
|
278
|
+
// Then, merge in the new option values we'll be using
|
|
279
|
+
const newValuesForProduct = newOptionValuesByProduct.get(productId);
|
|
280
|
+
if (newValuesForProduct) {
|
|
281
|
+
for (const [optionTitle, newValues,] of newValuesForProduct.entries()) {
|
|
282
|
+
if (!productOptionsMap.has(optionTitle)) {
|
|
283
|
+
productOptionsMap.set(optionTitle, new Set());
|
|
284
|
+
}
|
|
285
|
+
// Merge new values into existing set
|
|
286
|
+
for (const value of newValues) {
|
|
287
|
+
productOptionsMap.get(optionTitle).add(value.trim());
|
|
288
|
+
}
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
// Convert to options format, filtering out empty strings
|
|
292
|
+
const productOptions = Array.from(productOptionsMap.entries())
|
|
293
|
+
.map(([title, values]) => ({
|
|
294
|
+
title,
|
|
295
|
+
values: Array.from(values).filter((v) => v.length > 0),
|
|
296
|
+
}))
|
|
297
|
+
.filter((opt) => opt.values.length > 0); // Only include options with values
|
|
298
|
+
productsToUpdate.push({
|
|
299
|
+
product: {
|
|
300
|
+
id: productId,
|
|
301
|
+
options: productOptions,
|
|
302
|
+
},
|
|
303
|
+
});
|
|
304
|
+
}
|
|
305
|
+
// Update products FIRST
|
|
306
|
+
if (productsToUpdate.length > 0) {
|
|
307
|
+
await (0, core_flows_1.updateProductsWorkflow)(req.scope).run({
|
|
308
|
+
input: { products: productsToUpdate.map((p) => p.product) },
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
// STEP 2: Now update variants with the new option values
|
|
312
|
+
// The option values now exist in the products, so this will succeed
|
|
313
|
+
if (variantsToUpdate.length > 0) {
|
|
314
|
+
await (0, core_flows_1.updateProductVariantsWorkflow)(req.scope).run({
|
|
315
|
+
input: { product_variants: variantsToUpdate.map((v) => v.variant) },
|
|
316
|
+
});
|
|
317
|
+
}
|
|
318
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createSuccessResponse)({
|
|
319
|
+
updated_products: productsToUpdate.length,
|
|
320
|
+
updated_variants: variantsToUpdate.length,
|
|
321
|
+
}, "Variant options synced"));
|
|
322
|
+
}
|
|
323
|
+
catch (e) {
|
|
324
|
+
logger.error("Error syncing variant options", e);
|
|
325
|
+
return (0, api_response_1.sendApiResponse)(res, (0, api_response_1.createErrorResponse)(e?.message || "Internal error", api_response_1.HttpStatus.INTERNAL_SERVER_ERROR, api_response_1.ErrorCode.INTERNAL_ERROR));
|
|
326
|
+
}
|
|
327
|
+
};
|
|
328
|
+
exports.POST = POST;
|
|
329
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3ZhcmlhbnQtb3B0aW9ucy9zeW5jL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUFzRTtBQUN0RSw0REFHcUM7QUFFckMsK0RBTXNDO0FBRS9CLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sTUFBTSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBRW5FLE1BQU0sRUFBRSxVQUFVLEVBQUUsY0FBYyxFQUFFLFVBQVUsRUFBRSxjQUFjLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUdqRixDQUFDO0lBRUYsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLGNBQWMsRUFBRSxDQUFDO1FBQ3ZDLE9BQU8sSUFBQSw4QkFBZSxFQUNwQixHQUFHLEVBQ0gsSUFBQSxrQ0FBbUIsRUFDakIseUNBQXlDLEVBQ3pDLHlCQUFVLENBQUMsV0FBVyxFQUN0Qix3QkFBUyxDQUFDLGdCQUFnQixDQUMzQixDQUNGLENBQUM7SUFDSixDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsa0NBQWtDO1FBQ2xDLE1BQU0sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQy9DLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxDQUFDO1NBQ3BDLENBQUMsQ0FBQztRQUVILE1BQU0sRUFBRSxJQUFJLEVBQUUsZ0JBQWdC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
|
|
@@ -11,6 +11,14 @@ const party_style_master_1 = require("../../../workflows/party-style-master");
|
|
|
11
11
|
const promocode_master_1 = require("../../../workflows/promocode-master");
|
|
12
12
|
const raw_master_1 = require("../../../workflows/raw-master");
|
|
13
13
|
const shape_master_1 = require("../../../workflows/shape-master");
|
|
14
|
+
const create_or_update_shape_master_1 = require("../../../workflows/shape-master/create-or-update-shape-master");
|
|
15
|
+
const create_or_update_raw_master_1 = require("../../../workflows/raw-master/create-or-update-raw-master");
|
|
16
|
+
const create_or_update_quality_master_1 = require("../../../workflows/quality-master/create-or-update-quality-master");
|
|
17
|
+
const quality_master_1 = require("../../../workflows/quality-master");
|
|
18
|
+
const create_or_update_tone_master_1 = require("../../../workflows/tone-master/create-or-update-tone-master");
|
|
19
|
+
const tone_master_1 = require("../../../workflows/tone-master");
|
|
20
|
+
const create_or_update_item_size_master_1 = require("../../../workflows/item-size-master/create-or-update-item-size-master");
|
|
21
|
+
const item_size_master_1 = require("../../../workflows/item-size-master");
|
|
14
22
|
const shipping_info_master_1 = require("../../../workflows/shipping-info-master");
|
|
15
23
|
const workflows_1 = require("../../../workflows/style-master/workflows");
|
|
16
24
|
const sub_category_master_1 = require("../../../workflows/sub-category-master");
|
|
@@ -43,6 +51,11 @@ async function runWorkflowWithErrorHandling(workflow, scope, input, datafor, ope
|
|
|
43
51
|
// Extract eventId from input if available
|
|
44
52
|
const eventId = input?.eventId;
|
|
45
53
|
await handleWorkflowError(scope, errors, datafor, operation, eventId);
|
|
54
|
+
// Throw error if there are workflow errors so the job can handle it properly
|
|
55
|
+
if (errors && errors.length > 0) {
|
|
56
|
+
const errorMessages = errors.map((e) => e.error?.message || e.message || JSON.stringify(e)).join("; ");
|
|
57
|
+
throw new Error(`Workflow execution failed: ${errorMessages}`);
|
|
58
|
+
}
|
|
46
59
|
return result;
|
|
47
60
|
}
|
|
48
61
|
/**
|
|
@@ -76,13 +89,28 @@ exports.MASTER_WORKFLOW_CONFIG = {
|
|
|
76
89
|
},
|
|
77
90
|
ShapeMst: {
|
|
78
91
|
delete: createWorkflowHandler(shape_master_1.shapeMasterWorkflow, "ShapeMst", "delete"),
|
|
79
|
-
add: createWorkflowHandler(
|
|
80
|
-
update: createWorkflowHandler(
|
|
92
|
+
add: createWorkflowHandler(create_or_update_shape_master_1.createOrUpdateShapeMasterWorkflow, "ShapeMst", "add"),
|
|
93
|
+
update: createWorkflowHandler(create_or_update_shape_master_1.createOrUpdateShapeMasterWorkflow, "ShapeMst", "update"),
|
|
94
|
+
},
|
|
95
|
+
QualityMst: {
|
|
96
|
+
delete: createWorkflowHandler(quality_master_1.qualityMasterWorkflow, "QualityMst", "delete"),
|
|
97
|
+
add: createWorkflowHandler(create_or_update_quality_master_1.createOrUpdateQualityMasterWorkflow, "QualityMst", "add"),
|
|
98
|
+
update: createWorkflowHandler(create_or_update_quality_master_1.createOrUpdateQualityMasterWorkflow, "QualityMst", "update"),
|
|
99
|
+
},
|
|
100
|
+
ToneMst: {
|
|
101
|
+
delete: createWorkflowHandler(tone_master_1.toneMasterWorkflow, "ToneMst", "delete"),
|
|
102
|
+
add: createWorkflowHandler(create_or_update_tone_master_1.createOrUpdateToneMasterWorkflow, "ToneMst", "add"),
|
|
103
|
+
update: createWorkflowHandler(create_or_update_tone_master_1.createOrUpdateToneMasterWorkflow, "ToneMst", "update"),
|
|
104
|
+
},
|
|
105
|
+
ItemSizeMst: {
|
|
106
|
+
delete: createWorkflowHandler(item_size_master_1.itemSizeMasterWorkflow, "ItemSizeMst", "delete"),
|
|
107
|
+
add: createWorkflowHandler(create_or_update_item_size_master_1.createOrUpdateItemSizeMasterWorkflow, "ItemSizeMst", "add"),
|
|
108
|
+
update: createWorkflowHandler(create_or_update_item_size_master_1.createOrUpdateItemSizeMasterWorkflow, "ItemSizeMst", "update"),
|
|
81
109
|
},
|
|
82
110
|
RawMst: {
|
|
83
111
|
delete: createWorkflowHandler(raw_master_1.rawMasterWorkflow, "RawMst", "delete"),
|
|
84
|
-
add: createWorkflowHandler(
|
|
85
|
-
update: createWorkflowHandler(
|
|
112
|
+
add: createWorkflowHandler(create_or_update_raw_master_1.createOrUpdateRawMasterWorkflow, "RawMst", "add"),
|
|
113
|
+
update: createWorkflowHandler(create_or_update_raw_master_1.createOrUpdateRawMasterWorkflow, "RawMst", "update"),
|
|
86
114
|
},
|
|
87
115
|
CollectionMst: {
|
|
88
116
|
delete: createWorkflowHandler(collection_master_1.collectionMasterWorkflow, "CollectionMst", "delete"),
|
|
@@ -110,7 +138,10 @@ exports.MASTER_WORKFLOW_CONFIG = {
|
|
|
110
138
|
update: createWorkflowHandler(collection_group_master_1.collectionGroupMasterWorkflow, "CollectionGroupMst", "update"),
|
|
111
139
|
},
|
|
112
140
|
PartyMst: {
|
|
113
|
-
delete: createWorkflowHandler(party_master_1.
|
|
141
|
+
delete: createWorkflowHandler(party_master_1.deletePartyMasterWorkflow, "PartyMst", "delete", (input) => ({
|
|
142
|
+
ids: input.data,
|
|
143
|
+
eventId: input.eventId,
|
|
144
|
+
})),
|
|
114
145
|
add: createWorkflowHandler(party_master_1.partyMasterWorkflow, "PartyMst", "add"),
|
|
115
146
|
update: createWorkflowHandler(party_master_1.partyMasterWorkflow, "PartyMst", "update"),
|
|
116
147
|
},
|
|
@@ -136,4 +167,4 @@ exports.MASTER_WORKFLOW_CONFIG = {
|
|
|
136
167
|
update: createWorkflowHandler(promocode_master_1.promocodeMasterWorkflow, "Promocode", "update"),
|
|
137
168
|
},
|
|
138
169
|
};
|
|
139
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
170
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vc3JjL2FwaS9lcnAvd2ViaG9vay9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsb0ZBQXVGO0FBQ3ZGLHdFQUE0RTtBQUM1RSx3RkFBMkY7QUFDM0YsNEVBQWdGO0FBQ2hGLG9FQUkwQztBQUMxQyxrRUFHeUM7QUFDekMsOEVBRytDO0FBQy9DLDBFQUE4RTtBQUM5RSw4REFBa0U7QUFDbEUsa0VBQXNFO0FBQ3RFLGlIQUFrSDtBQUNsSCwyR0FBNEc7QUFDNUcsdUhBQXdIO0FBQ3hILHNFQUEwRTtBQUMxRSw4R0FBK0c7QUFDL0csZ0VBQW9FO0FBQ3BFLDZIQUE2SDtBQUM3SCwwRUFBNkU7QUFDN0Usa0ZBSWlEO0FBQ2pELHlFQUdtRDtBQUNuRCxnRkFBbUY7QUErQm5GOztHQUVHO0FBQ0gsS0FBSyxVQUFVLG1CQUFtQixDQUNoQyxLQUFVLEVBQ1YsTUFBYSxFQUNiLE9BQW1CLEVBQ25CLFNBQW9CLEVBQ3BCLGVBQXdCO0lBRXhCLElBQUksTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDO1FBQ2xCLE9BQU8sQ0FBQyxLQUFLLENBQUMsR0FBRyxTQUFTLElBQUksT0FBTyxtQkFBbUIsRUFBRSxNQUFNLENBQUMsQ0FBQztRQUNsRSxNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDO1FBQ2hELE1BQU0sWUFBWSxDQUFDLElBQUksQ0FBQztZQUN0QixJQUFJLEVBQUUscUJBQXFCO1lBQzNCLElBQUksRUFBRTtnQkFDSixPQUFPLEVBQ0wsZUFBZTtvQkFDZixHQUFHLFNBQVMsSUFBSSxPQUFPLENBQUMsV0FBVyxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUN2RCxTQUFTLEVBQUUsR0FBRyxTQUFTLElBQUksT0FBTyxDQUFDLFdBQVcsRUFBRSxFQUFFO2dCQUNsRCxLQUFLLEVBQUUs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
|