@lodashventure/medusa-membership 0.1.0 → 0.1.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.
@@ -0,0 +1,69 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = void 0;
4
+ const utils_1 = require("@medusajs/framework/utils");
5
+ const membership_1 = require("../../../../../modules/membership");
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
+ try {
15
+ // Find the link between customer and membership
16
+ const customerMembershipLink = await link.list({
17
+ [utils_1.Modules.CUSTOMER]: {
18
+ customer_id: customerId,
19
+ },
20
+ }, {
21
+ select: [`${membership_1.MEMBERSHIP_MODULE}.*`],
22
+ });
23
+ if (!customerMembershipLink || customerMembershipLink.length === 0) {
24
+ return res.status(404).json({
25
+ message: "No membership found for this customer",
26
+ });
27
+ }
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
+ return res.json({
52
+ membership: {
53
+ id: membership.id,
54
+ membership_points: membership.membership_points,
55
+ member_tier_id: membership.member_tier_id,
56
+ },
57
+ member_tier: memberTier,
58
+ });
59
+ }
60
+ catch (error) {
61
+ console.error("Error fetching member tier:", error);
62
+ return res.status(500).json({
63
+ message: "Failed to fetch member tier",
64
+ error: error.message,
65
+ });
66
+ }
67
+ };
68
+ exports.GET = GET;
69
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9tZW1iZXItdGllci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSxxREFBK0U7QUFDL0Usa0VBQXNFO0FBRy9ELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBRTdDLHlEQUF5RDtJQUN6RCxNQUFNLElBQUksR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUUvRCxvQ0FBb0M7SUFDcEMsTUFBTSx1QkFBdUIsR0FBNEIsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQ3hFLDhCQUFpQixDQUNsQixDQUFDO0lBRUYseUNBQXlDO0lBQ3pDLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpFLElBQUksQ0FBQztRQUNILGdEQUFnRDtRQUNoRCxNQUFNLHNCQUFzQixHQUFHLE1BQU0sSUFBSSxDQUFDLElBQUksQ0FDNUM7WUFDRSxDQUFDLGVBQU8sQ0FBQyxRQUFRLENBQUMsRUFBRTtnQkFDbEIsV0FBVyxFQUFFLFVBQVU7YUFDeEI7U0FDRixFQUNEO1lBQ0UsTUFBTSxFQUFFLENBQUMsR0FBRyw4QkFBaUIsSUFBSSxDQUFDO1NBQ25DLENBQ0YsQ0FBQztRQUVGLElBQUksQ0FBQyxzQkFBc0IsSUFBSSxzQkFBc0IsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDbkUsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztnQkFDMUIsT0FBTyxFQUFFLHVDQUF1QzthQUNqRCxDQUFDLENBQUM7UUFDTCxDQUFDO1FBRUQsTUFBTSxZQUFZLEdBQUcsc0JBQXNCLENBQUMsQ0FBQyxDQUFDLENBQUMsOEJBQWlCLENBQUMsQ0FBQyxhQUFhLENBQUM7UUFFaEYsK0NBQStDO1FBQy9DLE1BQU0sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzlDLE1BQU0sRUFBRSxZQUFZO1lBQ3BCLE1BQU0sRUFBRSxDQUFDLEdBQUcsRUFBRSxlQUFlLENBQUM7WUFDOUIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxZQUFZO2FBQ2pCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzdDLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7Z0JBQzFCLE9BQU8sRUFBRSxzQkFBc0I7YUFDaEMsQ0FBQyxDQUFDO1FBQ0wsQ0FBQztRQUVELE1BQU0sVUFBVSxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUVsQyx1REFBdUQ7UUFDdkQsSUFBSSxVQUFVLEdBQUcsVUFBVSxDQUFDLFdBQVcsQ0FBQztRQUV4QyxJQUFJLENBQUMsVUFBVSxJQUFJLFVBQVUsQ0FBQyxjQUFjLEVBQUUsQ0FBQztZQUM3QyxNQUFNLEtBQUssR0FBRyxNQUFNLHVCQUF1QixDQUFDLGVBQWUsQ0FBQztnQkFDMUQsRUFBRSxFQUFFLFVBQVUsQ0FBQyxjQUFjO2FBQzlCLENBQUMsQ0FBQztZQUVILFVBQVUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDO1FBQ2hDLENBQUM7UUFFRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFDZCxVQUFVLEVBQUU7Z0JBQ1YsRUFBRSxFQUFFLFVBQVUsQ0FBQyxFQUFFO2dCQUNqQixpQkFBaUIsRUFBRSxVQUFVLENBQUMsaUJBQWlCO2dCQUMvQyxjQUFjLEVBQUUsVUFBVSxDQUFDLGNBQWM7YUFDMUM7WUFDRCxXQUFXLEVBQUUsVUFBVTtTQUN4QixDQUFDLENBQUM7SUFDTCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDcEQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsNkJBQTZCO1lBQ3RDLEtBQUssRUFBRSxLQUFLLENBQUMsT0FBTztTQUNyQixDQUFDLENBQUM7SUFDTCxDQUFDO0FBQ0gsQ0FBQyxDQUFDO0FBakZXLFFBQUEsR0FBRyxPQWlGZCJ9
@@ -3,15 +3,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.DELETE = void 0;
4
4
  const delete_wishlist_items_1 = require("../../../../../../workflows/wishlist/delete-wishlist-items");
5
5
  const DELETE = async (req, res) => {
6
- const wishlistId = req.auth_context.actor_id;
6
+ const customer_id = req.auth_context.actor_id;
7
7
  const variantId = req.params.variant_id;
8
8
  const wishlistItemRes = await delete_wishlist_items_1.deleteWishlistItemWorkflow.run({
9
9
  input: {
10
- customer_id: wishlistId,
10
+ customer_id: customer_id,
11
11
  product_variant_id: variantId,
12
12
  },
13
13
  });
14
14
  res.json(wishlistItemRes.result.deleted);
15
15
  };
16
16
  exports.DELETE = DELETE;
17
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS93aXNobGlzdC9bdmFyaWFudF9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsc0dBQXdHO0FBRWpHLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDekIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQzdDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBRXhDLE1BQU0sZUFBZSxHQUFHLE1BQU0sa0RBQTBCLENBQUMsR0FBRyxDQUFDO1FBQzNELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxVQUFVO1lBQ3ZCLGtCQUFrQixFQUFFLFNBQVM7U0FDOUI7S0FDRixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBZlcsUUFBQSxNQUFNLFVBZWpCIn0=
17
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS93aXNobGlzdC9bdmFyaWFudF9pZF0vcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsc0dBQXdHO0FBRWpHLE1BQU0sTUFBTSxHQUFHLEtBQUssRUFDekIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLE1BQU0sV0FBVyxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBQzlDLE1BQU0sU0FBUyxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDO0lBRXhDLE1BQU0sZUFBZSxHQUFHLE1BQU0sa0RBQTBCLENBQUMsR0FBRyxDQUFDO1FBQzNELEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxXQUFXO1lBQ3hCLGtCQUFrQixFQUFFLFNBQVM7U0FDOUI7S0FDRixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDM0MsQ0FBQyxDQUFDO0FBZlcsUUFBQSxNQUFNLFVBZWpCIn0=
@@ -8,15 +8,15 @@ const create_wishlist_items_1 = require("../../../../../workflows/wishlist/creat
8
8
  const utils_1 = require("@medusajs/framework/utils");
9
9
  const GET = async (req, res) => {
10
10
  /** using customer_id for wishlist_id */
11
- const wishlistId = req.auth_context.actor_id;
11
+ const customerId = req.auth_context.actor_id;
12
12
  const wishlistModuleService = framework_1.container.resolve(wishlist_1.WISHLIST_MODULE);
13
13
  const [wishlist] = await wishlistModuleService.listWishlists({
14
- customer_id: wishlistId,
14
+ customer_id: customerId,
15
15
  });
16
16
  if (!wishlist) {
17
17
  await create_wishlist_1.createWishlistWorkflow.run({
18
18
  input: {
19
- customer_id: wishlistId,
19
+ customer_id: customerId,
20
20
  },
21
21
  });
22
22
  return res.json([]);
@@ -24,9 +24,19 @@ const GET = async (req, res) => {
24
24
  const query = framework_1.container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
25
25
  const wishlistItems = await query.graph({
26
26
  entity: "wishlist_item",
27
- fields: ["*", "product_variant.product.id"],
27
+ fields: [
28
+ "*",
29
+ "product_variant.*",
30
+ "product_variant.product.*",
31
+ "product_variant.product.categories.*",
32
+ "product_variant.product.collection.*",
33
+ "product_variant.product.tags.*",
34
+ "product_variant.product.images.*",
35
+ "product_variant.product.variants.*",
36
+ "product_variant.prices.*",
37
+ ],
28
38
  filters: {
29
- wishlist_id: wishlistId,
39
+ customer_id: customerId,
30
40
  },
31
41
  pagination: {
32
42
  order: {
@@ -34,28 +44,18 @@ const GET = async (req, res) => {
34
44
  },
35
45
  },
36
46
  });
37
- // const wishlistItems = await wishlistModuleService.listWishlistItems(
38
- // {
39
- // wishlist_id: wishlistId,
40
- // },
41
- // {
42
- // order: {
43
- // created_at: "DESC",
44
- // },
45
- // }
46
- // );
47
47
  res.json(wishlistItems);
48
48
  };
49
49
  exports.GET = GET;
50
50
  const POST = async (req, res) => {
51
- const wishlistId = req.auth_context.actor_id;
51
+ const customerId = req.auth_context.actor_id;
52
52
  const wishlistItemRes = await create_wishlist_items_1.createWishlistItemWorkflow.run({
53
53
  input: {
54
- customer_id: wishlistId,
54
+ customer_id: customerId,
55
55
  variant_id: req.body.product_variant_id,
56
56
  },
57
57
  });
58
58
  res.json(wishlistItemRes.result.wishlistItem);
59
59
  };
60
60
  exports.POST = POST;
61
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS93aXNobGlzdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFJNkI7QUFFN0IsOERBQWtFO0FBQ2xFLHVGQUEyRjtBQUMzRixtR0FBcUc7QUFDckcscURBQXNFO0FBRS9ELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLHdDQUF3QztJQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUU3QyxNQUFNLHFCQUFxQixHQUN6QixxQkFBUyxDQUFDLE9BQU8sQ0FBd0IsMEJBQWUsQ0FBQyxDQUFDO0lBRTVELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztRQUMzRCxXQUFXLEVBQUUsVUFBVTtLQUN4QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLHdDQUFzQixDQUFDLEdBQUcsQ0FBQztZQUMvQixLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLFVBQVU7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QyxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUUsQ0FBQyxHQUFHLEVBQUUsNEJBQTRCLENBQUM7UUFDM0MsT0FBTyxFQUFFO1lBQ1AsV0FBVyxFQUFFLFVBQVU7U0FDeEI7UUFDRCxVQUFVLEVBQUU7WUFDVixLQUFLLEVBQUU7Z0JBQ0wsVUFBVSxFQUFFLE1BQU07YUFDbkI7U0FDRjtLQUNGLENBQUMsQ0FBQztJQUVILHVFQUF1RTtJQUN2RSxNQUFNO0lBQ04sK0JBQStCO0lBQy9CLE9BQU87SUFDUCxNQUFNO0lBQ04sZUFBZTtJQUNmLDRCQUE0QjtJQUM1QixTQUFTO0lBQ1QsTUFBTTtJQUNOLEtBQUs7SUFDTCxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQWhEVyxRQUFBLEdBQUcsT0FnRGQ7QUFFSyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStELEVBQy9ELEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUU3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGtEQUEwQixDQUFDLEdBQUcsQ0FBQztRQUMzRCxLQUFLLEVBQUU7WUFDTCxXQUFXLEVBQUUsVUFBVTtZQUN2QixVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0I7U0FDeEM7S0FDRixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBZFcsUUFBQSxJQUFJLFFBY2YifQ==
61
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS93aXNobGlzdC9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFJNkI7QUFFN0IsOERBQWtFO0FBQ2xFLHVGQUEyRjtBQUMzRixtR0FBcUc7QUFDckcscURBQXNFO0FBRS9ELE1BQU0sR0FBRyxHQUFHLEtBQUssRUFDdEIsR0FBK0IsRUFDL0IsR0FBbUIsRUFDbkIsRUFBRTtJQUNGLHdDQUF3QztJQUN4QyxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUU3QyxNQUFNLHFCQUFxQixHQUN6QixxQkFBUyxDQUFDLE9BQU8sQ0FBd0IsMEJBQWUsQ0FBQyxDQUFDO0lBRTVELE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxNQUFNLHFCQUFxQixDQUFDLGFBQWEsQ0FBQztRQUMzRCxXQUFXLEVBQUUsVUFBVTtLQUN4QixDQUFDLENBQUM7SUFFSCxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDZCxNQUFNLHdDQUFzQixDQUFDLEdBQUcsQ0FBQztZQUMvQixLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLFVBQVU7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFDSCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7SUFDdEIsQ0FBQztJQUVELE1BQU0sS0FBSyxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sYUFBYSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUN0QyxNQUFNLEVBQUUsZUFBZTtRQUN2QixNQUFNLEVBQUU7WUFDTixHQUFHO1lBQ0gsbUJBQW1CO1lBQ25CLDJCQUEyQjtZQUMzQixzQ0FBc0M7WUFDdEMsc0NBQXNDO1lBQ3RDLGdDQUFnQztZQUNoQyxrQ0FBa0M7WUFDbEMsb0NBQW9DO1lBQ3BDLDBCQUEwQjtTQUMzQjtRQUNELE9BQU8sRUFBRTtZQUNQLFdBQVcsRUFBRSxVQUFVO1NBQ3hCO1FBQ0QsVUFBVSxFQUFFO1lBQ1YsS0FBSyxFQUFFO2dCQUNMLFVBQVUsRUFBRSxNQUFNO2FBQ25CO1NBQ0Y7S0FDRixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQztBQWhEVyxRQUFBLEdBQUcsT0FnRGQ7QUFFSyxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStELEVBQy9ELEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUU3QyxNQUFNLGVBQWUsR0FBRyxNQUFNLGtEQUEwQixDQUFDLEdBQUcsQ0FBQztRQUMzRCxLQUFLLEVBQUU7WUFDTCxXQUFXLEVBQUUsVUFBVTtZQUN2QixVQUFVLEVBQUUsR0FBRyxDQUFDLElBQUksQ0FBQyxrQkFBa0I7U0FDeEM7S0FDRixDQUFDLENBQUM7SUFFSCxHQUFHLENBQUMsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLENBQUMsWUFBWSxDQUFDLENBQUM7QUFDaEQsQ0FBQyxDQUFDO0FBZFcsUUFBQSxJQUFJLFFBY2YifQ==
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.GET = exports.POST = void 0;
4
+ const framework_1 = require("@medusajs/framework");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const promotion_cache_1 = require("../../../modules/promotion-cache");
7
+ const usable_promo_1 = require("../../../modules/usable-promo");
8
+ /**
9
+ * POST handler for collecting/claiming a promotion code
10
+ * Customers can collect promotions that are enabled for collection
11
+ */
12
+ const POST = async (req, res) => {
13
+ const { promotion_id } = req.body;
14
+ if (!promotion_id) {
15
+ return res.status(400).json({
16
+ message: "promotion_id is required",
17
+ });
18
+ }
19
+ const customerId = req.auth_context.actor_id;
20
+ if (!customerId) {
21
+ return res.status(401).json({
22
+ message: "Customer must be authenticated",
23
+ });
24
+ }
25
+ try {
26
+ // Check if promotion exists and is enabled for collection
27
+ const usablePromoService = framework_1.container.resolve(usable_promo_1.USABLE_PROMO_MODULE);
28
+ const [usablePromotion] = await usablePromoService.listUsablePromotions({
29
+ promotion_id: promotion_id,
30
+ });
31
+ if (!usablePromotion) {
32
+ return res.status(404).json({
33
+ message: "Promotion not found or not available for collection",
34
+ });
35
+ }
36
+ if (!usablePromotion.enabled) {
37
+ return res.status(400).json({
38
+ message: "This promotion is not enabled for collection",
39
+ });
40
+ }
41
+ // Verify promotion exists in the system
42
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
43
+ const promotion = await promotionService.retrievePromotion(promotion_id, {
44
+ relations: ["campaign"],
45
+ });
46
+ if (!promotion) {
47
+ return res.status(404).json({
48
+ message: "Promotion not found",
49
+ });
50
+ }
51
+ // Check if customer already has this promotion
52
+ const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
53
+ const cacheKey = `user:${customerId}:promotion:${promotion_id}`;
54
+ const alreadyCollected = await promoCacheService.exists(cacheKey);
55
+ if (alreadyCollected) {
56
+ return res.status(400).json({
57
+ message: "You have already collected this promotion",
58
+ promotion,
59
+ });
60
+ }
61
+ // Add promotion to customer's cache
62
+ await promoCacheService.set(cacheKey, promotion_id);
63
+ res.status(201).json({
64
+ message: "Promotion collected successfully",
65
+ promotion,
66
+ });
67
+ }
68
+ catch (error) {
69
+ console.error("Error collecting promotion:", error);
70
+ res.status(500).json({
71
+ message: "Failed to collect promotion",
72
+ error: error instanceof Error ? error.message : String(error),
73
+ });
74
+ }
75
+ };
76
+ exports.POST = POST;
77
+ /**
78
+ * GET handler for listing all available promotions for collection
79
+ * Returns promotions that are enabled for collection but not yet collected by the customer
80
+ */
81
+ const GET = async (req, res) => {
82
+ const customerId = req.auth_context.actor_id;
83
+ if (!customerId) {
84
+ return res.status(401).json({
85
+ message: "Customer must be authenticated",
86
+ });
87
+ }
88
+ try {
89
+ // Get all collectable promotions
90
+ const usablePromoService = framework_1.container.resolve(usable_promo_1.USABLE_PROMO_MODULE);
91
+ const usablePromotions = await usablePromoService.listUsablePromotions({
92
+ enabled: true,
93
+ });
94
+ if (usablePromotions.length === 0) {
95
+ return res.status(200).json({
96
+ promotions: [],
97
+ count: 0,
98
+ });
99
+ }
100
+ const promotionIds = usablePromotions.map((up) => up.promotion_id);
101
+ // Get full promotion details
102
+ const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
103
+ const promotions = await promotionService.listPromotions({
104
+ id: promotionIds,
105
+ }, {
106
+ relations: ["campaign"],
107
+ });
108
+ // Check which ones the customer has already collected
109
+ const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
110
+ const promotionsWithStatus = await Promise.all(promotions.map(async (promotion) => {
111
+ const cacheKey = `user:${customerId}:promotion:${promotion.id}`;
112
+ const isCollected = await promoCacheService.exists(cacheKey);
113
+ return {
114
+ ...promotion,
115
+ is_collected: isCollected,
116
+ };
117
+ }));
118
+ // Filter to only show uncollected promotions (optional - depends on UX requirements)
119
+ // You can remove this filter if you want to show all promotions with collected status
120
+ const availablePromotions = promotionsWithStatus.filter((p) => !p.is_collected);
121
+ res.status(200).json({
122
+ promotions: availablePromotions,
123
+ count: availablePromotions.length,
124
+ total: promotionsWithStatus.length,
125
+ });
126
+ }
127
+ catch (error) {
128
+ console.error("Error fetching available promotions:", error);
129
+ res.status(500).json({
130
+ message: "Failed to fetch available promotions",
131
+ error: error instanceof Error ? error.message : String(error),
132
+ });
133
+ }
134
+ };
135
+ exports.GET = GET;
136
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFLNkI7QUFDN0IscURBQW9EO0FBQ3BELHNFQUEwRTtBQUUxRSxnRUFBb0U7QUFHcEU7OztHQUdHO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFnQyxDQUFDO0lBRTlELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSwwQkFBMEI7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBRTdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxnQ0FBZ0M7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILDBEQUEwRDtRQUMxRCxNQUFNLGtCQUFrQixHQUN0QixxQkFBUyxDQUFDLE9BQU8sQ0FBMkIsa0NBQW1CLENBQUMsQ0FBQztRQUVuRSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztZQUN0RSxZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lodashventure/medusa-membership",
3
- "version": "0.1.0",
3
+ "version": "0.1.1",
4
4
  "description": "A starter for Medusa plugins.",
5
5
  "author": "Medusa (https://medusajs.com)",
6
6
  "license": "MIT",
@@ -25,8 +25,7 @@
25
25
  ],
26
26
  "scripts": {
27
27
  "build": "medusa plugin:build",
28
- "dev": "medusa plugin:develop",
29
- "prepublishOnly": "medusa plugin:build"
28
+ "dev": "medusa plugin:develop"
30
29
  },
31
30
  "devDependencies": {
32
31
  "@medusajs/admin-sdk": "2.10.0",
@@ -83,4 +82,4 @@
83
82
  "thai-address-autocomplete-react": "^1.2.2",
84
83
  "zod": "^4.1.12"
85
84
  }
86
- }
85
+ }