@mercurjs/core 2.2.0-canary.11 → 2.2.0-canary.12
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/order-edits/[id]/confirm/route.d.ts +12 -0
- package/.medusa/server/src/api/admin/order-edits/[id]/confirm/route.js +27 -0
- package/.medusa/server/src/api/vendor/order-edits/[id]/confirm/route.d.ts +5 -0
- package/.medusa/server/src/api/vendor/order-edits/[id]/confirm/route.js +8 -3
- package/.medusa/server/src/api/vendor/products/[id]/variants/[variant_id]/route.js +8 -2
- package/.medusa/server/src/workflows/order/workflows/confirm-order-edit-request.d.ts +7 -0
- package/.medusa/server/src/workflows/order/workflows/confirm-order-edit-request.js +165 -0
- package/.medusa/server/src/workflows/order/workflows/index.d.ts +1 -0
- package/.medusa/server/src/workflows/order/workflows/index.js +2 -1
- package/.medusa/server/src/workflows/product-edit/workflows/product-edit-update-variants.js +52 -3
- package/package.json +1 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { HttpTypes } from "@medusajs/framework/types";
|
|
2
|
+
import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
3
|
+
/**
|
|
4
|
+
* Mercur override of Medusa's `POST /admin/order-edits/:id/confirm`.
|
|
5
|
+
*
|
|
6
|
+
* Calls the Mercur wrapper around `confirmOrderEditRequestWorkflow` so
|
|
7
|
+
* reservations created on added / qty-bumped items are adjusted to the
|
|
8
|
+
* offer's `inventory_item_link.required_quantity` — same fix the vendor
|
|
9
|
+
* confirm route uses. `confirmed_by` is stamped with `auth_context.actor_id`
|
|
10
|
+
* (admin equivalent of the vendor route's `seller_context.seller_id`).
|
|
11
|
+
*/
|
|
12
|
+
export declare const POST: (req: AuthenticatedMedusaRequest, res: MedusaResponse<HttpTypes.AdminOrderEditPreviewResponse>) => Promise<void>;
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = void 0;
|
|
4
|
+
const workflows_1 = require("../../../../../workflows/order/workflows");
|
|
5
|
+
/**
|
|
6
|
+
* Mercur override of Medusa's `POST /admin/order-edits/:id/confirm`.
|
|
7
|
+
*
|
|
8
|
+
* Calls the Mercur wrapper around `confirmOrderEditRequestWorkflow` so
|
|
9
|
+
* reservations created on added / qty-bumped items are adjusted to the
|
|
10
|
+
* offer's `inventory_item_link.required_quantity` — same fix the vendor
|
|
11
|
+
* confirm route uses. `confirmed_by` is stamped with `auth_context.actor_id`
|
|
12
|
+
* (admin equivalent of the vendor route's `seller_context.seller_id`).
|
|
13
|
+
*/
|
|
14
|
+
const POST = async (req, res) => {
|
|
15
|
+
const { id } = req.params;
|
|
16
|
+
const { result } = await (0, workflows_1.confirmOrderEditRequestWorkflow)(req.scope).run({
|
|
17
|
+
input: {
|
|
18
|
+
order_id: id,
|
|
19
|
+
confirmed_by: req.auth_context.actor_id,
|
|
20
|
+
},
|
|
21
|
+
});
|
|
22
|
+
res.json({
|
|
23
|
+
order_preview: result,
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
exports.POST = POST;
|
|
27
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL29yZGVyLWVkaXRzL1tpZF0vY29uZmlybS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFNQSx3RUFBMEY7QUFFMUY7Ozs7Ozs7O0dBUUc7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQTRELEVBQzVELEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDJDQUErQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7WUFDWixZQUFZLEVBQUUsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRO1NBQ3hDO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLGFBQWEsRUFBRSxNQUFnRDtLQUNoRSxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFoQlksUUFBQSxJQUFJLFFBZ0JoQiJ9
|
|
@@ -5,5 +5,10 @@ import { AuthenticatedMedusaRequest, MedusaResponse } from "@medusajs/framework/
|
|
|
5
5
|
* `POST /admin/order-edits/:id/confirm`. Flips a requested edit to
|
|
6
6
|
* `confirmed` and applies its actions. `confirmed_by` is stamped with
|
|
7
7
|
* the seller's id (vendor equivalent of admin's `actor_id`).
|
|
8
|
+
*
|
|
9
|
+
* Calls the Mercur wrapper around `confirmOrderEditRequestWorkflow` so
|
|
10
|
+
* reservations created on added / qty-bumped items are adjusted to the
|
|
11
|
+
* offer's `inventory_item_link.required_quantity` (matches the exchange
|
|
12
|
+
* and claim confirm flows).
|
|
8
13
|
*/
|
|
9
14
|
export declare const POST: (req: AuthenticatedMedusaRequest, res: MedusaResponse<HttpTypes.AdminOrderEditPreviewResponse>) => Promise<void>;
|
|
@@ -1,16 +1,21 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.POST = void 0;
|
|
4
|
-
const
|
|
4
|
+
const workflows_1 = require("../../../../../workflows/order/workflows");
|
|
5
5
|
/**
|
|
6
6
|
* `POST /vendor/order-edits/:id/confirm` — mirrors
|
|
7
7
|
* `POST /admin/order-edits/:id/confirm`. Flips a requested edit to
|
|
8
8
|
* `confirmed` and applies its actions. `confirmed_by` is stamped with
|
|
9
9
|
* the seller's id (vendor equivalent of admin's `actor_id`).
|
|
10
|
+
*
|
|
11
|
+
* Calls the Mercur wrapper around `confirmOrderEditRequestWorkflow` so
|
|
12
|
+
* reservations created on added / qty-bumped items are adjusted to the
|
|
13
|
+
* offer's `inventory_item_link.required_quantity` (matches the exchange
|
|
14
|
+
* and claim confirm flows).
|
|
10
15
|
*/
|
|
11
16
|
const POST = async (req, res) => {
|
|
12
17
|
const { id } = req.params;
|
|
13
|
-
const { result } = await (0,
|
|
18
|
+
const { result } = await (0, workflows_1.confirmOrderEditRequestWorkflow)(req.scope).run({
|
|
14
19
|
input: {
|
|
15
20
|
order_id: id,
|
|
16
21
|
confirmed_by: req.seller_context.seller_id,
|
|
@@ -21,4 +26,4 @@ const POST = async (req, res) => {
|
|
|
21
26
|
});
|
|
22
27
|
};
|
|
23
28
|
exports.POST = POST;
|
|
24
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3ZlbmRvci9vcmRlci1lZGl0cy9baWRdL2NvbmZpcm0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBTUEsd0VBQTBGO0FBRTFGOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQTRELEVBQzVELEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQTtJQUV6QixNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsTUFBTSxJQUFBLDJDQUErQixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7UUFDdEUsS0FBSyxFQUFFO1lBQ0wsUUFBUSxFQUFFLEVBQUU7WUFDWixZQUFZLEVBQUUsR0FBRyxDQUFDLGNBQWUsQ0FBQyxTQUFTO1NBQzVDO0tBQ0YsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLElBQUksQ0FBQztRQUNQLGFBQWEsRUFBRSxNQUFnRDtLQUNoRSxDQUFDLENBQUE7QUFDSixDQUFDLENBQUE7QUFoQlksUUFBQSxJQUFJLFFBZ0JoQiJ9
|
|
@@ -26,6 +26,12 @@ const POST = async (req, res) => {
|
|
|
26
26
|
const productId = req.params.id;
|
|
27
27
|
const variantId = req.params.variant_id;
|
|
28
28
|
const { attribute_values: _av, ...update } = req.validatedBody;
|
|
29
|
+
// `manage_inventory` is a marketplace invariant pinned to `false` at
|
|
30
|
+
// variant creation (see `create-products` / variant create route); it
|
|
31
|
+
// is not vendor-editable, so we deliberately do NOT inject it here.
|
|
32
|
+
// Forcing it in re-staged a phantom no-op change on every edit, which
|
|
33
|
+
// polluted the request block (MER-168). The workflow diffs the rest of
|
|
34
|
+
// the payload and stages only the fields that actually changed.
|
|
29
35
|
const { result } = await (0, product_edit_update_variants_1.productEditUpdateVariantsWorkflow)(req.scope).run({
|
|
30
36
|
input: {
|
|
31
37
|
product_id: productId,
|
|
@@ -34,7 +40,7 @@ const POST = async (req, res) => {
|
|
|
34
40
|
{
|
|
35
41
|
type: "update",
|
|
36
42
|
variant_id: variantId,
|
|
37
|
-
fields:
|
|
43
|
+
fields: update,
|
|
38
44
|
},
|
|
39
45
|
],
|
|
40
46
|
},
|
|
@@ -71,4 +77,4 @@ const DELETE = async (req, res) => {
|
|
|
71
77
|
res.status(202).json({ product_change: product_change ?? result });
|
|
72
78
|
};
|
|
73
79
|
exports.DELETE = DELETE;
|
|
74
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
80
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3ZlbmRvci9wcm9kdWN0cy9baWRdL3ZhcmlhbnRzL1t2YXJpYW50X2lkXS9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFHa0M7QUFHbEMsa0lBQW1JO0FBRzVILE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBMkQsRUFDM0QsRUFBRTtJQUNGLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFBO0lBRWhFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxPQUFPLENBQUMsR0FDaEIsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDcEIsTUFBTSxFQUFFLFNBQVM7UUFDakIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxXQUFXLENBQUMsTUFBTTtRQUM5QixPQUFPLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsVUFBVSxFQUFFLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxFQUFFO0tBQ2xFLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUNiLE1BQU0sSUFBSSxtQkFBVyxDQUNuQixtQkFBVyxDQUFDLEtBQUssQ0FBQyxTQUFTLEVBQzNCLG1CQUFtQixHQUFHLENBQUMsTUFBTSxDQUFDLFVBQVUsZ0JBQWdCLENBQ3pELENBQUE7SUFDSCxDQUFDO0lBRUQsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxDQUFDLENBQUE7QUFDdkIsQ0FBQyxDQUFBO0FBdEJZLFFBQUEsR0FBRyxPQXNCZjtBQUVEOzs7R0FHRztBQUNJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFDdkIsR0FBK0QsRUFDL0QsR0FBeUQsRUFDekQsRUFB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
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import { OrderPreviewDTO } from "@medusajs/framework/types";
|
|
2
|
+
export type ConfirmOrderEditRequestWorkflowInput = {
|
|
3
|
+
order_id: string;
|
|
4
|
+
confirmed_by?: string;
|
|
5
|
+
};
|
|
6
|
+
export declare const confirmOrderEditRequestWorkflowId = "mercur-confirm-order-edit-request";
|
|
7
|
+
export declare const confirmOrderEditRequestWorkflow: import("@medusajs/framework/workflows-sdk").ReturnWorkflow<ConfirmOrderEditRequestWorkflowInput, OrderPreviewDTO, []>;
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.confirmOrderEditRequestWorkflow = exports.confirmOrderEditRequestWorkflowId = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
+
const adjustOrderEditReservationsForOffersStepId = "mercur-adjust-order-edit-reservations-for-offers";
|
|
8
|
+
const adjustOrderEditReservationsForOffersStep = (0, workflows_sdk_1.createStep)(adjustOrderEditReservationsForOffersStepId, async (input, { container }) => {
|
|
9
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
10
|
+
const { data: orders } = await query.graph({
|
|
11
|
+
entity: "order",
|
|
12
|
+
fields: [
|
|
13
|
+
"id",
|
|
14
|
+
"items.*",
|
|
15
|
+
"items.offer.id",
|
|
16
|
+
"items.offer.inventory_item_link.*",
|
|
17
|
+
"items.offer.inventory_item_link.inventory_item.*",
|
|
18
|
+
"items.offer.inventory_item_link.inventory_item.location_levels.*",
|
|
19
|
+
],
|
|
20
|
+
filters: { id: input.order_id },
|
|
21
|
+
});
|
|
22
|
+
const order = orders?.[0];
|
|
23
|
+
if (!order?.items?.length) {
|
|
24
|
+
return new workflows_sdk_1.StepResponse({ adjusted: false }, []);
|
|
25
|
+
}
|
|
26
|
+
const inventoryService = container.resolve(utils_1.Modules.INVENTORY);
|
|
27
|
+
const compensation = [];
|
|
28
|
+
for (const item of order.items) {
|
|
29
|
+
const lineItemId = item.id;
|
|
30
|
+
const links = item.offer?.inventory_item_link ?? [];
|
|
31
|
+
if (!lineItemId || links.length === 0) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
const orderedQuantity = Number(item.quantity ?? 0);
|
|
35
|
+
const fulfilledQuantity = Number(item.fulfilled_quantity ?? 0);
|
|
36
|
+
const reservationQuantity = orderedQuantity - fulfilledQuantity;
|
|
37
|
+
if (reservationQuantity <= 0) {
|
|
38
|
+
continue;
|
|
39
|
+
}
|
|
40
|
+
const normalizedLinks = links
|
|
41
|
+
.map((link) => ({
|
|
42
|
+
inventory_item_id: link.inventory_item?.id ?? link.inventory_item_id ?? null,
|
|
43
|
+
required_quantity: Number(link.required_quantity ?? 1),
|
|
44
|
+
location_id: link.inventory_item?.location_levels?.[0]?.location_id ?? null,
|
|
45
|
+
}))
|
|
46
|
+
.filter((l) => !!l.inventory_item_id);
|
|
47
|
+
if (normalizedLinks.length === 0) {
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
const inventoryItemIdsMissingLocation = normalizedLinks
|
|
51
|
+
.filter((l) => !l.location_id)
|
|
52
|
+
.map((l) => l.inventory_item_id);
|
|
53
|
+
if (inventoryItemIdsMissingLocation.length) {
|
|
54
|
+
const levels = await inventoryService.listInventoryLevels({
|
|
55
|
+
inventory_item_id: inventoryItemIdsMissingLocation,
|
|
56
|
+
});
|
|
57
|
+
const firstLocationByItem = new Map();
|
|
58
|
+
for (const lvl of levels) {
|
|
59
|
+
const itemId = lvl.inventory_item_id;
|
|
60
|
+
if (!firstLocationByItem.has(itemId)) {
|
|
61
|
+
firstLocationByItem.set(itemId, lvl.location_id);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
for (const link of normalizedLinks) {
|
|
65
|
+
if (!link.location_id) {
|
|
66
|
+
link.location_id =
|
|
67
|
+
firstLocationByItem.get(link.inventory_item_id) ?? null;
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
const existingReservations = await inventoryService.listReservationItems({
|
|
72
|
+
line_item_id: lineItemId,
|
|
73
|
+
});
|
|
74
|
+
const desiredByInventoryItem = new Map();
|
|
75
|
+
for (const link of normalizedLinks) {
|
|
76
|
+
desiredByInventoryItem.set(link.inventory_item_id, {
|
|
77
|
+
quantity: Number(utils_1.MathBN.mult(reservationQuantity, link.required_quantity).toString()),
|
|
78
|
+
location_id: link.location_id,
|
|
79
|
+
});
|
|
80
|
+
}
|
|
81
|
+
const existingByInventoryItem = new Map();
|
|
82
|
+
for (const r of existingReservations) {
|
|
83
|
+
existingByInventoryItem.set(r.inventory_item_id, r);
|
|
84
|
+
}
|
|
85
|
+
const allMatch = existingReservations.length === desiredByInventoryItem.size &&
|
|
86
|
+
normalizedLinks.every((link) => {
|
|
87
|
+
const existing = existingByInventoryItem.get(link.inventory_item_id);
|
|
88
|
+
if (!existing)
|
|
89
|
+
return false;
|
|
90
|
+
const desiredQty = desiredByInventoryItem.get(link.inventory_item_id)
|
|
91
|
+
.quantity;
|
|
92
|
+
return Number(existing.quantity ?? 0) === desiredQty;
|
|
93
|
+
});
|
|
94
|
+
if (allMatch) {
|
|
95
|
+
continue;
|
|
96
|
+
}
|
|
97
|
+
const inheritedLocation = existingReservations[0];
|
|
98
|
+
const toCreate = normalizedLinks
|
|
99
|
+
.map((link) => {
|
|
100
|
+
const desired = desiredByInventoryItem.get(link.inventory_item_id);
|
|
101
|
+
const locationId = link.location_id ?? inheritedLocation?.location_id ?? null;
|
|
102
|
+
return {
|
|
103
|
+
line_item_id: lineItemId,
|
|
104
|
+
inventory_item_id: link.inventory_item_id,
|
|
105
|
+
location_id: locationId,
|
|
106
|
+
quantity: desired.quantity,
|
|
107
|
+
};
|
|
108
|
+
})
|
|
109
|
+
.filter((r) => !!r.location_id);
|
|
110
|
+
if (toCreate.length === 0) {
|
|
111
|
+
continue;
|
|
112
|
+
}
|
|
113
|
+
for (const r of existingReservations) {
|
|
114
|
+
compensation.push({
|
|
115
|
+
type: "recreate-prior",
|
|
116
|
+
line_item_id: lineItemId,
|
|
117
|
+
inventory_item_id: r
|
|
118
|
+
.inventory_item_id,
|
|
119
|
+
location_id: r.location_id,
|
|
120
|
+
quantity: Number(r.quantity ?? 0),
|
|
121
|
+
});
|
|
122
|
+
}
|
|
123
|
+
if (existingReservations.length) {
|
|
124
|
+
await inventoryService.deleteReservationItems(existingReservations.map((r) => r.id));
|
|
125
|
+
}
|
|
126
|
+
const created = await inventoryService.createReservationItems(toCreate);
|
|
127
|
+
for (const r of created) {
|
|
128
|
+
compensation.push({ type: "delete-created", id: r.id });
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
return new workflows_sdk_1.StepResponse({ adjusted: true }, compensation);
|
|
132
|
+
}, async (compensation, { container }) => {
|
|
133
|
+
if (!compensation?.length)
|
|
134
|
+
return;
|
|
135
|
+
const inventoryService = container.resolve(utils_1.Modules.INVENTORY);
|
|
136
|
+
const toDelete = compensation
|
|
137
|
+
.filter((c) => c.type === "delete-created")
|
|
138
|
+
.map((c) => c.id);
|
|
139
|
+
if (toDelete.length) {
|
|
140
|
+
await inventoryService.deleteReservationItems(toDelete);
|
|
141
|
+
}
|
|
142
|
+
const toRecreate = compensation
|
|
143
|
+
.filter((c) => c.type === "recreate-prior")
|
|
144
|
+
.map((c) => ({
|
|
145
|
+
line_item_id: c.line_item_id ?? undefined,
|
|
146
|
+
inventory_item_id: c.inventory_item_id,
|
|
147
|
+
location_id: c.location_id,
|
|
148
|
+
quantity: c.quantity,
|
|
149
|
+
}));
|
|
150
|
+
if (toRecreate.length) {
|
|
151
|
+
await inventoryService.createReservationItems(toRecreate);
|
|
152
|
+
}
|
|
153
|
+
});
|
|
154
|
+
exports.confirmOrderEditRequestWorkflowId = "mercur-confirm-order-edit-request";
|
|
155
|
+
exports.confirmOrderEditRequestWorkflow = (0, workflows_sdk_1.createWorkflow)(exports.confirmOrderEditRequestWorkflowId, function (input) {
|
|
156
|
+
const orderPreview = core_flows_1.confirmOrderEditRequestWorkflow.runAsStep({
|
|
157
|
+
input: {
|
|
158
|
+
order_id: input.order_id,
|
|
159
|
+
confirmed_by: input.confirmed_by,
|
|
160
|
+
},
|
|
161
|
+
});
|
|
162
|
+
adjustOrderEditReservationsForOffersStep({ order_id: input.order_id });
|
|
163
|
+
return new workflows_sdk_1.WorkflowResponse(orderPreview);
|
|
164
|
+
});
|
|
165
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlybS1vcmRlci1lZGl0LXJlcXVlc3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVyL3dvcmtmbG93cy9jb25maXJtLW9yZGVyLWVkaXQtcmVxdWVzdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFDQSxxREFJa0M7QUFDbEMscUVBSzBDO0FBQzFDLDREQUFvSDtBQThDcEgsTUFBTSwwQ0FBMEMsR0FDOUMsa0RBQWtELENBQUE7QUFFcEQsTUFBTSx3Q0FBd0MsR0FBRyxJQUFBLDBCQUFVLEVBQ3pELDBDQUEwQyxFQUMxQyxLQUFLLEVBQUUsS0FBMkIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbkQsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQTtJQUVoRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN6QyxNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSixTQUFTO1lBQ1QsZ0JBQWdCO1lBQ2hCLG1DQUFtQztZQUNuQyxrREFBa0Q7WUFDbEQsa0VBQWtFO1NBQ25FO1FBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLEtBQUssQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQyxDQUFBO0lBRUYsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQVNYLENBQUE7SUFFYixJQUFJLENBQUMsS0FBSyxFQUFFLEtBQUssRUFBRSxNQUFNLEVBQUUsQ0FBQztRQUMxQixPQUFPLElBQUksNEJBQVksQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUF5QixDQUFDLENBQUE7SUFDekUsQ0FBQztJQUVELE1BQU0sZ0JBQWdCLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxl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
|
|
@@ -19,4 +19,5 @@ __exportStar(require("./cancel-order-fulfillment"), exports);
|
|
|
19
19
|
__exportStar(require("./confirm-return-receive"), exports);
|
|
20
20
|
__exportStar(require("./confirm-exchange-request"), exports);
|
|
21
21
|
__exportStar(require("./confirm-claim-request"), exports);
|
|
22
|
-
|
|
22
|
+
__exportStar(require("./confirm-order-edit-request"), exports);
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL29yZGVyL3dvcmtmbG93cy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7O0FBQUEsNkRBQTBDO0FBQzFDLDZEQUEwQztBQUMxQywyREFBd0M7QUFDeEMsNkRBQTBDO0FBQzFDLDBEQUF1QztBQUN2QywrREFBNEMifQ==
|
|
@@ -7,6 +7,13 @@ const types_1 = require("@mercurjs/types");
|
|
|
7
7
|
const steps_1 = require("../steps");
|
|
8
8
|
const stage_product_change_1 = require("./stage-product-change");
|
|
9
9
|
exports.productEditUpdateVariantsWorkflowId = "product-edit-update-variants";
|
|
10
|
+
/**
|
|
11
|
+
* Variant fields that are not vendor-editable and must never be staged
|
|
12
|
+
* as part of a `VARIANT_UPDATE`. `manage_inventory` is a marketplace
|
|
13
|
+
* invariant pinned to `false` at variant creation — surfacing it in the
|
|
14
|
+
* request block (as a phantom `Off → On` row) was the core of MER-168.
|
|
15
|
+
*/
|
|
16
|
+
const NON_EDITABLE_VARIANT_FIELDS = new Set(["manage_inventory"]);
|
|
10
17
|
/**
|
|
11
18
|
* Vendor "edit product variants" orchestrator. Translates each
|
|
12
19
|
* `operations[]` entry into a `VARIANT_ADD` / `VARIANT_UPDATE` /
|
|
@@ -59,6 +66,26 @@ exports.productEditUpdateVariantsWorkflow = (0, workflows_sdk_1.createWorkflow)(
|
|
|
59
66
|
for (const v of (currentVariants ?? [])) {
|
|
60
67
|
currentVariantsById.set(v.id, v);
|
|
61
68
|
}
|
|
69
|
+
// Mirror the product-level field diff (`product-edit-update-fields`):
|
|
70
|
+
// normalize relation/array shapes to ids/urls before comparing so an
|
|
71
|
+
// unchanged value never produces a spurious change row.
|
|
72
|
+
const normalize = (value) => {
|
|
73
|
+
if (Array.isArray(value)) {
|
|
74
|
+
return value
|
|
75
|
+
.map((item) => {
|
|
76
|
+
if (item && typeof item === "object" && "id" in item) {
|
|
77
|
+
return item.id;
|
|
78
|
+
}
|
|
79
|
+
if (item && typeof item === "object" && "url" in item) {
|
|
80
|
+
return item.url;
|
|
81
|
+
}
|
|
82
|
+
return item;
|
|
83
|
+
})
|
|
84
|
+
.sort();
|
|
85
|
+
}
|
|
86
|
+
return value ?? null;
|
|
87
|
+
};
|
|
88
|
+
const isEqual = (a, b) => JSON.stringify(normalize(a)) === JSON.stringify(normalize(b));
|
|
62
89
|
for (const op of input.operations ?? []) {
|
|
63
90
|
switch (op.type) {
|
|
64
91
|
case "add":
|
|
@@ -70,16 +97,38 @@ exports.productEditUpdateVariantsWorkflow = (0, workflows_sdk_1.createWorkflow)(
|
|
|
70
97
|
break;
|
|
71
98
|
case "update": {
|
|
72
99
|
const current = currentVariantsById.get(op.variant_id) ?? {};
|
|
100
|
+
const changedFields = {};
|
|
73
101
|
const previousFields = {};
|
|
74
|
-
for (const field of Object.
|
|
102
|
+
for (const [field, proposedValue] of Object.entries(op.fields ?? {})) {
|
|
103
|
+
// Never stage fields the vendor can't edit (e.g.
|
|
104
|
+
// `manage_inventory`).
|
|
105
|
+
if (NON_EDITABLE_VARIANT_FIELDS.has(field))
|
|
106
|
+
continue;
|
|
107
|
+
// `options` is a relation update (option-title → value
|
|
108
|
+
// pairs), not a scalar column we load for diffing. Forward
|
|
109
|
+
// it untouched when provided so the apply step can re-pair
|
|
110
|
+
// variant options; it carries no meaningful previous value.
|
|
111
|
+
if (field === "options") {
|
|
112
|
+
if (proposedValue !== undefined) {
|
|
113
|
+
changedFields.options = proposedValue;
|
|
114
|
+
}
|
|
115
|
+
continue;
|
|
116
|
+
}
|
|
117
|
+
// Skip fields that did not actually change.
|
|
118
|
+
if (isEqual(current[field], proposedValue))
|
|
119
|
+
continue;
|
|
120
|
+
changedFields[field] = proposedValue;
|
|
75
121
|
previousFields[field] = current[field] ?? null;
|
|
76
122
|
}
|
|
123
|
+
// Nothing editable changed — don't stage an empty action.
|
|
124
|
+
if (!Object.keys(changedFields).length)
|
|
125
|
+
break;
|
|
77
126
|
acts.push({
|
|
78
127
|
product_id: input.product_id,
|
|
79
128
|
action: types_1.ProductChangeActionType.VARIANT_UPDATE,
|
|
80
129
|
details: {
|
|
81
130
|
variant_id: op.variant_id,
|
|
82
|
-
fields:
|
|
131
|
+
fields: changedFields,
|
|
83
132
|
previous_fields: previousFields,
|
|
84
133
|
},
|
|
85
134
|
});
|
|
@@ -105,4 +154,4 @@ exports.productEditUpdateVariantsWorkflow = (0, workflows_sdk_1.createWorkflow)(
|
|
|
105
154
|
});
|
|
106
155
|
return new workflows_sdk_1.WorkflowResponse(change);
|
|
107
156
|
});
|
|
108
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
157
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1lZGl0LXVwZGF0ZS12YXJpYW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvcHJvZHVjdC1lZGl0L3dvcmtmbG93cy9wcm9kdWN0LWVkaXQtdXBkYXRlLXZhcmlhbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFFQUswQztBQUMxQyw0REFBK0Q7QUFDL0QsMkNBSXdCO0FBRXhCLG9DQUE2RDtBQUM3RCxpRUFBbUU7QUE2QnRELFFBQUEsbUNBQW1DLEdBQzlDLDhCQUE4QixDQUFBO0FBRWhDOzs7OztHQUtHO0FBQ0gsTUFBTSwyQkFBMkIsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDLGtCQUFrQixDQUFDLENBQUMsQ0FBQTtBQUVqRTs7Ozs7Ozs7O0dBU0c7QUFDVSxRQUFBLGlDQUFpQyxHQUkxQyxJQUFBLDhCQUFjLEVBQ2hCLDJDQUFtQyxFQUNuQyxVQUFVLEtBQTZDO0lBQ3JELElBQUEsMENBQWtDLEVBQ2hDLElBQUEseUJBQVMsRUFBQyxFQUFFLEtBQUssRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNuQyxXQUFXLEVBQUUsQ0FBQyxLQUFLLENBQUMsVUFBVSxDQUFDO0tBQ2hDLENBQUMsQ0FBQyxDQUNKLENBQUE7SUFFRCw0REFBNEQ7SUFDNUQsNkRBQTZEO0lBQzdELDJEQUEyRDtJQUMzRCx1QkFBdUI7SUFDdkIsTUFBTSxnQkFBZ0IsR0FBRyxJQUFBLHlCQUFTLEVBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDLEVBQUUsS0FBSyxFQUFFLEVBQUUsRUFBRSxDQUMxRCxLQUFLLENBQUMsSUFBSSxDQUNSLElBQUksR0FBRyxDQUNMLENBQUMsS0FBSyxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUM7U0FDckIsTUFBTSxDQUNMLENBQ0UsRUFBRSxFQUtGLEVBQUUsQ0FBQyxFQUFFLENBQUMsSUFBSSxL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
|