@lodashventure/medusa-membership 0.1.3 → 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.
Files changed (32) hide show
  1. package/.medusa/server/src/api/middlewares.js +15 -1
  2. package/.medusa/server/src/api/store/customers/me/member-tier/route.js +74 -4
  3. package/.medusa/server/src/api/store/customers/me/wishlist/route.js +1 -1
  4. package/.medusa/server/src/api/store/promotion-codes/[id]/collect/route.js +3 -3
  5. package/.medusa/server/src/api/store/promotion-codes/[id]/route.js +3 -3
  6. package/.medusa/server/src/api/store/promotion-codes/route.js +3 -3
  7. package/.medusa/server/src/modules/membership/migrations/Migration20250416034358.js +2 -2
  8. package/.medusa/server/src/modules/membership/migrations/Migration20250416231624.js +2 -2
  9. package/.medusa/server/src/modules/membership/migrations/Migration20250418020235.js +2 -2
  10. package/.medusa/server/src/modules/membership/migrations/Migration20250420014232.js +2 -2
  11. package/.medusa/server/src/modules/membership/migrations/Migration20250420050937.js +2 -2
  12. package/.medusa/server/src/modules/membership/migrations/Migration20250421010109.js +2 -2
  13. package/.medusa/server/src/modules/membership/migrations/Migration20250421011451.js +2 -2
  14. package/.medusa/server/src/modules/membership/migrations/Migration20250422230822.js +2 -2
  15. package/.medusa/server/src/modules/membership/migrations/Migration20250423021328.js +2 -2
  16. package/.medusa/server/src/modules/membership/migrations/Migration20250423021925.js +2 -2
  17. package/.medusa/server/src/modules/membership/migrations/Migration20250424011144.js +2 -2
  18. package/.medusa/server/src/modules/membership/migrations/Migration20250507013347.js +2 -2
  19. package/.medusa/server/src/modules/promotion-cache/service.js +5 -1
  20. package/.medusa/server/src/modules/usable-promo/migrations/Migration20250504044646.js +2 -2
  21. package/.medusa/server/src/modules/wishlist/migrations/Migration20250424011114.js +2 -2
  22. package/.medusa/server/src/subscribers/customer-created.js +33 -4
  23. package/.medusa/server/src/subscribers/order-canceled.js +48 -0
  24. package/.medusa/server/src/subscribers/order-completed.js +62 -16
  25. package/.medusa/server/src/subscribers/order-fulfilled.js +68 -0
  26. package/.medusa/server/src/subscribers/order-payment-captured.js +111 -0
  27. package/.medusa/server/src/subscribers/order-placed.js +83 -9
  28. package/.medusa/server/src/subscribers/return-received.js +48 -0
  29. package/.medusa/server/src/workflows/membership/create-membership.js +27 -6
  30. package/.medusa/server/src/workflows/membership/void-membership-points.js +110 -0
  31. package/.medusa/server/src/workflows/usable-promo/invalidateUsedPromotionWorkflow.js +8 -2
  32. package/package.json +17 -30
@@ -2,11 +2,40 @@
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.config = void 0;
4
4
  exports.default = customerCreatedHandler;
5
- const framework_1 = require("@medusajs/framework");
5
+ const utils_1 = require("@medusajs/framework/utils");
6
6
  const create_membership_consent_1 = require("../workflows/membership-consent/create-membership-consent");
7
7
  const create_membership_notification_1 = require("../workflows/membership-notification/create-membership-notification");
8
- async function customerCreatedHandler({ event: { data }, }) {
9
- const logger = framework_1.container.resolve("logger");
8
+ const create_membership_1 = require("../workflows/membership/create-membership");
9
+ async function customerCreatedHandler({ event: { data }, container, }) {
10
+ const logger = container.resolve("logger");
11
+ try {
12
+ // Create membership for the new customer
13
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
14
+ // Check if membership is enabled in store configuration
15
+ const { data: [store], } = await query.graph({
16
+ entity: "store",
17
+ fields: ["id", "membership_config.*"],
18
+ });
19
+ if (store?.membership_config?.enable_membership) {
20
+ logger.log(`[Membership] Creating membership for new customer ${data.id}`);
21
+ // Create membership with 0 points (customer starts at the lowest tier)
22
+ await create_membership_1.createMembershipWorkflow.run({
23
+ input: {
24
+ customer_id: data.id,
25
+ points: 0,
26
+ },
27
+ });
28
+ logger.log(`[Membership] Successfully created membership for customer ${data.id}`);
29
+ }
30
+ else {
31
+ logger.log(`[Membership] Membership is disabled in store configuration, skipping membership creation for customer ${data.id}`);
32
+ }
33
+ }
34
+ catch (error) {
35
+ logger.error(`[Membership] Error creating membership for customer ${data.id}:`, error);
36
+ // Don't throw error to avoid blocking customer creation flow
37
+ }
38
+ // Continue with existing notification and consent workflows
10
39
  await create_membership_notification_1.createMembershipNotificationWorkflow.run({
11
40
  input: {
12
41
  customer_id: data.id,
@@ -23,4 +52,4 @@ async function customerCreatedHandler({ event: { data }, }) {
23
52
  exports.config = {
24
53
  event: `customer.created`,
25
54
  };
26
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItY3JlYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9jdXN0b21lci1jcmVhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVFBLHlDQWlCQztBQXpCRCxtREFJNkI7QUFDN0IseUdBQTRHO0FBQzVHLHdIQUEySDtBQUU1RyxLQUFLLFVBQVUsc0JBQXNCLENBQUMsRUFDbkQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQ2dCO0lBQy9CLE1BQU0sTUFBTSxHQUFHLHFCQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0lBQzNDLE1BQU0scUVBQW9DLENBQUMsR0FBRyxDQUFDO1FBQzdDLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNyQjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMscUNBQXFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTNELE1BQU0sMkRBQStCLENBQUMsR0FBRyxDQUFDO1FBQ3hDLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNyQjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLGtCQUFrQjtDQUMxQixDQUFDIn0=
55
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tZXItY3JlYXRlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9jdXN0b21lci1jcmVhdGVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQVVBLHlDQW9EQztBQXpERCxxREFBc0U7QUFDdEUseUdBQTRHO0FBQzVHLHdIQUEySDtBQUMzSCxpRkFBcUY7QUFFdEUsS0FBSyxVQUFVLHNCQUFzQixDQUFDLEVBQ25ELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUNmLFNBQVMsR0FDc0I7SUFDL0IsTUFBTSxNQUFNLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUUzQyxJQUFJLENBQUM7UUFDSCx5Q0FBeUM7UUFDekMsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRSx3REFBd0Q7UUFDeEQsTUFBTSxFQUNKLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxHQUNkLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3BCLE1BQU0sRUFBRSxPQUFPO1lBQ2YsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLHFCQUFxQixDQUFDO1NBQ3RDLENBQUMsQ0FBQztRQUVILElBQUksS0FBSyxFQUFFLGlCQUFpQixFQUFFLGlCQUFpQixFQUFFLENBQUM7WUFDaEQsTUFBTSxDQUFDLEdBQUcsQ0FBQyxxREFBcUQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFFM0UsdUVBQXVFO1lBQ3ZFLE1BQU0sNENBQXdCLENBQUMsR0FBRyxDQUFDO2dCQUNqQyxLQUFLLEVBQUU7b0JBQ0wsV0FBVyxFQUFFLElBQUksQ0FBQyxFQUFFO29CQUNwQixNQUFNLEVBQUUsQ0FBQztpQkFDVjthQUNGLENBQUMsQ0FBQztZQUVILE1BQU0sQ0FBQyxHQUFHLENBQUMsNkRBQTZELElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ3JGLENBQUM7YUFBTSxDQUFDO1lBQ04sTUFBTSxDQUFDLEdBQUcsQ0FBQyx5R0FBeUcsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakksQ0FBQztJQUNILENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsTUFBTSxDQUFDLEtBQUssQ0FBQyx1REFBdUQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQ3ZGLDZEQUE2RDtJQUMvRCxDQUFDO0lBRUQsNERBQTREO0lBQzVELE1BQU0scUVBQW9DLENBQUMsR0FBRyxDQUFDO1FBQzdDLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNyQjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMscUNBQXFDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBRTNELE1BQU0sMkRBQStCLENBQUMsR0FBRyxDQUFDO1FBQ3hDLEtBQUssRUFBRTtZQUNMLFdBQVcsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNyQjtLQUNGLENBQUMsQ0FBQztJQUNILE1BQU0sQ0FBQyxHQUFHLENBQUMsaUNBQWlDLElBQUksQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQ3pELENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLGtCQUFrQjtDQUMxQixDQUFDIn0=
@@ -0,0 +1,48 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = orderCanceledHandler;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const void_membership_points_1 = require("../workflows/membership/void-membership-points");
7
+ async function orderCanceledHandler({ event: { data }, container, }) {
8
+ try {
9
+ console.log(`[Membership] Processing order.canceled event for order: ${data.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.id,
17
+ },
18
+ });
19
+ if (!orders?.length) {
20
+ console.error(`[Membership] Order ${data.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 canceled 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_canceled",
36
+ },
37
+ });
38
+ console.log(`[Membership] Successfully processed cancellation for order ${order.id}`);
39
+ }
40
+ catch (error) {
41
+ console.error(`[Membership] Error processing order.canceled for order ${data.id}:`, error);
42
+ // Don't throw error to avoid blocking order flow
43
+ }
44
+ }
45
+ exports.config = {
46
+ event: `order.canceled`,
47
+ };
48
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY2FuY2VsZWQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvc3Vic2NyaWJlcnMvb3JkZXItY2FuY2VsZWQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBSUEsdUNBZ0RDO0FBbkRELHFEQUFzRTtBQUN0RSwyRkFBOEY7QUFFL0UsS0FBSyxVQUFVLG9CQUFvQixDQUFDLEVBQ2pELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUNmLFNBQVMsR0FDc0I7SUFDL0IsSUFBSSxDQUFDO1FBQ0gsT0FBTyxDQUFDLEdBQUcsQ0FBQywyREFBMkQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbEYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUVqRSxvQkFBb0I7UUFDcEIsTUFBTSxFQUNKLElBQUksRUFBRSxNQUFNLEdBQ2IsR0FBRyxNQUFNLEtBQUssQ0FBQyxLQUFLLENBQUM7WUFDcEIsTUFBTSxFQUFFLE9BQU87WUFDZixNQUFNLEVBQUUsQ0FBQyxJQUFJLEVBQUUsYUFBYSxFQUFFLFFBQVEsQ0FBQztZQUN2QyxPQUFPLEVBQUU7Z0JBQ1AsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFO2FBQ1o7U0FDRixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsTUFBTSxFQUFFLE1BQU0sRUFBRSxDQUFDO1lBQ3BCLE9BQU8sQ0FBQyxLQUFLLENBQUMsc0JBQXNCLElBQUksQ0FBQyxFQUFFLFlBQVksQ0FBQyxDQUFDO1lBQ3pELE9BQU87UUFDVCxDQUFDO1FBRUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3hCLE9BQU8sQ0FBQyxHQUFHLENBQUMsb0NBQW9DLEtBQUssQ0FBQyxFQUFFLGFBQWEsS0FBSyxDQUFDLE1BQU0sZUFBZSxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUMsQ0FBQztRQUVySCwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLENBQUMsRUFBRSx5REFBeUQsQ0FBQyxDQUFDO1lBQ3JHLE9BQU87UUFDVCxDQUFDO1FBRUQsaURBQWlEO1FBQ2pELE1BQU0scURBQTRCLENBQUMsR0FBRyxDQUFDO1lBQ3JDLEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzlCLFFBQVEsRUFBRSxLQUFLLENBQUMsRUFBRTtnQkFDbEIsTUFBTSxFQUFFLGdCQUFnQjthQUN6QjtTQUNGLENBQUMsQ0FBQztRQUVILE9BQU8sQ0FBQyxHQUFHLENBQUMsOERBQThELEtBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ3hGLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxDQUFDLEtBQUssQ0FBQywwREFBMEQsSUFBSSxDQUFDLEVBQUUsR0FBRyxFQUFFLEtBQUssQ0FBQyxDQUFDO1FBQzNGLGlEQUFpRDtJQUNuRCxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsZ0JBQWdCO0NBQ3hCLENBQUMifQ==
@@ -5,23 +5,69 @@ exports.default = orderCompletedHandler;
5
5
  const utils_1 = require("@medusajs/framework/utils");
6
6
  const add_membership_points_1 = require("../workflows/membership/add-membership-points");
7
7
  async function orderCompletedHandler({ event: { data }, container, }) {
8
- const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
9
- const { data: [order], } = await query.graph({
10
- entity: "order",
11
- fields: ["id", "total", "customer.id"],
12
- filters: {
13
- id: data.id,
14
- },
15
- });
16
- await add_membership_points_1.addMemberShipPointsWorkflow.run({
17
- input: {
18
- customer_id: order.customer.id,
19
- spending: order.total,
20
- source: `order: ${order.id}`,
21
- },
22
- });
8
+ try {
9
+ console.log(`[Membership] ======= ORDER COMPLETED EVENT RECEIVED =======`);
10
+ console.log(`[Membership] Processing order.completed event for order: ${data.id}`);
11
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
12
+ const { data: orders, } = await query.graph({
13
+ entity: "order",
14
+ fields: ["id", "total", "subtotal", "customer_id", "status"],
15
+ filters: {
16
+ id: data.id,
17
+ },
18
+ });
19
+ if (!orders?.length) {
20
+ console.error(`[Membership] Order ${data.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}, Total: ${order.total}`);
25
+ // Check if customer exists
26
+ if (!order.customer_id) {
27
+ console.log(`[Membership] Order ${order.id} has no customer (guest checkout), skipping membership points`);
28
+ return;
29
+ }
30
+ // Check if points were already added for this order (to avoid double points)
31
+ // This check is important because points should be added on payment_captured event
32
+ const { data: membershipTransactions } = await query.graph({
33
+ entity: "membership_transaction",
34
+ fields: ["id", "source", "points"],
35
+ filters: {
36
+ source: `order: ${order.id}`,
37
+ customer_id: order.customer_id,
38
+ },
39
+ });
40
+ if (membershipTransactions && membershipTransactions.length > 0) {
41
+ // Check if there are positive points (not voided)
42
+ const hasPositivePoints = membershipTransactions.some(t => t.points > 0);
43
+ if (hasPositivePoints) {
44
+ console.log(`[Membership] Points already added for order ${order.id} (likely via payment_captured event), skipping to avoid duplication`);
45
+ return;
46
+ }
47
+ }
48
+ // Use subtotal instead of total to exclude shipping/taxes from points calculation
49
+ const spending = order.subtotal || order.total || 0;
50
+ if (spending <= 0) {
51
+ console.log(`[Membership] Order ${order.id} has no spending amount, skipping membership points`);
52
+ return;
53
+ }
54
+ console.log(`[Membership] Adding membership points for customer ${order.customer_id}, spending: ${spending}`);
55
+ await add_membership_points_1.addMemberShipPointsWorkflow.run({
56
+ input: {
57
+ customer_id: order.customer_id,
58
+ spending: spending,
59
+ source: `order: ${order.id}`,
60
+ },
61
+ });
62
+ console.log(`[Membership] Successfully added membership points for order ${order.id}`);
63
+ }
64
+ catch (error) {
65
+ console.error(`[Membership] Error processing order.completed for order ${data.id}:`, error);
66
+ // Don't throw error to avoid blocking order flow
67
+ // Membership points can be added manually if needed
68
+ }
23
69
  }
24
70
  exports.config = {
25
71
  event: `order.completed`,
26
72
  };
27
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY29tcGxldGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWNvbXBsZXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx3Q0FzQkM7QUF6QkQscURBQXNFO0FBQ3RFLHlGQUE0RjtBQUU3RSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQ2pFLE1BQU0sRUFDSixJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FDZCxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztRQUNwQixNQUFNLEVBQUUsT0FBTztRQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsYUFBYSxDQUFDO1FBQ3RDLE9BQU8sRUFBRTtZQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTtTQUNaO0tBQ0YsQ0FBQyxDQUFDO0lBRUgsTUFBTSxtREFBMkIsQ0FBQyxHQUFHLENBQUM7UUFDcEMsS0FBSyxFQUFFO1lBQ0wsV0FBVyxFQUFFLEtBQUssQ0FBQyxRQUFRLENBQUMsRUFBRTtZQUM5QixRQUFRLEVBQUUsS0FBSyxDQUFDLEtBQUs7WUFDckIsTUFBTSxFQUFFLFVBQVUsS0FBSyxDQUFDLEVBQUUsRUFBRTtTQUM3QjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFWSxRQUFBLE1BQU0sR0FBcUI7SUFDdEMsS0FBSyxFQUFFLGlCQUFpQjtDQUN6QixDQUFDIn0=
73
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItY29tcGxldGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWNvbXBsZXRlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx3Q0E2RUM7QUFoRkQscURBQXNFO0FBQ3RFLHlGQUE0RjtBQUU3RSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDZEQUE2RCxDQUFDLENBQUM7UUFDM0UsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0REFBNEQsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFbkYsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxpQ0FBeUIsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNqRSxNQUFNLEVBQ0osSUFBSSxFQUFFLE1BQU0sR0FDYixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLENBQUM7WUFDNUQsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLE1BQU0sRUFBRSxNQUFNLEVBQUUsQ0FBQztZQUNwQixPQUFPLENBQUMsS0FBSyxDQUFDLHNCQUFzQixJQUFJLENBQUMsRUFBRSxZQUFZLENBQUMsQ0FBQztZQUN6RCxPQUFPO1FBQ1QsQ0FBQztRQUVELE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN4QixPQUFPLENBQUMsR0FBRyxDQUFDLG9DQUFvQyxLQUFLLENBQUMsRUFBRSxhQUFhLEtBQUssQ0FBQyxNQUFNLGVBQWUsS0FBSyxDQUFDLFdBQVcsWUFBWSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztRQUU1SSwyQkFBMkI7UUFDM0IsSUFBSSxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN2QixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLENBQUMsRUFBRSwrREFBK0QsQ0FBQyxDQUFDO1lBQzNHLE9BQU87UUFDVCxDQUFDO1FBRUQsNkVBQTZFO1FBQzdFLG1GQUFtRjtRQUNuRixNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pELE1BQU0sRUFBRSx3QkFBd0I7WUFDaEMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsRUFBRSxRQUFRLENBQUM7WUFDbEMsT0FBTyxFQUFFO2dCQUNQLE1BQU0sRUFBRSxVQUFVLEtBQUssQ0FBQyxFQUFFLEVBQUU7Z0JBQzVCLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVzthQUMvQjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksc0JBQXNCLElBQUksc0JBQXNCLENBQUMsTUFBTSxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ2hFLGtEQUFrRDtZQUNsRCxNQUFNLGlCQUFpQixHQUFHLHNCQUFzQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7WUFDekUsSUFBSSxpQkFBaUIsRUFBRSxDQUFDO2dCQUN0QixPQUFPLENBQUMsR0FBRyxDQUFDLCtDQUErQyxLQUFLLENBQUMsRUFBRSxxRUFBcUUsQ0FBQyxDQUFDO2dCQUMxSSxPQUFPO1lBQ1QsQ0FBQztRQUNILENBQUM7UUFFRCxrRkFBa0Y7UUFDbEYsTUFBTSxRQUFRLEdBQUcsS0FBSyxDQUFDLFFBQVEsSUFBSSxLQUFLLENBQUMsS0FBSyxJQUFJLENBQUMsQ0FBQztRQUVwRCxJQUFJLFFBQVEsSUFBSSxDQUFDLEVBQUUsQ0FBQztZQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixLQUFLLENBQUMsRUFBRSxxREFBcUQsQ0FBQyxDQUFDO1lBQ2pHLE9BQU87UUFDVCxDQUFDO1FBRUQsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzREFBc0QsS0FBSyxDQUFDLFdBQVcsZUFBZSxRQUFRLEVBQUUsQ0FBQyxDQUFDO1FBRTlHLE1BQU0sbURBQTJCLENBQUMsR0FBRyxDQUFDO1lBQ3BDLEtBQUssRUFBRTtnQkFDTCxXQUFXLEVBQUUsS0FBSyxDQUFDLFdBQVc7Z0JBQzlCLFFBQVEsRUFBRSxRQUFRO2dCQUNsQixNQUFNLEVBQUUsVUFBVSxLQUFLLENBQUMsRUFBRSxFQUFFO2FBQzdCO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FBQywrREFBK0QsS0FBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDekYsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDJEQUEyRCxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDNUYsaURBQWlEO1FBQ2pELG9EQUFvRDtJQUN0RCxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsaUJBQWlCO0NBQ3pCLENBQUMifQ==
@@ -0,0 +1,68 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = orderFulfilledHandler;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const add_membership_points_1 = require("../workflows/membership/add-membership-points");
7
+ async function orderFulfilledHandler({ event: { data }, container, }) {
8
+ try {
9
+ console.log(`[Membership] Processing order.fulfilled event for order: ${data.id}`);
10
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
11
+ // Get order details and check if points were already added
12
+ const { data: orders, } = await query.graph({
13
+ entity: "order",
14
+ fields: ["id", "total", "subtotal", "customer_id", "status", "metadata"],
15
+ filters: {
16
+ id: data.id,
17
+ },
18
+ });
19
+ if (!orders?.length) {
20
+ console.error(`[Membership] Order ${data.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}, Total: ${order.total}`);
25
+ // Check if customer exists
26
+ if (!order.customer_id) {
27
+ console.log(`[Membership] Order ${order.id} has no customer (guest checkout), skipping membership points`);
28
+ return;
29
+ }
30
+ // Check if points were already added for this order (to avoid double points)
31
+ const { data: membershipTransactions } = await query.graph({
32
+ entity: "membership_transaction",
33
+ fields: ["id", "source"],
34
+ filters: {
35
+ source: `order: ${order.id}`,
36
+ customer_id: order.customer_id,
37
+ },
38
+ });
39
+ if (membershipTransactions?.length > 0) {
40
+ console.log(`[Membership] Points already added for order ${order.id}, skipping to avoid duplication`);
41
+ return;
42
+ }
43
+ // Use subtotal instead of total to exclude shipping/taxes from points calculation
44
+ const spending = order.subtotal || order.total || 0;
45
+ if (spending <= 0) {
46
+ console.log(`[Membership] Order ${order.id} has no spending amount, skipping membership points`);
47
+ return;
48
+ }
49
+ console.log(`[Membership] Adding membership points for customer ${order.customer_id}, spending: ${spending}`);
50
+ await add_membership_points_1.addMemberShipPointsWorkflow.run({
51
+ input: {
52
+ customer_id: order.customer_id,
53
+ spending: spending,
54
+ source: `order: ${order.id}`,
55
+ },
56
+ });
57
+ console.log(`[Membership] Successfully added membership points for fulfilled order ${order.id}`);
58
+ }
59
+ catch (error) {
60
+ console.error(`[Membership] Error processing order.fulfilled for order ${data.id}:`, error);
61
+ // Don't throw error to avoid blocking order flow
62
+ // Membership points can be added manually if needed
63
+ }
64
+ }
65
+ exports.config = {
66
+ event: `order.fulfilled`,
67
+ };
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItZnVsZmlsbGVkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLWZ1bGZpbGxlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSx3Q0F5RUM7QUE1RUQscURBQXNFO0FBQ3RFLHlGQUE0RjtBQUU3RSxLQUFLLFVBQVUscUJBQXFCLENBQUMsRUFDbEQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEVBQ2YsU0FBUyxHQUNzQjtJQUMvQixJQUFJLENBQUM7UUFDSCxPQUFPLENBQUMsR0FBRyxDQUFDLDREQUE0RCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUVuRixNQUFNLEtBQUssR0FBRyxTQUFTLENBQUMsT0FBTyxDQUFDLGlDQUF5QixDQUFDLEtBQUssQ0FBQyxDQUFDO1FBRWpFLDJEQUEyRDtRQUMzRCxNQUFNLEVBQ0osSUFBSSxFQUFFLE1BQU0sR0FDYixHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztZQUNwQixNQUFNLEVBQUUsT0FBTztZQUNmLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsVUFBVSxFQUFFLGFBQWEsRUFBRSxRQUFRLEVBQUUsVUFBVSxDQUFDO1lBQ3hFLE9BQU8sRUFBRTtnQkFDUCxFQUFFLEVBQUUsSUFBSSxDQUFDLEVBQUU7YUFDWjtTQUNGLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxFQUFFLENBQUM7WUFDcEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxzQkFBc0IsSUFBSSxDQUFDLEVBQUUsWUFBWSxDQUFDLENBQUM7WUFDekQsT0FBTztRQUNULENBQUM7UUFFRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDeEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxvQ0FBb0MsS0FBSyxDQUFDLEVBQUUsYUFBYSxLQUFLLENBQUMsTUFBTSxlQUFlLEtBQUssQ0FBQyxXQUFXLFlBQVksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFNUksMkJBQTJCO1FBQzNCLElBQUksQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLENBQUM7WUFDdkIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzQkFBc0IsS0FBSyxDQUFDLEVBQUUsK0RBQStELENBQUMsQ0FBQztZQUMzRyxPQUFPO1FBQ1QsQ0FBQztRQUVELDZFQUE2RTtRQUM3RSxNQUFNLEVBQUUsSUFBSSxFQUFFLHNCQUFzQixFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQ3pELE1BQU0sRUFBRSx3QkFBd0I7WUFDaEMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQztZQUN4QixPQUFPLEVBQUU7Z0JBQ1AsTUFBTSxFQUFFLFVBQVUsS0FBSyxDQUFDLEVBQUUsRUFBRTtnQkFDNUIsV0FBVyxFQUFFLEtBQUssQ0FBQyxXQUFXO2FBQy9CO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsSUFBSSxzQkFBc0IsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDdkMsT0FBTyxDQUFDLEdBQUcsQ0FBQywrQ0FBK0MsS0FBSyxDQUFDLEVBQUUsaUNBQWlDLENBQUMsQ0FBQztZQUN0RyxPQUFPO1FBQ1QsQ0FBQztRQUVELGtGQUFrRjtRQUNsRixNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsUUFBUSxJQUFJLEtBQUssQ0FBQyxLQUFLLElBQUksQ0FBQyxDQUFDO1FBRXBELElBQUksUUFBUSxJQUFJLENBQUMsRUFBRSxDQUFDO1lBQ2xCLE9BQU8sQ0FBQyxHQUFHLENBQUMsc0JBQXNCLEtBQUssQ0FBQyxFQUFFLHFEQUFxRCxDQUFDLENBQUM7WUFDakcsT0FBTztRQUNULENBQUM7UUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNEQUFzRCxLQUFLLENBQUMsV0FBVyxlQUFlLFFBQVEsRUFBRSxDQUFDLENBQUM7UUFFOUcsTUFBTSxtREFBMkIsQ0FBQyxHQUFHLENBQUM7WUFDcEMsS0FBSyxFQUFFO2dCQUNMLFdBQVcsRUFBRSxLQUFLLENBQUMsV0FBVztnQkFDOUIsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxVQUFVLEtBQUssQ0FBQyxFQUFFLEVBQUU7YUFDN0I7U0FDRixDQUFDLENBQUM7UUFFSCxPQUFPLENBQUMsR0FBRyxDQUFDLHlFQUF5RSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNuRyxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsMkRBQTJELElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUM1RixpREFBaUQ7UUFDakQsb0RBQW9EO0lBQ3RELENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxpQkFBaUI7Q0FDekIsQ0FBQyJ9
@@ -0,0 +1,111 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.config = void 0;
4
+ exports.default = paymentCapturedHandler;
5
+ const utils_1 = require("@medusajs/framework/utils");
6
+ const add_membership_points_1 = require("../workflows/membership/add-membership-points");
7
+ async function paymentCapturedHandler({ event: { data }, container, }) {
8
+ try {
9
+ console.log(`[Membership] ======= PAYMENT CAPTURED EVENT RECEIVED =======`);
10
+ console.log(`[Membership] Processing payment.captured event for payment: ${data.id}`);
11
+ console.log(`[Membership] Raw event data:`, JSON.stringify(data, null, 2));
12
+ const query = container.resolve(utils_1.ContainerRegistrationKeys.QUERY);
13
+ // Get payment with payment collection
14
+ const { data: payments } = await query.graph({
15
+ entity: "payment",
16
+ fields: ["id", "amount", "payment_collection_id"],
17
+ filters: {
18
+ id: data.id,
19
+ },
20
+ });
21
+ console.log(`[Membership] Payment query result:`, JSON.stringify(payments, null, 2));
22
+ if (!payments?.length) {
23
+ console.log(`[Membership] Payment ${data.id} not found, skipping membership points`);
24
+ return;
25
+ }
26
+ const payment = payments[0];
27
+ if (!payment.payment_collection_id) {
28
+ console.log(`[Membership] Payment ${data.id} has no payment_collection_id, skipping membership points`);
29
+ return;
30
+ }
31
+ // Get payment collection with linked order using Medusa v2 link module
32
+ const { data: paymentCollections } = await query.graph({
33
+ entity: "payment_collection",
34
+ fields: [
35
+ "id",
36
+ "order.id",
37
+ "order.customer_id",
38
+ "order.status",
39
+ "order.total",
40
+ "order.subtotal",
41
+ ],
42
+ filters: {
43
+ id: payment.payment_collection_id,
44
+ },
45
+ });
46
+ console.log(`[Membership] Payment collection query result:`, JSON.stringify(paymentCollections, null, 2));
47
+ if (!paymentCollections?.length) {
48
+ console.log(`[Membership] Payment collection ${payment.payment_collection_id} not found, skipping membership points`);
49
+ return;
50
+ }
51
+ const paymentCollection = paymentCollections[0];
52
+ // Get order from the linked data
53
+ const order = paymentCollection.order;
54
+ if (!order || !order.id) {
55
+ console.log(`[Membership] Payment collection ${payment.payment_collection_id} has no linked order, skipping membership points`);
56
+ console.log(`[Membership] Payment collection details:`, JSON.stringify(paymentCollection, null, 2));
57
+ return;
58
+ }
59
+ const orderId = order.id;
60
+ console.log(`[Membership] Payment ${payment.id} associated with order ${orderId}`);
61
+ // Check if customer exists
62
+ if (!order.customer_id) {
63
+ console.log(`[Membership] Order ${order.id} has no customer (guest checkout), skipping membership points`);
64
+ return;
65
+ }
66
+ console.log(`[Membership] Order details - ID: ${order.id}, Status: ${order.status}, Customer: ${order.customer_id}, Total: ${order.total}`);
67
+ // Check if points were already added for this order (to avoid double points)
68
+ const { data: membershipTransactions } = await query.graph({
69
+ entity: "membership_transaction",
70
+ fields: ["id", "source", "points"],
71
+ filters: {
72
+ source: `order: ${order.id}`,
73
+ customer_id: order.customer_id,
74
+ },
75
+ });
76
+ if (membershipTransactions && membershipTransactions.length > 0) {
77
+ // Check if there are positive points (not voided)
78
+ const hasPositivePoints = membershipTransactions.some((t) => t.points > 0);
79
+ if (hasPositivePoints) {
80
+ console.log(`[Membership] Points already added for order ${order.id}, skipping to avoid duplication`);
81
+ return;
82
+ }
83
+ }
84
+ // Use subtotal instead of total to exclude shipping/taxes from points calculation
85
+ const spending = order.subtotal || order.total || 0;
86
+ if (spending <= 0) {
87
+ console.log(`[Membership] Order ${order.id} has no spending amount, skipping membership points`);
88
+ return;
89
+ }
90
+ console.log(`[Membership] Adding membership points for customer ${order.customer_id}, spending: ${spending}`);
91
+ await add_membership_points_1.addMemberShipPointsWorkflow.run({
92
+ input: {
93
+ customer_id: order.customer_id,
94
+ spending: spending,
95
+ source: `order: ${order.id}`,
96
+ },
97
+ });
98
+ console.log(`[Membership] Successfully added membership points for paid order ${order.id}`);
99
+ }
100
+ catch (error) {
101
+ console.error(`[Membership] Error processing payment.captured for payment ${data.id}:`, error);
102
+ console.error(`[Membership] Error stack:`, error.stack);
103
+ console.error(`[Membership] Error details:`, JSON.stringify(error, Object.getOwnPropertyNames(error)));
104
+ // Don't throw error to avoid blocking order flow
105
+ // Membership points can be added manually if needed
106
+ }
107
+ }
108
+ exports.config = {
109
+ event: `payment.captured`,
110
+ };
111
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGF5bWVudC1jYXB0dXJlZC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9vcmRlci1wYXltZW50LWNhcHR1cmVkLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLHlDQXFLQztBQXhLRCxxREFBK0U7QUFDL0UseUZBQTRGO0FBRTdFLEtBQUssVUFBVSxzQkFBc0IsQ0FBQyxFQUNuRCxLQUFLLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFDZixTQUFTLEdBQ3NCO0lBQy9CLElBQUksQ0FBQztRQUNILE9BQU8sQ0FBQyxHQUFHLENBQUMsOERBQThELENBQUMsQ0FBQztRQUM1RSxPQUFPLENBQUMsR0FBRyxDQUNULCtEQUErRCxJQUFJLENBQUMsRUFBRSxFQUFFLENBQ3pFLENBQUM7UUFDRixPQUFPLENBQUMsR0FBRyxDQUFDLDhCQUE4QixFQUFFLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRTNFLE1BQU0sS0FBSyxHQUFHLFNBQVMsQ0FBQyxPQUFPLENBQUMsaUNBQXlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFFakUsc0NBQXNDO1FBQ3RDLE1BQU0sRUFBRSxJQUFJLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1lBQzNDLE1BQU0sRUFBRSxTQUFTO1lBQ2pCLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLEVBQUUsdUJBQXVCLENBQUM7WUFDakQsT0FBTyxFQUFFO2dCQUNQLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRTthQUNaO1NBQ0YsQ0FBQyxDQUFDO1FBRUgsT0FBTyxDQUFDLEdBQUcsQ0FDVCxvQ0FBb0MsRUFDcEMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUNsQyxDQUFDO1FBRUYsSUFBSSxDQUFDLFFBQVEsRUFB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
@@ -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 = invalidateUsedPromotions;
4
+ exports.default = handleOrderPlaced;
5
+ const utils_1 = require("@medusajs/framework/utils");
5
6
  const invalidateUsedPromotionWorkflow_1 = require("../workflows/usable-promo/invalidateUsedPromotionWorkflow");
6
- async function invalidateUsedPromotions({ event: { data }, }) {
7
- // invalidate all promotions used in this order
8
- await invalidateUsedPromotionWorkflow_1.invalidatedUsePromotionWorkflow.run({
9
- input: {
10
- order_id: data.id,
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoib3JkZXItcGxhY2VkLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vc3JjL3N1YnNjcmliZXJzL29yZGVyLXBsYWNlZC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFHQSwyQ0FTQztBQVhELCtHQUE0RztBQUU3RixLQUFLLFVBQVUsd0JBQXdCLENBQUMsRUFDckQsS0FBSyxFQUFFLEVBQUUsSUFBSSxFQUFFLEdBQ2dCO0lBQy9CLCtDQUErQztJQUMvQyxNQUFNLGlFQUErQixDQUFDLEdBQUcsQ0FBQztRQUN4QyxLQUFLLEVBQUU7WUFDTCxRQUFRLEVBQUUsSUFBSSxDQUFDLEVBQUU7U0FDbEI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSxjQUFjO0NBQ3RCLENBQUMifQ==
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