@lodashventure/medusa-membership 0.1.1 → 0.1.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.
|
@@ -1,60 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.GET = void 0;
|
|
4
|
-
const
|
|
5
|
-
const
|
|
4
|
+
const retrieve_customer_membership_tier_1 = require("../../../../../workflows/membership/retrieve-customer-membership-tier");
|
|
5
|
+
const create_membership_1 = require("../../../../../workflows/membership/create-membership");
|
|
6
6
|
const GET = async (req, res) => {
|
|
7
|
-
const customerId = req.auth_context.actor_id;
|
|
8
|
-
// Get the link service to find the customer's membership
|
|
9
|
-
const link = req.scope.resolve(utils_1.ContainerRegistrationKeys.LINK);
|
|
10
|
-
// Get the membership module service
|
|
11
|
-
const membershipModuleService = req.scope.resolve(membership_1.MEMBERSHIP_MODULE);
|
|
12
|
-
// Query service for more complex queries
|
|
13
|
-
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
14
7
|
try {
|
|
15
|
-
|
|
16
|
-
const
|
|
17
|
-
|
|
8
|
+
const customerId = req.auth_context.actor_id;
|
|
9
|
+
const createIfNotExists = req.query.create === "true"; // Optional query param to create membership
|
|
10
|
+
// Use the workflow to retrieve the customer's membership and tier
|
|
11
|
+
// Pass req.scope for proper context resolution
|
|
12
|
+
const { result } = await (0, retrieve_customer_membership_tier_1.retrieveCustomerMembershipTierWorkflow)(req.scope).run({
|
|
13
|
+
input: {
|
|
18
14
|
customer_id: customerId,
|
|
19
15
|
},
|
|
20
|
-
}, {
|
|
21
|
-
select: [`${membership_1.MEMBERSHIP_MODULE}.*`],
|
|
22
16
|
});
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
17
|
+
const typedResult = result;
|
|
18
|
+
if (!typedResult.membership) {
|
|
19
|
+
// If create flag is set, create a new membership with 0 points
|
|
20
|
+
if (createIfNotExists) {
|
|
21
|
+
await (0, create_membership_1.createMembershipWorkflow)(req.scope).run({
|
|
22
|
+
input: {
|
|
23
|
+
customer_id: customerId,
|
|
24
|
+
points: 0,
|
|
25
|
+
},
|
|
26
|
+
});
|
|
27
|
+
// Retrieve the newly created membership with tier
|
|
28
|
+
const { result: newResult } = await (0, retrieve_customer_membership_tier_1.retrieveCustomerMembershipTierWorkflow)(req.scope).run({
|
|
29
|
+
input: {
|
|
30
|
+
customer_id: customerId,
|
|
31
|
+
},
|
|
32
|
+
});
|
|
33
|
+
const typedNewResult = newResult;
|
|
34
|
+
return res.json({
|
|
35
|
+
membership: typedNewResult.membership,
|
|
36
|
+
member_tier: typedNewResult.member_tier,
|
|
37
|
+
created: true, // Indicate that a new membership was created
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// Return a more informative response for customers without memberships
|
|
41
|
+
return res.json({
|
|
42
|
+
membership: null,
|
|
43
|
+
member_tier: null,
|
|
44
|
+
message: "No membership exists for this customer yet. Memberships are created after your first purchase.",
|
|
26
45
|
});
|
|
27
46
|
}
|
|
28
|
-
const membershipId = customerMembershipLink[0][membership_1.MEMBERSHIP_MODULE].membership_id;
|
|
29
|
-
// Get the membership with its tier information
|
|
30
|
-
const { data: memberships } = await query.graph({
|
|
31
|
-
entity: "membership",
|
|
32
|
-
fields: ["*", "member_tier.*"],
|
|
33
|
-
filters: {
|
|
34
|
-
id: membershipId,
|
|
35
|
-
},
|
|
36
|
-
});
|
|
37
|
-
if (!memberships || memberships.length === 0) {
|
|
38
|
-
return res.status(404).json({
|
|
39
|
-
message: "Membership not found",
|
|
40
|
-
});
|
|
41
|
-
}
|
|
42
|
-
const membership = memberships[0];
|
|
43
|
-
// If member_tier is not populated, fetch it separately
|
|
44
|
-
let memberTier = membership.member_tier;
|
|
45
|
-
if (!memberTier && membership.member_tier_id) {
|
|
46
|
-
const tiers = await membershipModuleService.listMemberTiers({
|
|
47
|
-
id: membership.member_tier_id,
|
|
48
|
-
});
|
|
49
|
-
memberTier = tiers[0] || null;
|
|
50
|
-
}
|
|
51
47
|
return res.json({
|
|
52
|
-
membership:
|
|
53
|
-
|
|
54
|
-
membership_points: membership.membership_points,
|
|
55
|
-
member_tier_id: membership.member_tier_id,
|
|
56
|
-
},
|
|
57
|
-
member_tier: memberTier,
|
|
48
|
+
membership: typedResult.membership,
|
|
49
|
+
member_tier: typedResult.member_tier,
|
|
58
50
|
});
|
|
59
51
|
}
|
|
60
52
|
catch (error) {
|
|
@@ -66,4 +58,4 @@ const GET = async (req, res) => {
|
|
|
66
58
|
}
|
|
67
59
|
};
|
|
68
60
|
exports.GET = GET;
|
|
69
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
61
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9tZW1iZXItdGllci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSw2SEFBK0g7QUFDL0gsNkZBQWlHO0FBd0IxRixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLDRDQUE0QztRQUVuRyxrRUFBa0U7UUFDbEUsK0NBQStDO1FBQy9DLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsMEVBQXNDLEVBQzdELEdBQUcsQ0FBQyxLQUFLLENBQ1YsQ0FBQyxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLFVBQVU7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBRyxNQUE4QyxDQUFDO1FBRW5FLElBQUksQ0FBQyxXQUFXLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDNUIsK0RBQStEO1lBQy9ELElBQUksaUJBQWlCLEVBQUUsQ0FBQztnQkFDdEIsTUFBTSxJQUFBLDRDQUF3QixFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQzVDLEtBQUssRUFBRTt3QkFDTCxXQUFXLEVBQUUsVUFBVTt3QkFDdkIsTUFBTSxFQUFFLENBQUM7cUJBQ1Y7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVILGtEQUFrRDtnQkFDbEQsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsR0FDekIsTUFBTSxJQUFBLDBFQUFzQyxFQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLENBQUM7b0JBQzFELEtBQUssRUFBRTt3QkFDTCxXQUFXLEVBQUUsVUFBVTtxQkFDeEI7aUJBQ0YsQ0FBQyxDQUFDO2dCQUVMLE1BQU0sY0FBYyxHQUNsQixTQUFpRCxDQUFDO2dCQUVwRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7b0JBQ2QsVUFBVSxFQUFFLGNBQWMsQ0FBQyxVQUFVO29CQUNyQyxXQUFXLEVBQUUsY0FBYyxDQUFDLFdBQVc7b0JBQ3ZDLE9BQU8sRUFBRSxJQUFJLEVBQUUsNkNBQTZDO2lCQUM3RCxDQUFDLENBQUM7WUFDTCxDQUFDO1lBRUQsdUVBQXVFO1lBQ3ZFLE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztnQkFDZCxVQUFVLEVBQUUsSUFBSTtnQkFDaEIsV0FBVyxFQUFFLElBQUk7Z0JBQ2pCLE9BQU8sRUFDTCxnR0FBZ0c7YUFDbkcsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE9BQU8sR0FBRyxDQUFDLElBQUksQ0FBQztZQUNkLFVBQVUsRUFBRSxXQUFXLENBQUMsVUFBVTtZQUNsQyxXQUFXLEVBQUUsV0FBVyxDQUFDLFdBQVc7U0FDckMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDZCQUE2QixFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3BELE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxFQUFFLDZCQUE2QjtZQUN0QyxLQUFLLEVBQUcsS0FBZSxDQUFDLE9BQU87U0FDaEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FBQztBQXBFVyxRQUFBLEdBQUcsT0FvRWQifQ==
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.retrieveCustomerMembershipTierWorkflow = void 0;
|
|
4
|
+
const workflows_sdk_1 = require("@medusajs/framework/workflows-sdk");
|
|
5
|
+
const membership_1 = require("../../modules/membership");
|
|
6
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const retrieveCustomerMembershipTierStep = (0, workflows_sdk_1.createStep)("retrieve-customer-membership-tier", async (data, { container }) => {
|
|
8
|
+
const membershipModuleService = container.resolve(membership_1.MEMBERSHIP_MODULE);
|
|
9
|
+
const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
10
|
+
try {
|
|
11
|
+
// Query customer with membership relationship
|
|
12
|
+
const { data: [customer], } = await query.graph({
|
|
13
|
+
entity: "customer",
|
|
14
|
+
fields: ["*", "membership.*"],
|
|
15
|
+
filters: {
|
|
16
|
+
id: data.customer_id,
|
|
17
|
+
},
|
|
18
|
+
});
|
|
19
|
+
if (!customer || !customer.membership) {
|
|
20
|
+
return new workflows_sdk_1.StepResponse({
|
|
21
|
+
membership: null,
|
|
22
|
+
member_tier: null,
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
const membership = customer.membership;
|
|
26
|
+
// Get the member tier if it exists
|
|
27
|
+
let memberTier = null;
|
|
28
|
+
if (membership.member_tier_id) {
|
|
29
|
+
const [tier] = await membershipModuleService.listMemberTiers({
|
|
30
|
+
id: membership.member_tier_id,
|
|
31
|
+
});
|
|
32
|
+
memberTier = tier ? tier : null;
|
|
33
|
+
}
|
|
34
|
+
return new workflows_sdk_1.StepResponse({
|
|
35
|
+
membership: {
|
|
36
|
+
id: membership.id,
|
|
37
|
+
membership_points: membership.membership_points,
|
|
38
|
+
member_tier_id: membership.member_tier_id,
|
|
39
|
+
},
|
|
40
|
+
member_tier: memberTier,
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
catch (error) {
|
|
44
|
+
console.error("Error in retrieveCustomerMembershipTierStep:", error);
|
|
45
|
+
return new workflows_sdk_1.StepResponse({
|
|
46
|
+
membership: null,
|
|
47
|
+
member_tier: null,
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
});
|
|
51
|
+
exports.retrieveCustomerMembershipTierWorkflow = (0, workflows_sdk_1.createWorkflow)("retrieve-customer-membership-tier", (input) => {
|
|
52
|
+
const result = retrieveCustomerMembershipTierStep(input);
|
|
53
|
+
return new workflows_sdk_1.WorkflowResponse(result);
|
|
54
|
+
});
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmV0cmlldmUtY3VzdG9tZXItbWVtYmVyc2hpcC10aWVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL3dvcmtmbG93cy9tZW1iZXJzaGlwL3JldHJpZXZlLWN1c3RvbWVyLW1lbWJlcnNoaXAtdGllci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxxRUFLMkM7QUFDM0MseURBQTZEO0FBRTdELHFEQUFzRTtBQTRCdEUsTUFBTSxrQ0FBa0MsR0FBRyxJQUFBLDBCQUFVLEVBQ25ELG1DQUFtQyxFQUNuQyxLQUFLLEVBQ0gsSUFBeUMsRUFDekMsRUFBRSxTQUFTLEVBQUUsRUFDZ0QsRUFBRTtJQUMvRCxNQUFNLHVCQUF1QixHQUMzQixTQUFTLENBQUMsT0FBTyxDQUFDLDhCQUFpQixDQUFDLENBQUM7SUFDdkMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUVqRSxJQUFJLENBQUM7UUFDSCw4Q0FBOEM7UUFDOUMsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLFFBQVEsQ0FBQyxHQUNqQixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsVUFBVTtZQUNsQixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsY0FBYyxDQUFDO1lBQzdCLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsSUFBSSxDQUFDLFdBQVc7YUFDckI7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsUUFBUSxJQUFJLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO1lBQ3RDLE9BQU8sSUFBSSw0QkFBWSxDQUFDO2dCQUN0QixVQUFVLEVBQUUsSUFBSTtnQkFDaEIsV0FBVyxFQUFFLElBQUk7YUFDbEIsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFFBQVEsQ0FBQyxVQUFVLENBQUM7UUFFdkMsbUNBQW1DO1FBQ25DLElBQUksVUFBVSxHQUEwQixJQUFJLENBQUM7UUFDN0MsSUFBSSxVQUFVLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDOUIsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLE1BQU0sdUJBQXVCLENBQUMsZUFBZSxDQUFDO2dCQUMzRCxFQUFFLEVBQUUsVUFBVSxDQUFDLGNBQWM7YUFDOUIsQ0FBQyxDQUFDO1lBQ0gsVUFBVSxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUUsSUFBdUIsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3RELENBQUM7UUFFRCxPQUFPLElBQUksNEJBQVksQ0FBQztZQUN0QixVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUNqQixpQkFBaUIsRUFBRSxVQUFVLENBQUMsaUJBQWlCO2dCQUMvQyxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWM7YUFDMUM7WUFDRCxXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsOENBQThDLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckUsT0FBTyxJQUFJLDRCQUFZLENBQUM7WUFDdEIsVUFBVSxFQUFFLElBQUk7WUFDaEIsV0FBVyxFQUFFLElBQUk7U0FDbEIsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztBQUNILENBQUMsQ0FDRixDQUFDO0FBRVcsUUFBQSxzQ0FBc0MsR0FBRyxJQUFBLDhCQUFjLEVBQ2xFLG1DQUFtQyxFQUNuQyxDQUFDLEtBQTBDLEVBQUUsRUFBRTtJQUM3QyxNQUFNLE1BQU0sR0FBRyxrQ0FBa0MsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUN6RCxPQUFPLElBQUksZ0NBQWdCLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEMsQ0FBQyxDQUNGLENBQUMifQ==
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@lodashventure/medusa-membership",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "A starter for Medusa plugins.",
|
|
5
5
|
"author": "Medusa (https://medusajs.com)",
|
|
6
6
|
"license": "MIT",
|
|
@@ -25,7 +25,8 @@
|
|
|
25
25
|
],
|
|
26
26
|
"scripts": {
|
|
27
27
|
"build": "medusa plugin:build",
|
|
28
|
-
"dev": "medusa plugin:develop"
|
|
28
|
+
"dev": "medusa plugin:develop",
|
|
29
|
+
"prepublishOnly": "medusa plugin:build"
|
|
29
30
|
},
|
|
30
31
|
"devDependencies": {
|
|
31
32
|
"@medusajs/admin-sdk": "2.10.0",
|
|
@@ -82,4 +83,4 @@
|
|
|
82
83
|
"thai-address-autocomplete-react": "^1.2.2",
|
|
83
84
|
"zod": "^4.1.12"
|
|
84
85
|
}
|
|
85
|
-
}
|
|
86
|
+
}
|