order-management 0.0.20 → 0.0.22
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/admin/index.js +439 -413
- package/.medusa/server/src/admin/index.mjs +439 -413
- package/.medusa/server/src/api/admin/swaps/[id]/approve/route.js +69 -31
- package/.medusa/server/src/api/admin/swaps/health/route.js +150 -0
- package/.medusa/server/src/api/admin/swaps/route.js +6 -12
- package/.medusa/server/src/api/admin/swaps/validators.js +9 -13
- package/.medusa/server/src/api/store/orders/[order_id]/swaps/route.js +47 -2
- package/.medusa/server/src/api/store/swaps/[id]/cancel/route.js +8 -1
- package/.medusa/server/src/api/store/swaps/[id]/route.js +15 -4
- package/.medusa/server/src/api/store/swaps/route.js +53 -10
- package/.medusa/server/src/helpers/swaps.js +1 -1
- package/.medusa/server/src/modules/swap/migrations/Migration20260123144734.js +29 -0
- package/.medusa/server/src/modules/swap/migrations/Migration20260123162423.js +48 -0
- package/.medusa/server/src/modules/swap/migrations/Migration20260126114640.js +48 -0
- package/.medusa/server/src/modules/swap/models/swap.js +7 -2
- package/.medusa/server/src/modules/swap/service.js +259 -32
- package/.medusa/server/src/subscribers/exchange-created.js +171 -0
- package/.medusa/server/src/workflows/steps/swap/create-medusa-exchange-step.js +153 -19
- package/.medusa/server/src/workflows/steps/swap/create-medusa-return-step.js +62 -6
- package/.medusa/server/src/workflows/steps/swap/create-swap-step.js +7 -12
- package/.medusa/server/src/workflows/steps/swap/index.js +6 -4
- package/.medusa/server/src/workflows/steps/swap/rollback-return-step.js +70 -0
- package/.medusa/server/src/workflows/steps/swap/sync-medusa-status-step.js +49 -3
- package/.medusa/server/src/workflows/steps/swap/update-swap-exchange-details-step.js +27 -0
- package/.medusa/server/src/workflows/steps/swap/validate-eligibility-step.js +9 -4
- package/.medusa/server/src/workflows/steps/swap/validate-order-step.js +24 -1
- package/.medusa/server/src/workflows/swaps/approve-swap-workflow.js +19 -3
- package/.medusa/server/src/workflows/swaps/create-swap-workflow.js +3 -1
- package/.medusa/server/src/workflows/swaps/execute-swap-workflow.js +26 -4
- package/package.json +1 -1
- package/.medusa/server/src/api/admin/swaps/[id]/process-payment/route.js +0 -152
- package/.medusa/server/src/api/admin/swaps/[id]/status/route.js +0 -45
- package/.medusa/server/src/api/admin/swaps/[id]/sync/route.js +0 -148
- package/.medusa/server/src/workflows/steps/swap/handle-payment-difference-step.js +0 -102
|
@@ -33,21 +33,25 @@ const GET = async (req, res) => {
|
|
|
33
33
|
const swapService = req.scope.resolve(swap_1.SWAP_MODULE);
|
|
34
34
|
// Get query parameters
|
|
35
35
|
const orderId = req.query.order_id;
|
|
36
|
-
const
|
|
36
|
+
const limit = req.query.limit ? parseInt(req.query.limit, 10) : 100;
|
|
37
|
+
const offset = req.query.offset ? parseInt(req.query.offset, 10) : 0;
|
|
38
|
+
// Always filter by authenticated customer_id for security
|
|
39
|
+
const filters = {
|
|
40
|
+
customer_id: customerId,
|
|
41
|
+
};
|
|
37
42
|
if (orderId) {
|
|
38
43
|
filters.order_id = orderId;
|
|
39
44
|
}
|
|
40
|
-
// Note: We'd need to add a method to filter by customer_id
|
|
41
|
-
// For now, we'll list all swaps and filter client-side
|
|
42
|
-
// In production, you'd want to add a proper filter method
|
|
43
45
|
const swaps = await swapService.listSwaps(filters, {
|
|
44
|
-
take:
|
|
45
|
-
skip:
|
|
46
|
+
take: limit,
|
|
47
|
+
skip: offset,
|
|
46
48
|
});
|
|
47
|
-
|
|
48
|
-
// For now, return all swaps - filtering should be done via order_id
|
|
49
|
+
const swapArray = Array.isArray(swaps) ? swaps : swaps ? [swaps] : [];
|
|
49
50
|
res.json({
|
|
50
|
-
swaps:
|
|
51
|
+
swaps: swapArray,
|
|
52
|
+
count: swapArray.length,
|
|
53
|
+
limit,
|
|
54
|
+
offset,
|
|
51
55
|
});
|
|
52
56
|
}
|
|
53
57
|
catch (error) {
|
|
@@ -77,6 +81,10 @@ const POST = async (req, res) => {
|
|
|
77
81
|
}
|
|
78
82
|
// Validate request body
|
|
79
83
|
const body = CreateSwapSchema.parse(requestBody);
|
|
84
|
+
// Ensure workflow is available
|
|
85
|
+
if (!create_swap_workflow_1.createSwapWorkflow) {
|
|
86
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNEXPECTED_STATE, "Swap workflow is not available. Please ensure the plugin is properly installed.");
|
|
87
|
+
}
|
|
80
88
|
const { result } = await (0, create_swap_workflow_1.createSwapWorkflow)(req.scope).run({
|
|
81
89
|
input: {
|
|
82
90
|
order_id: body.order_id,
|
|
@@ -113,6 +121,41 @@ const POST = async (req, res) => {
|
|
|
113
121
|
}
|
|
114
122
|
const errorMessage = error instanceof Error ? error.message : "Unknown error";
|
|
115
123
|
const errorStack = error instanceof Error ? error.stack : undefined;
|
|
124
|
+
// Check for workflow resolution errors
|
|
125
|
+
if (errorMessage.includes("Could not resolve") ||
|
|
126
|
+
errorMessage.includes("Workflow not available") ||
|
|
127
|
+
errorMessage.includes("orderModuleService") ||
|
|
128
|
+
errorMessage.includes("createSwapWorkflow")) {
|
|
129
|
+
console.error("Workflow or service resolution error:", {
|
|
130
|
+
customer_id: customerId,
|
|
131
|
+
error: errorMessage,
|
|
132
|
+
stack: errorStack,
|
|
133
|
+
body: req.body,
|
|
134
|
+
note: "This might indicate a plugin configuration issue. Ensure the plugin is properly installed and workflows are exported correctly.",
|
|
135
|
+
});
|
|
136
|
+
res.status(500).json({
|
|
137
|
+
message: "Failed to initialize swap workflow",
|
|
138
|
+
error: errorMessage,
|
|
139
|
+
hint: "Please ensure the order-management plugin is properly installed and configured.",
|
|
140
|
+
});
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
// Check for specific error about orderModuleService.list
|
|
144
|
+
if (errorMessage.includes("orderModuleService.list") || errorMessage.includes(".list is not a function")) {
|
|
145
|
+
console.error("Order service method error:", {
|
|
146
|
+
customer_id: customerId,
|
|
147
|
+
error: errorMessage,
|
|
148
|
+
stack: errorStack,
|
|
149
|
+
body: req.body,
|
|
150
|
+
note: "Order service does not have a .list() method. Use remoteQuery or listOrders instead.",
|
|
151
|
+
});
|
|
152
|
+
res.status(500).json({
|
|
153
|
+
message: "Failed to verify order",
|
|
154
|
+
error: errorMessage,
|
|
155
|
+
hint: "Order service method error. Please check order verification implementation.",
|
|
156
|
+
});
|
|
157
|
+
return;
|
|
158
|
+
}
|
|
116
159
|
console.error("Failed to create swap:", {
|
|
117
160
|
customer_id: customerId,
|
|
118
161
|
error: errorMessage,
|
|
@@ -126,4 +169,4 @@ const POST = async (req, res) => {
|
|
|
126
169
|
}
|
|
127
170
|
};
|
|
128
171
|
exports.POST = POST;
|
|
129
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
172
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3N3YXBzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHFEQUF1RDtBQUN2RCx3RkFBa0Y7QUFDbEYsZ0RBQW1EO0FBRW5ELDZCQUF1QjtBQUV2QixNQUFNLGdCQUFnQixHQUFHLE9BQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEMsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7SUFDcEIsWUFBWSxFQUFFLE9BQUMsQ0FBQyxLQUFLLENBQ25CLE9BQUMsQ0FBQyxNQUFNLENBQUM7UUFDUCxFQUFFLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRTtRQUNkLFFBQVEsRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO1FBQy9CLE1BQU0sRUFBRSxPQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsUUFBUSxFQUFFO0tBQzlCLENBQUMsQ0FDSDtJQUNELFNBQVMsRUFBRSxPQUFDLENBQUMsS0FBSyxDQUNoQixPQUFDLENBQUMsTUFBTSxDQUFDO1FBQ1AsVUFBVSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUU7UUFDdEIsUUFBUSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7S0FDaEMsQ0FBQyxDQUNIO0lBQ0QsTUFBTSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDN0IsSUFBSSxFQUFFLE9BQUMsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxRQUFRLEVBQUU7Q0FDNUIsQ0FBQyxDQUFBO0FBRUssTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUFrQixFQUNsQixHQUFtQixFQUNKLEVBQUU7SUFDakIsbUNBQW1DO0lBQ25DLE1BQU0sV0FBVyxHQUFJLEdBRW5CLENBQUMsWUFBWSxDQUFBO0lBRWYsTUFBTSxVQUFVLEdBQUcsV0FBVyxFQUFFLFFBQVEsQ0FB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
|
|
@@ -85,4 +85,4 @@ async function cancelSwap(swapId, container) {
|
|
|
85
85
|
const data = (await response.json());
|
|
86
86
|
return data.swap;
|
|
87
87
|
}
|
|
88
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhcHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvaGVscGVycy9zd2Fwcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQXdDQSw4Q0E0QkM7QUFLRCw0QkFxQkM7QUFLRCwwQkFtQkM7QUFLRCxnQ0FtQkM7QUF6R0Q7O0dBRUc7QUFDSSxLQUFLLFVBQVUsaUJBQWlCLENBQ3JDLEtBQTZCLEVBQzdCLFNBQTBCO0lBRTFCLE1BQU0sRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEdBQUcsS0FBSyxDQUFBO0lBRTlELE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLGNBQWMsRUFBRTtRQUMzQyxNQUFNLEVBQUUsTUFBTTtRQUNkLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkM7UUFDRCxXQUFXLEVBQUUsU0FBUztRQUN0QixJQUFJLEVBQUUsSUFBSSxDQUFDLFNBQVMsQ0FBQztZQUNuQixRQUFRLEVBQUUsT0FBTztZQUNqQixZQUFZLEVBQUUsV0FBVztZQUN6QixTQUFTLEVBQUUsUUFBUTtZQUNuQixNQUFNO1lBQ04sSUFBSTtTQUNMLENBQUM7S0FDSCxDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSwrQkFBK0IsQ0FBQyxDQUFBO0lBQ25FLENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFtQixDQUFBO0lBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtBQUNsQixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsUUFBUSxDQUM1QixPQUFnQixFQUNoQixTQUEyQjtJQUUzQixNQUFNLEdBQUcsR0FBRyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlCQUFpQixPQUFPLFFBQVEsQ0FBQyxDQUFDLENBQUMsY0FBYyxDQUFBO0lBRXZFLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLEdBQUcsRUFBRTtRQUNoQyxNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkM7UUFDRCxXQUFXLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSwwQkFBMEIsQ0FBQyxDQUFBO0lBQzlELENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFzQixDQUFBO0lBQ3pELE9BQU8sSUFBSSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUE7QUFDekIsQ0FBQztBQUVEOztHQUVHO0FBQ0ksS0FBSyxVQUFVLE9BQU8sQ0FDM0IsTUFBYyxFQUNkLFNBQTJCO0lBRTNCLE1BQU0sUUFBUSxHQUFHLE1BQU0sS0FBSyxDQUFDLGdCQUFnQixNQUFNLEVBQUUsRUFBRTtRQUNyRCxNQUFNLEVBQUUsS0FBSztRQUNiLE9BQU8sRUFBRTtZQUNQLGNBQWMsRUFBRSxrQkFBa0I7U0FDbkM7UUFDRCxXQUFXLEVBQUUsU0FBUztLQUN2QixDQUFDLENBQUE7SUFFRixJQUFJLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ2pCLE1BQU0sS0FBSyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFBO1FBQ25DLE1BQU0sSUFBSSxLQUFLLENBQUMsS0FBSyxDQUFDLE9BQU8sSUFBSSx5QkFBeUIsQ0FBQyxDQUFBO0lBQzdELENBQUM7SUFFRCxNQUFNLElBQUksR0FBRyxDQUFDLE1BQU0sUUFBUSxDQUFDLElBQUksRUFBRSxDQUFtQixDQUFBO0lBQ3RELE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQTtBQUNsQixDQUFDO0FBRUQ7O0dBRUc7QUFDSSxLQUFLLFVBQVUsVUFBVSxDQUM5QixNQUFjLEVBQ2QsU0FBMkI7SUFFM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxLQUFLLENBQUMsZ0JBQWdCLE1BQU0sU0FBUyxFQUFFO1FBQzVELE1BQU0sRUFBRSxNQUFNO1FBQ2QsT0FBTyxFQUFFO1lBQ1AsY0FBYyxFQUFFLGtCQUFrQjtTQUNuQztRQUNELFdBQVcsRUFBRSxTQUFTO0tBQ3ZCLENBQUMsQ0FBQTtJQUVGLElBQUksQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDakIsTUFBTSxLQUFLLEdBQUcsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUE7UUFDbkMsTUFBTSxJQUFJLEtBQUssQ0FBQyxLQUFLLENBQUMsT0FBTyxJQUFJLHVCQUF1QixDQUFDLENBQUE7SUFDM0QsQ0FBQztJQUVELE1BQU0sSUFBSSxHQUFHLENBQUMsTUFBTSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQW1CLENBQUE7SUFDdEQsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFBO0FBQ2xCLENBQUMifQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260123144734 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260123144734 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
// Add indexes on exchange_id and return_id for efficient subscriber queries
|
|
8
|
+
// These indexes significantly improve performance when subscribers look up swaps
|
|
9
|
+
// by Medusa exchange_id or return_id
|
|
10
|
+
this.addSql(`
|
|
11
|
+
CREATE INDEX IF NOT EXISTS "IDX_swap_exchange_id"
|
|
12
|
+
ON "swap" ("exchange_id") WHERE "deleted_at" IS NULL AND "exchange_id" IS NOT NULL;
|
|
13
|
+
`);
|
|
14
|
+
this.addSql(`
|
|
15
|
+
CREATE INDEX IF NOT EXISTS "IDX_swap_return_id"
|
|
16
|
+
ON "swap" ("return_id") WHERE "deleted_at" IS NULL AND "return_id" IS NOT NULL;
|
|
17
|
+
`);
|
|
18
|
+
}
|
|
19
|
+
async down() {
|
|
20
|
+
this.addSql(`
|
|
21
|
+
DROP INDEX IF EXISTS "IDX_swap_exchange_id";
|
|
22
|
+
`);
|
|
23
|
+
this.addSql(`
|
|
24
|
+
DROP INDEX IF EXISTS "IDX_swap_return_id";
|
|
25
|
+
`);
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
exports.Migration20260123144734 = Migration20260123144734;
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAxMjMxNDQ3MzQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zd2FwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjAxMjMxNDQ3MzQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTiw0RUFBNEU7UUFDNUUsaUZBQWlGO1FBQ2pGLHFDQUFxQztRQUNyQyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDOztLQUVYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7O0tBRVgsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBekJELDBEQXlCQyJ9
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260123162423 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260123162423 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
// Add customer_id column (nullable initially for backfill)
|
|
8
|
+
this.addSql(`
|
|
9
|
+
ALTER TABLE "swap"
|
|
10
|
+
ADD COLUMN IF NOT EXISTS "customer_id" text NULL;
|
|
11
|
+
`);
|
|
12
|
+
// Backfill customer_id from orders table for existing swaps
|
|
13
|
+
this.addSql(`
|
|
14
|
+
UPDATE "swap" s
|
|
15
|
+
SET "customer_id" = o."customer_id"
|
|
16
|
+
FROM "order" o
|
|
17
|
+
WHERE s."order_id" = o."id"
|
|
18
|
+
AND s."customer_id" IS NULL;
|
|
19
|
+
`);
|
|
20
|
+
// Delete any swaps that couldn't be backfilled (orphaned swaps without valid orders)
|
|
21
|
+
// This ensures data integrity before making customer_id NOT NULL
|
|
22
|
+
this.addSql(`
|
|
23
|
+
DELETE FROM "swap"
|
|
24
|
+
WHERE "customer_id" IS NULL;
|
|
25
|
+
`);
|
|
26
|
+
// Make customer_id NOT NULL after backfill
|
|
27
|
+
this.addSql(`
|
|
28
|
+
ALTER TABLE "swap"
|
|
29
|
+
ALTER COLUMN "customer_id" SET NOT NULL;
|
|
30
|
+
`);
|
|
31
|
+
// Add index on customer_id for efficient filtering
|
|
32
|
+
this.addSql(`
|
|
33
|
+
CREATE INDEX IF NOT EXISTS "IDX_swap_customer_id"
|
|
34
|
+
ON "swap" ("customer_id") WHERE "deleted_at" IS NULL;
|
|
35
|
+
`);
|
|
36
|
+
}
|
|
37
|
+
async down() {
|
|
38
|
+
this.addSql(`
|
|
39
|
+
DROP INDEX IF EXISTS "IDX_swap_customer_id";
|
|
40
|
+
`);
|
|
41
|
+
this.addSql(`
|
|
42
|
+
ALTER TABLE "swap"
|
|
43
|
+
DROP COLUMN IF EXISTS "customer_id";
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.Migration20260123162423 = Migration20260123162423;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAxMjMxNjI0MjMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zd2FwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjAxMjMxNjI0MjMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTiwyREFBMkQ7UUFDM0QsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsNERBQTREO1FBQzVELElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7OztLQU1YLENBQUMsQ0FBQTtRQUVGLHFGQUFxRjtRQUNyRixpRUFBaUU7UUFDakUsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsMkNBQTJDO1FBQzNDLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLG1EQUFtRDtRQUNuRCxJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7SUFDSixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDOztLQUVYLENBQUMsQ0FBQTtRQUVGLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtJQUNKLENBQUM7Q0FDRjtBQS9DRCwwREErQ0MifQ==
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260126114640 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20260126114640 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
// Add return_location_id column
|
|
8
|
+
this.addSql(`
|
|
9
|
+
ALTER TABLE "swap"
|
|
10
|
+
ADD COLUMN IF NOT EXISTS "return_location_id" text NULL;
|
|
11
|
+
`);
|
|
12
|
+
// Add return_shipping_method_id column
|
|
13
|
+
this.addSql(`
|
|
14
|
+
ALTER TABLE "swap"
|
|
15
|
+
ADD COLUMN IF NOT EXISTS "return_shipping_method_id" text NULL;
|
|
16
|
+
`);
|
|
17
|
+
// Add outbound_shipping_method_id column
|
|
18
|
+
this.addSql(`
|
|
19
|
+
ALTER TABLE "swap"
|
|
20
|
+
ADD COLUMN IF NOT EXISTS "outbound_shipping_method_id" text NULL;
|
|
21
|
+
`);
|
|
22
|
+
// Add send_notification column
|
|
23
|
+
this.addSql(`
|
|
24
|
+
ALTER TABLE "swap"
|
|
25
|
+
ADD COLUMN IF NOT EXISTS "send_notification" boolean NULL DEFAULT false;
|
|
26
|
+
`);
|
|
27
|
+
}
|
|
28
|
+
async down() {
|
|
29
|
+
this.addSql(`
|
|
30
|
+
ALTER TABLE "swap"
|
|
31
|
+
DROP COLUMN IF EXISTS "send_notification";
|
|
32
|
+
`);
|
|
33
|
+
this.addSql(`
|
|
34
|
+
ALTER TABLE "swap"
|
|
35
|
+
DROP COLUMN IF EXISTS "outbound_shipping_method_id";
|
|
36
|
+
`);
|
|
37
|
+
this.addSql(`
|
|
38
|
+
ALTER TABLE "swap"
|
|
39
|
+
DROP COLUMN IF EXISTS "return_shipping_method_id";
|
|
40
|
+
`);
|
|
41
|
+
this.addSql(`
|
|
42
|
+
ALTER TABLE "swap"
|
|
43
|
+
DROP COLUMN IF EXISTS "return_location_id";
|
|
44
|
+
`);
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
exports.Migration20260126114640 = Migration20260126114640;
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjAxMjYxMTQ2NDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9zd2FwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjAxMjYxMTQ2NDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixnQ0FBZ0M7UUFDaEMsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsdUNBQXVDO1FBQ3ZDLElBQUksQ0FBQyxNQUFNLENBQUM7OztLQUdYLENBQUMsQ0FBQTtRQUVGLHlDQUF5QztRQUN6QyxJQUFJLENBQUMsTUFBTSxDQUFDOzs7S0FHWCxDQUFDLENBQUE7UUFFRiwrQkFBK0I7UUFDL0IsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7O0tBR1gsQ0FBQyxDQUFBO0lBQ0osQ0FBQztDQUNGO0FBaERELDBEQWdEQyJ9
|
|
@@ -5,7 +5,8 @@ const utils_1 = require("@medusajs/framework/utils");
|
|
|
5
5
|
exports.Swap = utils_1.model.define("swap", {
|
|
6
6
|
id: utils_1.model.id().primaryKey(),
|
|
7
7
|
order_id: utils_1.model.text(),
|
|
8
|
-
|
|
8
|
+
customer_id: utils_1.model.text(), // Customer who initiated the swap request
|
|
9
|
+
status: utils_1.model.text().default("requested"), // requested, approved, rejected
|
|
9
10
|
return_items: utils_1.model.json().nullable(), // Array of { id: string, quantity: number, reason?: string }
|
|
10
11
|
new_items: utils_1.model.json().nullable(), // Array of { variant_id: string, quantity: number }
|
|
11
12
|
difference_due: utils_1.model.number().default(0), // Price difference (positive = customer owes, negative = refund)
|
|
@@ -13,9 +14,13 @@ exports.Swap = utils_1.model.define("swap", {
|
|
|
13
14
|
fulfillment_status: utils_1.model.text().nullable(), // not_fulfilled, fulfilled, shipped, delivered, cancelled
|
|
14
15
|
return_id: utils_1.model.text().nullable(), // Link to Medusa's return if created
|
|
15
16
|
exchange_id: utils_1.model.text().nullable(), // Link to Medusa's exchange if created
|
|
17
|
+
return_location_id: utils_1.model.text().nullable(), // Stock location ID where returns should be sent
|
|
18
|
+
return_shipping_method_id: utils_1.model.text().nullable(), // Shipping method ID for return shipment
|
|
19
|
+
outbound_shipping_method_id: utils_1.model.text().nullable(), // Shipping method ID for outbound (new items) shipment
|
|
20
|
+
send_notification: utils_1.model.boolean().nullable(), // Whether to notify customer about exchange
|
|
16
21
|
reason: utils_1.model.text().nullable(), // Reason for swap
|
|
17
22
|
note: utils_1.model.text().nullable(), // Customer note
|
|
18
23
|
metadata: utils_1.model.json().nullable(), // Status history, admin notes, etc.
|
|
19
24
|
});
|
|
20
25
|
exports.default = exports.Swap;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3dhcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3N3YXAvbW9kZWxzL3N3YXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsSUFBSSxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFO0lBQ3ZDLEVBQUUsRUFBRSxhQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsVUFBVSxFQUFFO0lBQzNCLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0lBQ3RCLFdBQVcsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLEVBQUUsMENBQTBDO0lBQ3JFLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLGdDQUFnQztJQUMzRSxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLDZEQUE2RDtJQUNwRyxTQUFTLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLG9EQUFvRDtJQUN4RixjQUFjLEVBQUUsYUFBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsRUFBRSxpRUFBaUU7SUFDNUcsY0FBYyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSx5Q0FBeUM7SUFDbEYsa0JBQWtCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLDBEQUEwRDtJQUN2RyxTQUFTLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLHFDQUFxQztJQUN6RSxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLHVDQUF1QztJQUM3RSxrQkFBa0IsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsaURBQWlEO0lBQzlGLHlCQUF5QixFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUUsRUFBRSx5Q0FBeUM7SUFDN0YsMkJBQTJCLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRSxFQUFFLHVEQUF1RDtJQUM3RyxpQkFBaUIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsNENBQTRDO0lBQzNGLE1BQU0sRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsa0JBQWtCO0lBQ25ELElBQUksRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsZ0JBQWdCO0lBQy9DLFFBQVEsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsUUFBUSxFQUFFLEVBQUUsb0NBQW9DO0NBQ3hFLENBQUMsQ0FBQTtBQUVGLGtCQUFlLFlBQUksQ0FBQSJ9
|