@lodashventure/medusa-membership 0.1.2 → 0.3.1
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/middlewares.js +15 -1
- package/.medusa/server/src/api/store/customers/me/member-tier/route.js +74 -4
- package/.medusa/server/src/api/store/customers/me/wishlist/route.js +1 -1
- package/.medusa/server/src/api/store/promotion-codes/[id]/collect/route.js +116 -0
- package/.medusa/server/src/api/store/promotion-codes/[id]/route.js +123 -0
- package/.medusa/server/src/api/store/promotion-codes/route.js +62 -9
- package/.medusa/server/src/modules/membership/migrations/Migration20250416034358.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250416231624.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250418020235.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250420014232.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250420050937.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250421010109.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250421011451.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250422230822.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250423021328.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250423021925.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250424011144.js +2 -2
- package/.medusa/server/src/modules/membership/migrations/Migration20250507013347.js +2 -2
- package/.medusa/server/src/modules/promotion-cache/service.js +5 -1
- package/.medusa/server/src/modules/usable-promo/migrations/Migration20250504044646.js +2 -2
- package/.medusa/server/src/modules/wishlist/migrations/Migration20250424011114.js +2 -2
- package/.medusa/server/src/subscribers/customer-created.js +33 -4
- package/.medusa/server/src/subscribers/order-canceled.js +48 -0
- package/.medusa/server/src/subscribers/order-completed.js +62 -16
- package/.medusa/server/src/subscribers/order-fulfilled.js +68 -0
- package/.medusa/server/src/subscribers/order-payment-captured.js +111 -0
- package/.medusa/server/src/subscribers/order-placed.js +83 -9
- package/.medusa/server/src/subscribers/return-received.js +48 -0
- package/.medusa/server/src/workflows/membership/create-membership.js +27 -6
- package/.medusa/server/src/workflows/membership/void-membership-points.js +110 -0
- package/.medusa/server/src/workflows/usable-promo/invalidateUsedPromotionWorkflow.js +8 -2
- package/package.json +14 -28
|
@@ -1,17 +1,91 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.config = void 0;
|
|
4
|
-
exports.default =
|
|
4
|
+
exports.default = handleOrderPlaced;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
6
|
const invalidateUsedPromotionWorkflow_1 = require("../workflows/usable-promo/invalidateUsedPromotionWorkflow");
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
7
|
+
const create_membership_1 = require("../workflows/membership/create-membership");
|
|
8
|
+
async function handleOrderPlaced({ event: { data }, container, }) {
|
|
9
|
+
try {
|
|
10
|
+
// First, invalidate all promotions used in this order
|
|
11
|
+
try {
|
|
12
|
+
await invalidateUsedPromotionWorkflow_1.invalidatedUsePromotionWorkflow.run({
|
|
13
|
+
input: {
|
|
14
|
+
order_id: data.id,
|
|
15
|
+
},
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
catch (promoError) {
|
|
19
|
+
console.error(`[Membership] Error invalidating promotions for order ${data.id}:`, promoError);
|
|
20
|
+
// Continue processing - promotion invalidation shouldn't block membership creation
|
|
21
|
+
}
|
|
22
|
+
// Then, ensure customer has a membership (create with 0 points if doesn't exist)
|
|
23
|
+
console.log(`[Membership] Processing order.placed event for order: ${data.id}`);
|
|
24
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
25
|
+
// Get order details
|
|
26
|
+
const { data: orders } = await query.graph({
|
|
27
|
+
entity: "order",
|
|
28
|
+
fields: ["id", "customer_id", "status"],
|
|
29
|
+
filters: {
|
|
30
|
+
id: data.id,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
if (!orders?.length) {
|
|
34
|
+
console.error(`[Membership] Order ${data.id} not found`);
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
const order = orders[0];
|
|
38
|
+
// Check if customer exists
|
|
39
|
+
if (!order.customer_id) {
|
|
40
|
+
console.log(`[Membership] Order ${order.id} has no customer (guest checkout), skipping membership creation`);
|
|
41
|
+
return;
|
|
42
|
+
}
|
|
43
|
+
// Check if customer already has a membership
|
|
44
|
+
const { data: customers } = await query.graph({
|
|
45
|
+
entity: "customer",
|
|
46
|
+
fields: ["id", "membership.id", "membership.membership_points"],
|
|
47
|
+
filters: {
|
|
48
|
+
id: order.customer_id,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
if (!customers?.length) {
|
|
52
|
+
console.error(`[Membership] Customer ${order.customer_id} not found`);
|
|
53
|
+
return;
|
|
54
|
+
}
|
|
55
|
+
const customer = customers[0];
|
|
56
|
+
if (!customer.membership) {
|
|
57
|
+
// This should rarely happen since memberships are now created on customer creation
|
|
58
|
+
// But we'll handle it as a fallback for existing customers or edge cases
|
|
59
|
+
console.log(`[Membership] Customer ${order.customer_id} doesn't have membership (edge case), creating one from order ${order.id}`);
|
|
60
|
+
// Check if membership is enabled before creating
|
|
61
|
+
const { data: [store], } = await query.graph({
|
|
62
|
+
entity: "store",
|
|
63
|
+
fields: ["id", "membership_config.*"],
|
|
64
|
+
});
|
|
65
|
+
if (store?.membership_config?.enable_membership) {
|
|
66
|
+
// Create membership with 0 points (points will be added when order is completed)
|
|
67
|
+
await create_membership_1.createMembershipWorkflow.run({
|
|
68
|
+
input: {
|
|
69
|
+
customer_id: order.customer_id,
|
|
70
|
+
points: 0,
|
|
71
|
+
},
|
|
72
|
+
});
|
|
73
|
+
console.log(`[Membership] Successfully created membership for customer ${order.customer_id}`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
console.log(`[Membership] Membership is disabled in store configuration, skipping membership creation`);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
console.log(`[Membership] Customer ${order.customer_id} already has membership with ${customer.membership.membership_points} points`);
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
catch (error) {
|
|
84
|
+
console.error(`[Membership] Error processing order.placed for order ${data.id}:`, error);
|
|
85
|
+
// Don't throw error to avoid blocking order flow
|
|
86
|
+
}
|
|
13
87
|
}
|
|
14
88
|
exports.config = {
|
|
15
89
|
event: `order.placed`,
|
|
16
90
|
};
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
91
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxvQ0E2RkM7QUFqR0QscURBQXNFO0FBQ3RFLCtHQUE0RztBQUM1RyxpRkFBcUY7QUFFdEUsS0FBSyxVQUFVLGlCQUFpQixDQUFDLEVBQzlDLEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUNmLFNBQVMsR0FDc0I7SUFDL0IsSUFBSSxDQUFDO1FBQ0gsc0RBQXNEO1FBQ3RELElBQUksQ0FBQztZQUNILE1BQU0saUVBQStCLENBQUMsR0FBRyxDQUFDO2dCQUN4QyxLQUFLLEVBQUU7b0JBQ0wsUUFBUSxFQUFFLElBQUksQ0FBQyxFQUFFO2lCQUNsQjthQUNGLENBQUMsQ0FBQztRQUNMLENBQUM7UUFBQyxPQUFPLFVBQVUsRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsd0RBQXdELElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUM5RixtRkFBbUY7UUFDckYsQ0FBQztRQUVELGlGQUFpRjtRQUNqRixPQUFPLENBQUMsR0FBRyxDQUFDLHlEQUF5RCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVoRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpFLG9CQUFvQjtRQUNwQixNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUN6QyxNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxhQUFhLEVBQUUsUUFBUSxDQUFDO1lBQ3ZDLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7YUFDWjtTQUNGLENBQUMsQ0FB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
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.config = void 0;
|
|
4
|
+
exports.default = returnReceivedHandler;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const void_membership_points_1 = require("../workflows/membership/void-membership-points");
|
|
7
|
+
async function returnReceivedHandler({ event: { data }, container, }) {
|
|
8
|
+
try {
|
|
9
|
+
console.log(`[Membership] Processing return.received event for return: ${data.id}, order: ${data.order_id}`);
|
|
10
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
11
|
+
// Get order details
|
|
12
|
+
const { data: orders, } = await query.graph({
|
|
13
|
+
entity: "order",
|
|
14
|
+
fields: ["id", "customer_id", "status"],
|
|
15
|
+
filters: {
|
|
16
|
+
id: data.order_id,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
if (!orders?.length) {
|
|
20
|
+
console.error(`[Membership] Order ${data.order_id} not found`);
|
|
21
|
+
return;
|
|
22
|
+
}
|
|
23
|
+
const order = orders[0];
|
|
24
|
+
console.log(`[Membership] Order details - ID: ${order.id}, Status: ${order.status}, Customer: ${order.customer_id}`);
|
|
25
|
+
// Check if customer exists
|
|
26
|
+
if (!order.customer_id) {
|
|
27
|
+
console.log(`[Membership] Order ${order.id} has no customer (guest checkout), skipping void points`);
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
// Void membership points for this returned order
|
|
31
|
+
await void_membership_points_1.voidMembershipPointsWorkflow.run({
|
|
32
|
+
input: {
|
|
33
|
+
customer_id: order.customer_id,
|
|
34
|
+
order_id: order.id,
|
|
35
|
+
reason: "order_returned",
|
|
36
|
+
},
|
|
37
|
+
});
|
|
38
|
+
console.log(`[Membership] Successfully processed return for order ${order.id}`);
|
|
39
|
+
}
|
|
40
|
+
catch (error) {
|
|
41
|
+
console.error(`[Membership] Error processing return.received for order ${data.order_id}:`, error);
|
|
42
|
+
// Don't throw error to avoid blocking order flow
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
exports.config = {
|
|
46
|
+
event: `return.received`,
|
|
47
|
+
};
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0dXJuLXJlY2VpdmVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL3JldHVybi1yZWNlaXZlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx3Q0FnREM7QUFuREQscURBQXNFO0FBQ3RFLDJGQUE4RjtBQUUvRSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUN3QztJQUNqRCxJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxJQUFJLENBQUMsRUFBRSxZQUFZLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTdHLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakUsb0JBQW9CO1FBQ3BCLE1BQU0sRUFDSixJQUFJLEVBQUUsTUFBTSxHQUNiLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7WUFDdkMsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsUUFBUTthQUNsQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLFFBQVEsWUFBWSxDQUFDLENBQUM7WUFDL0QsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsYUFBYSxLQUFLLENBQUMsTUFBTSxlQUFlLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDO1FBRXJILDJCQUEyQjtRQUMzQixJQUFJLENBQUMsS0FBSyxDQUFDLFdBQVcsRUFBRSxDQUFDO1lBQ3ZCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxFQUFFLHlEQUF5RCxDQUFDLENBQUM7WUFDckcsT0FBTztRQUNULENBQUM7UUFFRCxpREFBaUQ7UUFDakQsTUFBTSxxREFBNEIsQ0FBQyxHQUFHLENBQUM7WUFDckMsS0FBSyxFQUFFO2dCQUNMLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsUUFBUSxFQUFFLEtBQUssQ0FBQyxFQUFFO2dCQUNsQixNQUFNLEVBQUUsZ0JBQWdCO2FBQ3pCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3REFBd0QsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDbEYsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDbEcsaURBQWlEO0lBQ25ELENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxpQkFBaUI7Q0FDekIsQ0FBQyJ9
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.createMembershipWorkflow = void 0;
|
|
4
|
-
const framework_1 = require("@medusajs/framework");
|
|
5
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
6
5
|
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
7
6
|
const membership_1 = require("../../modules/membership");
|
|
8
7
|
const createMembershipStep = (0, workflows_sdk_1.createStep)("create-membership", async (data, { container }) => {
|
|
9
8
|
const membershipModuleService = container.resolve(membership_1.MEMBERSHIP_MODULE);
|
|
9
|
+
console.log(`[Membership Workflow] Creating membership for customer ${data.customer_id} with ${data.points} points`);
|
|
10
10
|
const [memberTier] = await membershipModuleService.listMemberTiers({
|
|
11
11
|
min_points: {
|
|
12
12
|
$lte: data.points,
|
|
@@ -17,13 +17,16 @@ const createMembershipStep = (0, workflows_sdk_1.createStep)("create-membership"
|
|
|
17
17
|
},
|
|
18
18
|
take: 1,
|
|
19
19
|
});
|
|
20
|
+
console.log(`[Membership Workflow] Found member tier: ${memberTier ? `${memberTier.name} (id: ${memberTier.id}, min_points: ${memberTier.min_points})` : "none"}`);
|
|
20
21
|
if (memberTier) {
|
|
21
22
|
const membership = await membershipModuleService.createMemberships({
|
|
22
23
|
member_tier_id: memberTier.id,
|
|
23
24
|
membership_points: data.points,
|
|
24
25
|
});
|
|
26
|
+
console.log(`[Membership Workflow] Created membership: ${membership.id} with tier ${memberTier.name}`);
|
|
25
27
|
return new workflows_sdk_1.StepResponse({ membership }, { membership });
|
|
26
28
|
}
|
|
29
|
+
console.log(`[Membership Workflow] No member tier found for ${data.points} points`);
|
|
27
30
|
return new workflows_sdk_1.StepResponse(null, null);
|
|
28
31
|
}, async (membership, { container }) => {
|
|
29
32
|
const membershipModuleService = container.resolve(membership_1.MEMBERSHIP_MODULE);
|
|
@@ -31,8 +34,9 @@ const createMembershipStep = (0, workflows_sdk_1.createStep)("create-membership"
|
|
|
31
34
|
return;
|
|
32
35
|
await membershipModuleService.deleteMemberships(membership.membership.id);
|
|
33
36
|
});
|
|
34
|
-
const createMemberShipLink = (0, workflows_sdk_1.createStep)("create-membership-link", async (data) => {
|
|
35
|
-
const link =
|
|
37
|
+
const createMemberShipLink = (0, workflows_sdk_1.createStep)("create-membership-link", async (data, { container }) => {
|
|
38
|
+
const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
|
|
39
|
+
console.log(`[Membership Workflow] Creating link between customer ${data.customerId} and membership ${data.membershipId}`);
|
|
36
40
|
try {
|
|
37
41
|
await link.create([
|
|
38
42
|
{
|
|
@@ -44,17 +48,34 @@ const createMemberShipLink = (0, workflows_sdk_1.createStep)("create-membership-
|
|
|
44
48
|
},
|
|
45
49
|
},
|
|
46
50
|
]);
|
|
51
|
+
console.log(`[Membership Workflow] Successfully created link between customer and membership`);
|
|
47
52
|
}
|
|
48
53
|
catch (error) {
|
|
49
|
-
|
|
54
|
+
console.error(`[Membership Workflow] Failed to create link:`, error);
|
|
55
|
+
const membershipModuleService = container.resolve(membership_1.MEMBERSHIP_MODULE);
|
|
50
56
|
await membershipModuleService.deleteMemberships(data.membershipId);
|
|
51
57
|
throw error;
|
|
52
58
|
}
|
|
53
59
|
return new workflows_sdk_1.StepResponse({ data }, { data });
|
|
60
|
+
}, async (data, { container }) => {
|
|
61
|
+
// Rollback: remove the link
|
|
62
|
+
if (!data?.data)
|
|
63
|
+
return;
|
|
64
|
+
const link = container.resolve(utils_1.ContainerRegistrationKeys.LINK);
|
|
65
|
+
await link.dismiss([
|
|
66
|
+
{
|
|
67
|
+
[utils_1.Modules.CUSTOMER]: {
|
|
68
|
+
customer_id: data.data.customerId,
|
|
69
|
+
},
|
|
70
|
+
[membership_1.MEMBERSHIP_MODULE]: {
|
|
71
|
+
membership_id: data.data.membershipId,
|
|
72
|
+
},
|
|
73
|
+
},
|
|
74
|
+
]);
|
|
54
75
|
});
|
|
55
76
|
exports.createMembershipWorkflow = (0, workflows_sdk_1.createWorkflow)("create-membership", (input) => {
|
|
56
77
|
const { membership } = createMembershipStep(input);
|
|
57
|
-
(0, workflows_sdk_1.when)({ membership }, ({ membership }) => membership !==
|
|
78
|
+
(0, workflows_sdk_1.when)({ membership }, ({ membership }) => membership !== null).then(() => {
|
|
58
79
|
createMemberShipLink({
|
|
59
80
|
membershipId: membership.id,
|
|
60
81
|
customerId: input.customer_id,
|
|
@@ -64,4 +85,4 @@ exports.createMembershipWorkflow = (0, workflows_sdk_1.createWorkflow)("create-m
|
|
|
64
85
|
membership,
|
|
65
86
|
});
|
|
66
87
|
});
|
|
67
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
88
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlLW1lbWJlcnNoaXAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvd29ya2Zsb3dzL21lbWJlcnNoaXAvY3JlYXRlLW1lbWJlcnNoaXAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EscURBQStFO0FBQy9FLHFFQU0yQztBQUMzQyx5REFBNkQ7QUFRN0QsTUFBTSxvQkFBb0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3JDLG1CQUFtQixFQUNuQixLQUFLLEVBQUUsSUFBMkIsRUFBRSxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUU7SUFDbkQsTUFBTSx1QkFBdUIsR0FDM0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyw4QkFBaUIsQ0FBQyxDQUFDO0lBRXZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsMERBQTBELElBQUksQ0FBQyxXQUFXLFNBQVMsSUFBSSxDQUFDLE1BQU0sU0FBUyxDQUFDLENBQUM7SUFFckgsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLE1BQU0sdUJBQXVCLENBQUMsZUFBZSxDQUNoRTtRQUNFLFVBQVUsRUFBRTtZQUNWLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTTtTQUNsQjtLQUNGLEVBQ0Q7UUFDRSxLQUFLLEVBQUU7WUFDTCxVQUFVLEVBQUUsTUFBTTtTQUNuQjtRQUNELElBQUksRUFBRSxDQUFDO0tBQ1IsQ0FDRixDQUFDO0lBRUYsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0Q0FBNEMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxJQUFJLFNBQVMsVUFBVSxDQUFDLEVBQUUsaUJBQWlCLFVBQVUsQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztJQUVuSyxJQUFJLFVBQVUsRUFBRSxDQUFDO1FBQ2YsTUFBTSxVQUFVLEdBQUcsTUFBTSx1QkFBdUIsQ0FBQyxpQkFBaUIsQ0FBQztZQUNqRSxjQUFjLEVBQUUsVUFBVSxDQUFDLEVBQUU7WUFD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
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.voidMembershipPointsWorkflow = void 0;
|
|
4
|
+
const framework_1 = require("@medusajs/framework");
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
7
|
+
const update_membership_1 = require("./update-membership");
|
|
8
|
+
const membership_1 = require("../../modules/membership");
|
|
9
|
+
const voidMembershipPointsStep = (0, workflows_sdk_1.createStep)("void-membership-points", async (data) => {
|
|
10
|
+
const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
11
|
+
console.log(`[Membership] Voiding points for order ${data.order_id}, reason: ${data.reason}`);
|
|
12
|
+
// Check if membership is enabled
|
|
13
|
+
const { data: [store], } = await query.graph({
|
|
14
|
+
entity: "store",
|
|
15
|
+
fields: ["id", "membership_config.*"],
|
|
16
|
+
});
|
|
17
|
+
if (!store.membership_config?.enable_membership) {
|
|
18
|
+
console.log(`[Membership] Membership is disabled, skipping void points`);
|
|
19
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
20
|
+
}
|
|
21
|
+
if (!data.customer_id) {
|
|
22
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Customer id is required");
|
|
23
|
+
}
|
|
24
|
+
if (!data.order_id) {
|
|
25
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "Order id is required");
|
|
26
|
+
}
|
|
27
|
+
// Get customer and membership
|
|
28
|
+
const { data: [customer], } = await query.graph({
|
|
29
|
+
entity: "customer",
|
|
30
|
+
fields: ["*", "membership.*"],
|
|
31
|
+
filters: {
|
|
32
|
+
id: data.customer_id,
|
|
33
|
+
},
|
|
34
|
+
});
|
|
35
|
+
if (!customer) {
|
|
36
|
+
console.error(`[Membership] Customer ${data.customer_id} not found`);
|
|
37
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
38
|
+
}
|
|
39
|
+
if (!customer.membership) {
|
|
40
|
+
console.log(`[Membership] Customer ${data.customer_id} has no membership, nothing to void`);
|
|
41
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
42
|
+
}
|
|
43
|
+
const membershipModuleService = framework_1.container.resolve(membership_1.MEMBERSHIP_MODULE);
|
|
44
|
+
// Find the original transaction that added points for this order
|
|
45
|
+
const { data: transactions } = await query.graph({
|
|
46
|
+
entity: "membership_transaction",
|
|
47
|
+
fields: ["id", "points", "source"],
|
|
48
|
+
filters: {
|
|
49
|
+
customer_id: data.customer_id,
|
|
50
|
+
source: `order: ${data.order_id}`,
|
|
51
|
+
},
|
|
52
|
+
});
|
|
53
|
+
if (!transactions || transactions.length === 0) {
|
|
54
|
+
console.log(`[Membership] No points transaction found for order ${data.order_id}, nothing to void`);
|
|
55
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
56
|
+
}
|
|
57
|
+
// Check if points were already voided for this order
|
|
58
|
+
const voidSource = `void_${data.reason}: ${data.order_id}`;
|
|
59
|
+
const { data: voidTransactions } = await query.graph({
|
|
60
|
+
entity: "membership_transaction",
|
|
61
|
+
fields: ["id"],
|
|
62
|
+
filters: {
|
|
63
|
+
customer_id: data.customer_id,
|
|
64
|
+
source: voidSource,
|
|
65
|
+
},
|
|
66
|
+
});
|
|
67
|
+
if (voidTransactions && voidTransactions.length > 0) {
|
|
68
|
+
console.log(`[Membership] Points already voided for order ${data.order_id}, skipping to avoid duplication`);
|
|
69
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
70
|
+
}
|
|
71
|
+
// Sum all points from this order (in case there are multiple transactions)
|
|
72
|
+
const totalPointsToVoid = transactions.reduce((sum, t) => sum + t.points, 0);
|
|
73
|
+
if (totalPointsToVoid <= 0) {
|
|
74
|
+
console.log(`[Membership] No positive points to void for order ${data.order_id}`);
|
|
75
|
+
return new workflows_sdk_1.StepResponse(null, null);
|
|
76
|
+
}
|
|
77
|
+
console.log(`[Membership] Voiding ${totalPointsToVoid} points from customer ${data.customer_id}`);
|
|
78
|
+
const currentPoints = customer.membership.membership_points || 0;
|
|
79
|
+
const newPoints = Math.max(0, currentPoints - totalPointsToVoid);
|
|
80
|
+
// Update membership points
|
|
81
|
+
await update_membership_1.updateMembershipWorkflow.run({
|
|
82
|
+
input: {
|
|
83
|
+
membership_id: customer.membership.id,
|
|
84
|
+
points: newPoints,
|
|
85
|
+
},
|
|
86
|
+
});
|
|
87
|
+
// Create a negative transaction to record the void
|
|
88
|
+
await membershipModuleService.createMembershipTransactions({
|
|
89
|
+
customer_id: data.customer_id,
|
|
90
|
+
membership_id: customer.membership.id,
|
|
91
|
+
points: -totalPointsToVoid,
|
|
92
|
+
source: voidSource,
|
|
93
|
+
});
|
|
94
|
+
console.log(`[Membership] Successfully voided ${totalPointsToVoid} points for order ${data.order_id}`);
|
|
95
|
+
return new workflows_sdk_1.StepResponse({
|
|
96
|
+
voided_points: totalPointsToVoid,
|
|
97
|
+
new_points: newPoints
|
|
98
|
+
}, {
|
|
99
|
+
customer_id: data.customer_id,
|
|
100
|
+
membership_id: customer.membership.id,
|
|
101
|
+
voided_points: totalPointsToVoid,
|
|
102
|
+
});
|
|
103
|
+
});
|
|
104
|
+
exports.voidMembershipPointsWorkflow = (0, workflows_sdk_1.createWorkflow)("void-membership-points", (input) => {
|
|
105
|
+
const result = voidMembershipPointsStep(input);
|
|
106
|
+
return new workflows_sdk_1.WorkflowResponse({
|
|
107
|
+
result,
|
|
108
|
+
});
|
|
109
|
+
});
|
|
110
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidm9pZC1tZW1iZXJzaGlwLXBvaW50cy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvbWVtYmVyc2hpcC92b2lkLW1lbWJlcnNoaXAtcG9pbnRzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLG1EQUFnRDtBQUNoRCxxREFHbUM7QUFDbkMscUVBSzJDO0FBQzNDLDJEQUErRDtBQUUvRCx5REFBNkQ7QUFRN0QsTUFBTSx3QkFBd0IsR0FBRyxJQUFBLDBCQUFVLEVBQ3pDLHdCQUF3QixFQUN4QixLQUFLLEVBQUUsSUFBK0IsRUFBRSxFQUFFO0lBQ3hDLE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLE9BQU8sQ0FBQyxHQUFHLENBQUMseUNBQXlDLElBQUksQ0FBQyxRQUFRLGFBQWEsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7SUFFOUYsaUNBQWlDO0lBQ2pDLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDZCxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxxQkFBcUIsQ0FBQztLQUN0QyxDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsS0FBSyxDQUFDLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLENBQUM7UUFDaEQsT0FBTyxDQUFDLEdBQUcsQ0FBQywyREFBMkQsQ0FBQyxDQUFDO1FBQ3pFLE9BQU8sSUFBSSw0QkFBWSxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsQ0FBQztJQUN0QyxDQUFDO0lBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztRQUN0QixNQUFNLElBQUksbUJBQVcsQ0FDbkIsbUJBQVcsQ0FBQyxLQUFLLENBQUMsWUFBWSxFQUM5Qix5QkFBeUIs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
|
|
@@ -13,8 +13,14 @@ const invalidateUsedPromotionStep = (0, workflows_sdk_1.createStep)("invalidate-
|
|
|
13
13
|
const customerId = order.customer_id;
|
|
14
14
|
const promotionSet = new Set(order.items
|
|
15
15
|
?.map((item) => item.adjustments?.map((adjustment) => adjustment.promotion_id))
|
|
16
|
-
.flat()
|
|
16
|
+
.flat()
|
|
17
|
+
.filter((id) => id !== null && id !== undefined) // Filter out null/undefined
|
|
18
|
+
);
|
|
17
19
|
const promotionIds = Array.from(promotionSet);
|
|
20
|
+
if (promotionIds.length === 0) {
|
|
21
|
+
console.log(`[Promotion Cache] No promotions to invalidate for order ${order_id}`);
|
|
22
|
+
return;
|
|
23
|
+
}
|
|
18
24
|
const promotionCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
19
25
|
const keys = promotionIds.map((id) => `user:${customerId}:promotion:${id}`);
|
|
20
26
|
await promotionCacheService.invalidateKeys(keys);
|
|
@@ -25,4 +31,4 @@ exports.invalidatedUsePromotionWorkflow = (0, workflows_sdk_1.createWorkflow)("i
|
|
|
25
31
|
invalidateUsePromotion: data,
|
|
26
32
|
});
|
|
27
33
|
});
|
|
28
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW52YWxpZGF0ZVVzZWRQcm9tb3Rpb25Xb3JrZmxvdy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy93b3JrZmxvd3MvdXNhYmxlLXByb21vL2ludmFsaWRhdGVVc2VkUHJvbW90aW9uV29ya2Zsb3cudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsbURBQWdEO0FBQ2hELHFEQUFvRDtBQUNwRCxxRUFJMkM7QUFDM0MsbUVBQXVFO0FBR3ZFLE1BQU0sMkJBQTJCLEdBQUcsSUFBQSwwQkFBVSxFQUM1QywyQkFBMkIsRUFDM0IsS0FBSyxFQUFFLEVBQUUsUUFBUSxFQUF3QixFQUFFLEVBQUU7SUFDM0MsTUFBTSxZQUFZLEdBQUcsTUFBTSxxQkFBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDNUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxZQUFZLENBQUMsYUFBYSxDQUFDLFFBQVEsRUFBRTtRQUN2RCxTQUFTLEVBQUUsQ0FBQyxtQkFBbUIsQ0FBQztLQUNqQyxDQUFDLENBQUM7SUFFSCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDO0lBRXJDLE1BQU0sWUFBWSxHQUFHLElBQUksR0FBRyxDQUMxQixLQUFLLENBQUMsS0FBSztRQUNULEVBQUUsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FDYixJQUFJLENBQUMsV0FBVyxFQUFFLEdBQUcsQ0FBQyxDQUFDLFVBQVUsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFlBQVksQ0FBQyxDQUMvRDtTQUNBLElBQUksRUFBRTtTQUNOLE1BQU0sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFLENBQUMsRUFBRSxLQUFLLElBQUksSUFBSSxFQUFFLEtBQUssU0FBUyxDQUFDLENBQUMsNEJBQTRCO0tBQ2hGLENBQUM7SUFDRixNQUFNLFlBQVksR0FBRyxLQUFLLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxDQUFDO0lBRTlDLElBQUksWUFBWSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUM5QixPQUFPLENBQUMsR0FBRyxDQUFDLDJEQUEyRCxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBQ25GLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxxQkFBcUIsR0FBRyxxQkFBUyxDQUFDLE9BQU8sQ0FDN0Msd0NBQXNCLENBQ3ZCLENBQUM7SUFFRixNQUFNLElBQUksR0FBRyxZQUFZLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLFVBQVUsY0FBYyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQzVFLE1BQU0scUJBQXFCLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25ELENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSwrQkFBK0IsR0FBRyxJQUFBLDhCQUFjLEVBQzNELDBCQUEwQixFQUMxQixDQUFDLEtBQTJCLEVBQUUsRUFBRTtJQUM5QixNQUFNLElBQUksR0FBRywyQkFBMkIsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQztJQUV2RSxPQUFPLElBQUksZ0NBQWdCLENBQUM7UUFDMUIsc0JBQXNCLEVBQUUsSUFBSTtLQUM3QixDQUFDLENBQUM7QUFDTCxDQUFDLENBQ0YsQ0FBQyJ9
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodashventure/medusa-membership",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.3.1",
|
|
4
4
|
"description": "A starter for Medusa plugins.",
|
|
5
5
|
"author": "Medusa (https://medusajs.com)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -29,24 +29,17 @@
|
|
|
29
29
|
"prepublishOnly": "medusa plugin:build"
|
|
30
30
|
},
|
|
31
31
|
"devDependencies": {
|
|
32
|
-
"@medusajs/admin-sdk": "2.
|
|
33
|
-
"@medusajs/cli": "2.
|
|
34
|
-
"@medusajs/framework": "2.
|
|
35
|
-
"@medusajs/icons": "^2.
|
|
36
|
-
"@medusajs/medusa": "2.
|
|
37
|
-
"@medusajs/test-utils": "2.
|
|
32
|
+
"@medusajs/admin-sdk": "2.11.0",
|
|
33
|
+
"@medusajs/cli": "2.11.0",
|
|
34
|
+
"@medusajs/framework": "2.11.0",
|
|
35
|
+
"@medusajs/icons": "^2.11.0",
|
|
36
|
+
"@medusajs/medusa": "2.11.0",
|
|
37
|
+
"@medusajs/test-utils": "2.11.0",
|
|
38
38
|
"@medusajs/ui": "4.0.4",
|
|
39
|
-
"@mikro-orm/cli": "6.4.3",
|
|
40
|
-
"@mikro-orm/core": "6.4.3",
|
|
41
|
-
"@mikro-orm/knex": "6.4.3",
|
|
42
|
-
"@mikro-orm/migrations": "6.4.3",
|
|
43
|
-
"@mikro-orm/postgresql": "6.4.3",
|
|
44
39
|
"@swc/core": "1.5.7",
|
|
45
40
|
"@types/node": "^20.0.0",
|
|
46
41
|
"@types/react": "^18.3.2",
|
|
47
42
|
"@types/react-dom": "^18.2.25",
|
|
48
|
-
"awilix": "^8.0.1",
|
|
49
|
-
"pg": "^8.13.0",
|
|
50
43
|
"prop-types": "^15.8.1",
|
|
51
44
|
"react": "^18.2.0",
|
|
52
45
|
"react-dom": "^18.2.0",
|
|
@@ -56,22 +49,15 @@
|
|
|
56
49
|
"yalc": "^1.0.0-pre.53"
|
|
57
50
|
},
|
|
58
51
|
"peerDependencies": {
|
|
59
|
-
"@medusajs/admin-sdk": "2.
|
|
60
|
-
"@medusajs/cli": "2.
|
|
61
|
-
"@medusajs/framework": "2.
|
|
62
|
-
"@medusajs/icons": "^2.
|
|
52
|
+
"@medusajs/admin-sdk": "2.11.0",
|
|
53
|
+
"@medusajs/cli": "2.11.0",
|
|
54
|
+
"@medusajs/framework": "2.11.0",
|
|
55
|
+
"@medusajs/icons": "^2.11.0",
|
|
63
56
|
"@medusajs/js-sdk": "*",
|
|
64
|
-
"@medusajs/medusa": "2.
|
|
65
|
-
"@medusajs/test-utils": "2.
|
|
57
|
+
"@medusajs/medusa": "2.11.0",
|
|
58
|
+
"@medusajs/test-utils": "2.11.0",
|
|
66
59
|
"@medusajs/ui": "4.0.3",
|
|
67
|
-
"@
|
|
68
|
-
"@mikro-orm/core": "6.4.3",
|
|
69
|
-
"@mikro-orm/knex": "6.4.3",
|
|
70
|
-
"@mikro-orm/migrations": "6.4.3",
|
|
71
|
-
"@mikro-orm/postgresql": "6.4.3",
|
|
72
|
-
"@tanstack/react-query": "*",
|
|
73
|
-
"awilix": "^8.0.1",
|
|
74
|
-
"pg": "^8.13.0"
|
|
60
|
+
"@tanstack/react-query": "*"
|
|
75
61
|
},
|
|
76
62
|
"engines": {
|
|
77
63
|
"node": ">=20"
|