@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
|
@@ -8,6 +8,15 @@ const member_tiers_1 = require("./middlewares/member-tiers");
|
|
|
8
8
|
const wishlist_1 = require("./middlewares/wishlist");
|
|
9
9
|
const notifications_1 = require("./middlewares/notifications");
|
|
10
10
|
const consent_1 = require("./middlewares/consent");
|
|
11
|
+
// Middleware to strip invalid 'id' parameter from promotion list queries
|
|
12
|
+
// The admin panel sends id[0] and id[$nin][0] which are not valid for the promotion list endpoint
|
|
13
|
+
const removeInvalidPromotionIdParam = (req, res, next) => {
|
|
14
|
+
if (req.query && 'id' in req.query) {
|
|
15
|
+
console.log('[Middleware] Removing invalid id parameter from promotion query:', req.query.id);
|
|
16
|
+
delete req.query.id;
|
|
17
|
+
}
|
|
18
|
+
next();
|
|
19
|
+
};
|
|
11
20
|
exports.default = (0, framework_1.defineMiddlewares)({
|
|
12
21
|
routes: [
|
|
13
22
|
...(promotion_codes_1.promotionCodesMiddleware.routes ?? []),
|
|
@@ -16,6 +25,11 @@ exports.default = (0, framework_1.defineMiddlewares)({
|
|
|
16
25
|
...(wishlist_1.wishlistMiddleware.routes ?? []),
|
|
17
26
|
...(notifications_1.notificationsMiddleware.routes ?? []),
|
|
18
27
|
...(consent_1.consentMiddleware.routes ?? []),
|
|
28
|
+
{
|
|
29
|
+
method: ["GET"],
|
|
30
|
+
matcher: "/admin/promotions",
|
|
31
|
+
middlewares: [removeInvalidPromotionIdParam],
|
|
32
|
+
},
|
|
19
33
|
{
|
|
20
34
|
method: ["PATCH"],
|
|
21
35
|
matcher: "/admin/membership/config/[store_id]",
|
|
@@ -23,4 +37,4 @@ exports.default = (0, framework_1.defineMiddlewares)({
|
|
|
23
37
|
},
|
|
24
38
|
],
|
|
25
39
|
});
|
|
26
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
40
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBTzZCO0FBRTdCLHFGQUE2RjtBQUM3RixtRUFBeUU7QUFDekUsdURBQThEO0FBQzlELDZEQUFtRTtBQUNuRSxxREFBNEQ7QUFDNUQsK0RBQXNFO0FBQ3RFLG1EQUEwRDtBQUUxRCx5RUFBeUU7QUFDekUsa0dBQWtHO0FBQ2xHLE1BQU0sNkJBQTZCLEdBQUcsQ0FDcEMsR0FBa0IsRUFDbEIsR0FBbUIsRUFDbkIsSUFBd0IsRUFDeEIsRUFBRTtJQUNGLElBQUksR0FBRyxDQUFDLEtBQUssSUFBSSxJQUFJLElBQUksR0FBRyxDQUFDLEtBQUssRUFBRSxDQUFDO1FBQ25DLE9BQU8sQ0FBQyxHQUFHLENBQUMsa0VBQWtFLEVBQUUsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUM5RixPQUFPLEdBQUcsQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO0lBQ3RCLENBQUM7SUFDRCxJQUFJLEVBQUUsQ0FBQztBQUNULENBQUMsQ0FBQztBQUVGLGtCQUFlLElBQUEsNkJBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ04sR0FBRyxDQUFDLDBDQUF3QixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDMUMsR0FBRyxDQUFDLCtCQUFtQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDckMsR0FBRyxDQUFDLG9DQUFxQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDdkMsR0FBRyxDQUFDLDZCQUFrQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDcEMsR0FBRyxDQUFDLHVDQUF1QixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDekMsR0FBRyxDQUFDLDJCQUFpQixDQUFDLE1BQU0sSUFBSSxFQUFFLENBQUM7UUFDbkM7WUFDRSxNQUFNLEVBQUUsQ0FBQyxLQUFLLENBQUM7WUFDZixPQUFPLEVBQUUsbUJBQW1CO1lBQzVCLFdBQVcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO1NBQzdDO1FBQ0Q7WUFDRSxNQUFNLEVBQUUsQ0FBQyxPQUFPLENBQUM7WUFDakIsT0FBTyxFQUFFLHFDQUFxQztZQUM5QyxXQUFXLEVBQUUsQ0FBQyxJQUFBLG9DQUF3QixFQUFDLGdEQUFtQyxDQUFDLENBQUM7U0FDN0U7S0FDRjtDQUNGLENBQUMsQ0FBQyJ9
|
|
@@ -15,6 +15,68 @@ const GET = async (req, res) => {
|
|
|
15
15
|
},
|
|
16
16
|
});
|
|
17
17
|
const typedResult = result;
|
|
18
|
+
// Get query resolver
|
|
19
|
+
const query = req.scope.resolve("query");
|
|
20
|
+
// Calculate total spending and savings from membership transactions
|
|
21
|
+
let totalSpending = 0;
|
|
22
|
+
let totalSavings = 0;
|
|
23
|
+
if (typedResult.membership) {
|
|
24
|
+
const { data: transactions } = await query.graph({
|
|
25
|
+
entity: "membership_transaction",
|
|
26
|
+
fields: ["id", "points", "source"],
|
|
27
|
+
filters: {
|
|
28
|
+
customer_id: customerId,
|
|
29
|
+
},
|
|
30
|
+
});
|
|
31
|
+
if (transactions && transactions.length > 0) {
|
|
32
|
+
// Sum up spending from order transactions (positive points)
|
|
33
|
+
totalSpending = transactions
|
|
34
|
+
.filter((t) => t.source?.startsWith("order:") && t.points > 0)
|
|
35
|
+
.reduce((sum, t) => sum + t.points, 0);
|
|
36
|
+
// Get order IDs from transactions
|
|
37
|
+
const orderIds = transactions
|
|
38
|
+
.filter((t) => t.source?.startsWith("order:"))
|
|
39
|
+
.map((t) => t.source.replace("order: ", ""));
|
|
40
|
+
console.log(`[Membership API] Found ${orderIds.length} order IDs from transactions:`, orderIds);
|
|
41
|
+
// Calculate total savings from order line items discounts
|
|
42
|
+
if (orderIds.length > 0) {
|
|
43
|
+
const { data: orders } = await query.graph({
|
|
44
|
+
entity: "order",
|
|
45
|
+
fields: ["id", "discount_total", "item_discount_total", "items.*"],
|
|
46
|
+
filters: {
|
|
47
|
+
id: orderIds,
|
|
48
|
+
customer_id: customerId,
|
|
49
|
+
},
|
|
50
|
+
});
|
|
51
|
+
console.log(`[Membership API] Fetched ${orders?.length || 0} orders for discount calculation`);
|
|
52
|
+
console.log(`[Membership API] Orders data:`, JSON.stringify(orders, null, 2));
|
|
53
|
+
if (orders && orders.length > 0) {
|
|
54
|
+
// Sum up item_discount_total from all orders
|
|
55
|
+
totalSavings = orders.reduce((sum, order) => {
|
|
56
|
+
const orderDiscount = order.item_discount_total || order.discount_total || 0;
|
|
57
|
+
console.log(`[Membership API] Order ${order.id}: item_discount_total = ${order.item_discount_total}, discount_total = ${order.discount_total}, using: ${orderDiscount}`);
|
|
58
|
+
return sum + orderDiscount;
|
|
59
|
+
}, 0);
|
|
60
|
+
console.log(`[Membership API] Final total_savings: ${totalSavings}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Get all membership tiers
|
|
66
|
+
const { data: allTiers } = await query.graph({
|
|
67
|
+
entity: "member_tier",
|
|
68
|
+
fields: [
|
|
69
|
+
"id",
|
|
70
|
+
"name",
|
|
71
|
+
"description",
|
|
72
|
+
"privilege_description",
|
|
73
|
+
"min_points",
|
|
74
|
+
"created_at",
|
|
75
|
+
"updated_at",
|
|
76
|
+
"deleted_at",
|
|
77
|
+
],
|
|
78
|
+
filters: {},
|
|
79
|
+
});
|
|
18
80
|
if (!typedResult.membership) {
|
|
19
81
|
// If create flag is set, create a new membership with 0 points
|
|
20
82
|
if (createIfNotExists) {
|
|
@@ -34,19 +96,27 @@ const GET = async (req, res) => {
|
|
|
34
96
|
return res.json({
|
|
35
97
|
membership: typedNewResult.membership,
|
|
36
98
|
member_tier: typedNewResult.member_tier,
|
|
99
|
+
all_tiers: allTiers || [],
|
|
37
100
|
created: true, // Indicate that a new membership was created
|
|
38
101
|
});
|
|
39
102
|
}
|
|
40
|
-
//
|
|
103
|
+
// This case should rarely happen since memberships are now created on customer creation
|
|
104
|
+
// But we handle it for edge cases (e.g., existing customers before this change)
|
|
41
105
|
return res.json({
|
|
42
106
|
membership: null,
|
|
43
107
|
member_tier: null,
|
|
44
|
-
|
|
108
|
+
all_tiers: allTiers || [],
|
|
109
|
+
message: "No membership exists for this customer. Please contact support if this persists.",
|
|
45
110
|
});
|
|
46
111
|
}
|
|
47
112
|
return res.json({
|
|
48
|
-
membership:
|
|
113
|
+
membership: {
|
|
114
|
+
...typedResult.membership,
|
|
115
|
+
total_spending: totalSpending,
|
|
116
|
+
total_savings: totalSavings,
|
|
117
|
+
},
|
|
49
118
|
member_tier: typedResult.member_tier,
|
|
119
|
+
all_tiers: allTiers || [],
|
|
50
120
|
});
|
|
51
121
|
}
|
|
52
122
|
catch (error) {
|
|
@@ -58,4 +128,4 @@ const GET = async (req, res) => {
|
|
|
58
128
|
}
|
|
59
129
|
};
|
|
60
130
|
exports.GET = GET;
|
|
61
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9tZS9tZW1iZXItdGllci9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFJQSw2SEFBK0g7QUFDL0gsNkZBQWlHO0FBMkIxRixNQUFNLEdBQUcsR0FBRyxLQUFLLEVBQ3RCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixJQUFJLENBQUM7UUFDSCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztRQUM3QyxNQUFNLGlCQUFpQixHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsTUFBTSxLQUFLLE1BQU0sQ0FBQyxDQUFDLDRDQUE0QztRQUVuRyxrRUFBa0U7UUFDbEUsK0NBQStDO1FBQy9DLE1BQU0sRUFBRSxNQUFNLEVBQUUsR0FBRyxNQUFNLElBQUEsMEVBQXNDLEVBQzdELEdBQUcsQ0FBQyxLQUFLLENBQ1YsQ0FBQyxHQUFHLENBQUM7WUFDSixLQUFLLEVBQUU7Z0JBQ0wsV0FBVyxFQUFFLFVBQVU7YUFDeEI7U0FDRixDQUFDLENBQUM7UUFFSCxNQUFNLFdBQVcsR0FBRyxNQUE4QyxDQUFDO1FBRW5FLHFCQUFxQjtRQUNyQixNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUV6QyxvRUFBb0U7UUFDcEUsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ3RCLElBQUksWUFBWSxHQUFHLENBQUMsQ0FBQztRQUNyQixJQUFJLFdBQVcsQ0FBQyxVQUFVLEVBQUUsQ0FBQztZQUMzQixNQUFNLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sS0FBSyxDQUFDLEtBQUssQ0FBQztnQkFDL0MsTUFBTSxFQUFFLHdCQUF3QjtnQkFDaEMsTUFBTSxFQUFFLENBQUMsSUFBSSxFQUFF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
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
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 specific promotion code by ID
|
|
10
|
+
*
|
|
11
|
+
* Allows authenticated customers to collect a promotion to their account.
|
|
12
|
+
* Once collected, the promotion code can be used during checkout.
|
|
13
|
+
*
|
|
14
|
+
* Validation:
|
|
15
|
+
* - Promotion must exist and be enabled for collection
|
|
16
|
+
* - Customer must be authenticated
|
|
17
|
+
* - Customer cannot collect the same promotion twice
|
|
18
|
+
*/
|
|
19
|
+
const POST = async (req, res) => {
|
|
20
|
+
const { id: promotion_id } = req.params;
|
|
21
|
+
if (!promotion_id) {
|
|
22
|
+
return res.status(400).json({
|
|
23
|
+
message: "promotion_id is required",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const customerId = req.auth_context.actor_id;
|
|
27
|
+
if (!customerId) {
|
|
28
|
+
return res.status(401).json({
|
|
29
|
+
message: "Customer must be authenticated",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
// Check if promotion exists and is enabled for collection
|
|
34
|
+
const usablePromoService = framework_1.container.resolve(usable_promo_1.USABLE_PROMO_MODULE);
|
|
35
|
+
const [usablePromotion] = await usablePromoService.listUsablePromotions({
|
|
36
|
+
promotion_id: promotion_id,
|
|
37
|
+
});
|
|
38
|
+
if (!usablePromotion) {
|
|
39
|
+
return res.status(404).json({
|
|
40
|
+
message: "Promotion not found or not available for collection",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (!usablePromotion.enabled) {
|
|
44
|
+
return res.status(400).json({
|
|
45
|
+
message: "This promotion is not enabled for collection",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Verify promotion exists in the system
|
|
49
|
+
const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
|
|
50
|
+
const promotion = await promotionService.retrievePromotion(promotion_id, {
|
|
51
|
+
relations: [
|
|
52
|
+
"campaign",
|
|
53
|
+
"application_method",
|
|
54
|
+
],
|
|
55
|
+
});
|
|
56
|
+
if (!promotion) {
|
|
57
|
+
return res.status(404).json({
|
|
58
|
+
message: "Promotion not found",
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
// Check if customer already has this promotion
|
|
62
|
+
const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
63
|
+
const cacheKey = `user:${customerId}:promotion:${promotion_id}`;
|
|
64
|
+
const alreadyCollected = await promoCacheService.exists(cacheKey);
|
|
65
|
+
if (alreadyCollected) {
|
|
66
|
+
return res.status(400).json({
|
|
67
|
+
message: "You have already collected this promotion",
|
|
68
|
+
promotion: {
|
|
69
|
+
id: promotion.id,
|
|
70
|
+
code: promotion.code,
|
|
71
|
+
type: promotion.type,
|
|
72
|
+
},
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
// Add promotion to customer's cache
|
|
76
|
+
await promoCacheService.set(cacheKey, promotion_id);
|
|
77
|
+
// Return detailed promotion information
|
|
78
|
+
const applicationMethod = promotion.application_method;
|
|
79
|
+
const campaign = promotion.campaign;
|
|
80
|
+
res.status(201).json({
|
|
81
|
+
message: "Promotion collected successfully",
|
|
82
|
+
promotion: {
|
|
83
|
+
id: promotion.id,
|
|
84
|
+
code: promotion.code,
|
|
85
|
+
type: promotion.type,
|
|
86
|
+
is_automatic: promotion.is_automatic,
|
|
87
|
+
campaign: campaign
|
|
88
|
+
? {
|
|
89
|
+
id: campaign.id,
|
|
90
|
+
name: campaign.name,
|
|
91
|
+
description: campaign.description,
|
|
92
|
+
starts_at: campaign.starts_at,
|
|
93
|
+
ends_at: campaign.ends_at,
|
|
94
|
+
}
|
|
95
|
+
: null,
|
|
96
|
+
application_method: applicationMethod
|
|
97
|
+
? {
|
|
98
|
+
type: applicationMethod.type,
|
|
99
|
+
target_type: applicationMethod.target_type,
|
|
100
|
+
allocation: applicationMethod.allocation,
|
|
101
|
+
value: applicationMethod.value,
|
|
102
|
+
}
|
|
103
|
+
: null,
|
|
104
|
+
},
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
console.error("Error collecting promotion:", error);
|
|
109
|
+
res.status(500).json({
|
|
110
|
+
message: "Failed to collect promotion",
|
|
111
|
+
error: error instanceof Error ? error.message : String(error),
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
};
|
|
115
|
+
exports.POST = POST;
|
|
116
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9baWRdL2NvbGxlY3Qvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQ0EsbURBSTZCO0FBQzdCLHFEQUFvRDtBQUNwRCw0RUFBZ0Y7QUFFaEYsc0VBQTBFO0FBRzFFOzs7Ozs7Ozs7O0dBVUc7QUFDSSxNQUFNLElBQUksR0FBRyxLQUFLLEVBQ3ZCLEdBQStCLEVBQy9CLEdBQW1CLEVBQ25CLEVBQUU7SUFDRixNQUFNLEVBQUUsRUFBRSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFeEMsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ2xCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxFQUFFLDBCQUEwQjtTQUNwQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsR0FBRyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUM7SUFDN0MsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxFQUFFLGdDQUFnQztTQUMxQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsSUFBSSxDQUFDO1FBQ0gsMERBQTBEO1FBQzFELE1BQU0sa0JBQWtCLEdBQ3RCLHFCQUFTLENBQUMsT0FBTyxDQUEyQixrQ0FBbUIsQ0FBQyxDQUFDO1FBQ25FLE1BQU0sQ0FBQyxlQUFlLENBQUMsR0FBRyxNQUFNLGtCQUFrQixDQUFDLG9CQUFvQixDQUFDO1lBQ3RFLFlBQVksRUFBRSxZQUFZO1NBQzNCLENBQUMsQ0FBQztRQUVILElBQUksQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNyQixP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
|
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = 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
|
+
* GET handler for fetching a single promotion by ID with full information
|
|
10
|
+
*
|
|
11
|
+
* Returns detailed promotion information including:
|
|
12
|
+
* - Basic promotion details (id, code, type, is_automatic)
|
|
13
|
+
* - Campaign information (name, description, start/end dates)
|
|
14
|
+
* - Application method details (type, value, allocation, rules)
|
|
15
|
+
* - Promotion rules with attributes, operators, and values
|
|
16
|
+
* - Collection status (is_collected flag)
|
|
17
|
+
* - Timestamps (created_at, updated_at)
|
|
18
|
+
*/
|
|
19
|
+
const GET = async (req, res) => {
|
|
20
|
+
const { id } = req.params;
|
|
21
|
+
if (!id) {
|
|
22
|
+
return res.status(400).json({
|
|
23
|
+
message: "Promotion ID is required",
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
const customerId = req.auth_context.actor_id;
|
|
27
|
+
if (!customerId) {
|
|
28
|
+
return res.status(401).json({
|
|
29
|
+
message: "Customer must be authenticated",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
try {
|
|
33
|
+
// Check if promotion exists and is enabled for collection
|
|
34
|
+
const usablePromoService = framework_1.container.resolve(usable_promo_1.USABLE_PROMO_MODULE);
|
|
35
|
+
const [usablePromotion] = await usablePromoService.listUsablePromotions({
|
|
36
|
+
promotion_id: id,
|
|
37
|
+
});
|
|
38
|
+
if (!usablePromotion) {
|
|
39
|
+
return res.status(404).json({
|
|
40
|
+
message: "Promotion not found or not available for collection",
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
if (!usablePromotion.enabled) {
|
|
44
|
+
return res.status(404).json({
|
|
45
|
+
message: "This promotion is not enabled for collection",
|
|
46
|
+
});
|
|
47
|
+
}
|
|
48
|
+
// Get full promotion details with all relations
|
|
49
|
+
const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
|
|
50
|
+
const promotion = await promotionService.retrievePromotion(id, {
|
|
51
|
+
relations: [
|
|
52
|
+
"campaign",
|
|
53
|
+
"application_method",
|
|
54
|
+
"application_method.target_rules",
|
|
55
|
+
"application_method.buy_rules",
|
|
56
|
+
"rules",
|
|
57
|
+
"rules.values",
|
|
58
|
+
],
|
|
59
|
+
});
|
|
60
|
+
if (!promotion) {
|
|
61
|
+
return res.status(404).json({
|
|
62
|
+
message: "Promotion not found",
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
// Check if customer has already collected this promotion
|
|
66
|
+
const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
67
|
+
const cacheKey = `user:${customerId}:promotion:${id}`;
|
|
68
|
+
const isCollected = await promoCacheService.exists(cacheKey);
|
|
69
|
+
// Extract detailed information
|
|
70
|
+
const applicationMethod = promotion.application_method;
|
|
71
|
+
const rules = promotion.rules || [];
|
|
72
|
+
const campaign = promotion.campaign;
|
|
73
|
+
const promotionWithFullInfo = {
|
|
74
|
+
id: promotion.id,
|
|
75
|
+
code: promotion.code,
|
|
76
|
+
type: promotion.type,
|
|
77
|
+
is_automatic: promotion.is_automatic,
|
|
78
|
+
campaign: campaign
|
|
79
|
+
? {
|
|
80
|
+
id: campaign.id,
|
|
81
|
+
name: campaign.name,
|
|
82
|
+
description: campaign.description,
|
|
83
|
+
starts_at: campaign.starts_at,
|
|
84
|
+
ends_at: campaign.ends_at,
|
|
85
|
+
}
|
|
86
|
+
: null,
|
|
87
|
+
application_method: applicationMethod
|
|
88
|
+
? {
|
|
89
|
+
type: applicationMethod.type,
|
|
90
|
+
target_type: applicationMethod.target_type,
|
|
91
|
+
allocation: applicationMethod.allocation,
|
|
92
|
+
value: applicationMethod.value,
|
|
93
|
+
max_quantity: applicationMethod.max_quantity,
|
|
94
|
+
apply_to_quantity: applicationMethod.apply_to_quantity,
|
|
95
|
+
buy_rules_min_quantity: applicationMethod.buy_rules_min_quantity,
|
|
96
|
+
target_rules: applicationMethod.target_rules || [],
|
|
97
|
+
buy_rules: applicationMethod.buy_rules || [],
|
|
98
|
+
}
|
|
99
|
+
: null,
|
|
100
|
+
rules: rules.map((rule) => ({
|
|
101
|
+
id: rule.id,
|
|
102
|
+
attribute: rule.attribute,
|
|
103
|
+
operator: rule.operator,
|
|
104
|
+
values: rule.values || [],
|
|
105
|
+
})),
|
|
106
|
+
is_collected: isCollected,
|
|
107
|
+
created_at: promotion.created_at,
|
|
108
|
+
updated_at: promotion.updated_at,
|
|
109
|
+
};
|
|
110
|
+
res.status(200).json({
|
|
111
|
+
promotion: promotionWithFullInfo,
|
|
112
|
+
});
|
|
113
|
+
}
|
|
114
|
+
catch (error) {
|
|
115
|
+
console.error("Error fetching promotion:", error);
|
|
116
|
+
res.status(500).json({
|
|
117
|
+
message: "Failed to fetch promotion",
|
|
118
|
+
error: error instanceof Error ? error.message : String(error),
|
|
119
|
+
});
|
|
120
|
+
}
|
|
121
|
+
};
|
|
122
|
+
exports.GET = GET;
|
|
123
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLG1EQUk2QjtBQUM3QixxREFBb0Q7QUFDcEQseUVBQTZFO0FBRTdFLG1FQUF1RTtBQUd2RTs7Ozs7Ozs7OztHQVVHO0FBQ0ksTUFBTSxHQUFHLEdBQUcsS0FBSyxFQUN0QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLEVBQUUsRUFBRSxHQUFHLEdBQUcsQ0FBQyxNQUFNLENBQUM7SUFFMUIsSUFBSSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ1IsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsMEJBQTBCO1NBQ3BDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxNQUFNLFVBQVUsR0FBRyxHQUFHLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQztJQUM3QyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsZ0NBQWdDO1NBQzFDLENBQUMsQ0FBQztJQUNMLENBQUM7SUFFRCxJQUFJLENBQUM7UUFDSCwwREFBMEQ7UUFDMUQsTUFBTSxrQkFBa0IsR0FDdEIscUJBQVMsQ0FBQyxPQUFPLENBQTJCLGtDQUFtQixDQUFDLENBQUM7UUFDbkUsTUFBTSxDQUFDLGVBQWUsQ0FBQyxHQUFHLE1BQU0sa0JBQWtCLENBQUMsb0JBQW9CLENBQUM7WUFDdEUsWUFBWSxFQUFFLEVBQUU7U0FDakIsQ0FBQyxDQUFDO1FBRUgsSUFBSSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ3JCLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FB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
|
|
@@ -75,8 +75,17 @@ const POST = async (req, res) => {
|
|
|
75
75
|
};
|
|
76
76
|
exports.POST = POST;
|
|
77
77
|
/**
|
|
78
|
-
* GET handler for listing all available promotions for collection
|
|
79
|
-
*
|
|
78
|
+
* GET handler for listing all available promotions for collection with full information
|
|
79
|
+
*
|
|
80
|
+
* Returns promotions with comprehensive details including:
|
|
81
|
+
* - Basic promotion details (id, code, type, is_automatic)
|
|
82
|
+
* - Campaign information (name, description, start/end dates)
|
|
83
|
+
* - Application method details (type, value, allocation, rules)
|
|
84
|
+
* - Promotion rules with attributes, operators, and values
|
|
85
|
+
* - Collection status (is_collected flag)
|
|
86
|
+
* - Timestamps (created_at, updated_at)
|
|
87
|
+
*
|
|
88
|
+
* Only returns promotions that are enabled for collection but not yet collected by the customer
|
|
80
89
|
*/
|
|
81
90
|
const GET = async (req, res) => {
|
|
82
91
|
const customerId = req.auth_context.actor_id;
|
|
@@ -98,30 +107,74 @@ const GET = async (req, res) => {
|
|
|
98
107
|
});
|
|
99
108
|
}
|
|
100
109
|
const promotionIds = usablePromotions.map((up) => up.promotion_id);
|
|
101
|
-
// Get full promotion details
|
|
110
|
+
// Get full promotion details with all relations
|
|
102
111
|
const promotionService = framework_1.container.resolve(utils_1.Modules.PROMOTION);
|
|
103
112
|
const promotions = await promotionService.listPromotions({
|
|
104
113
|
id: promotionIds,
|
|
105
114
|
}, {
|
|
106
|
-
relations: [
|
|
115
|
+
relations: [
|
|
116
|
+
"campaign",
|
|
117
|
+
"application_method",
|
|
118
|
+
"application_method.target_rules",
|
|
119
|
+
"application_method.buy_rules",
|
|
120
|
+
"rules",
|
|
121
|
+
"rules.values",
|
|
122
|
+
],
|
|
107
123
|
});
|
|
108
124
|
// Check which ones the customer has already collected
|
|
109
125
|
const promoCacheService = framework_1.container.resolve(promotion_cache_1.PROMOTION_CACHE_MODULE);
|
|
110
|
-
const
|
|
126
|
+
const promotionsWithFullInfo = await Promise.all(promotions.map(async (promotion) => {
|
|
111
127
|
const cacheKey = `user:${customerId}:promotion:${promotion.id}`;
|
|
112
128
|
const isCollected = await promoCacheService.exists(cacheKey);
|
|
129
|
+
// Extract detailed information
|
|
130
|
+
const applicationMethod = promotion.application_method;
|
|
131
|
+
const rules = promotion.rules || [];
|
|
132
|
+
const campaign = promotion.campaign;
|
|
113
133
|
return {
|
|
114
|
-
|
|
134
|
+
id: promotion.id,
|
|
135
|
+
code: promotion.code,
|
|
136
|
+
type: promotion.type,
|
|
137
|
+
is_automatic: promotion.is_automatic,
|
|
138
|
+
campaign: campaign
|
|
139
|
+
? {
|
|
140
|
+
id: campaign.id,
|
|
141
|
+
name: campaign.name,
|
|
142
|
+
description: campaign.description,
|
|
143
|
+
starts_at: campaign.starts_at,
|
|
144
|
+
ends_at: campaign.ends_at,
|
|
145
|
+
}
|
|
146
|
+
: null,
|
|
147
|
+
application_method: applicationMethod
|
|
148
|
+
? {
|
|
149
|
+
type: applicationMethod.type,
|
|
150
|
+
target_type: applicationMethod.target_type,
|
|
151
|
+
allocation: applicationMethod.allocation,
|
|
152
|
+
value: applicationMethod.value,
|
|
153
|
+
max_quantity: applicationMethod.max_quantity,
|
|
154
|
+
apply_to_quantity: applicationMethod.apply_to_quantity,
|
|
155
|
+
buy_rules_min_quantity: applicationMethod.buy_rules_min_quantity,
|
|
156
|
+
target_rules: applicationMethod.target_rules || [],
|
|
157
|
+
buy_rules: applicationMethod.buy_rules || [],
|
|
158
|
+
}
|
|
159
|
+
: null,
|
|
160
|
+
rules: rules.map((rule) => ({
|
|
161
|
+
id: rule.id,
|
|
162
|
+
attribute: rule.attribute,
|
|
163
|
+
operator: rule.operator,
|
|
164
|
+
values: rule.values || [],
|
|
165
|
+
})),
|
|
115
166
|
is_collected: isCollected,
|
|
167
|
+
created_at: promotion.created_at,
|
|
168
|
+
updated_at: promotion.updated_at,
|
|
116
169
|
};
|
|
117
170
|
}));
|
|
118
171
|
// Filter to only show uncollected promotions (optional - depends on UX requirements)
|
|
119
172
|
// You can remove this filter if you want to show all promotions with collected status
|
|
120
|
-
const availablePromotions =
|
|
173
|
+
const availablePromotions = promotionsWithFullInfo.filter((p) => !p.is_collected);
|
|
121
174
|
res.status(200).json({
|
|
122
175
|
promotions: availablePromotions,
|
|
123
176
|
count: availablePromotions.length,
|
|
124
|
-
total:
|
|
177
|
+
total: promotionsWithFullInfo.length,
|
|
125
178
|
});
|
|
126
179
|
}
|
|
127
180
|
catch (error) {
|
|
@@ -133,4 +186,4 @@ const GET = async (req, res) => {
|
|
|
133
186
|
}
|
|
134
187
|
};
|
|
135
188
|
exports.GET = GET;
|
|
136
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
189
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL3Byb21vdGlvbi1jb2Rlcy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSxtREFLNkI7QUFDN0IscURBQW9EO0FBQ3BELHNFQUEwRTtBQUUxRSxnRUFBb0U7QUFHcEU7OztHQUdHO0FBQ0ksTUFBTSxJQUFJLEdBQUcsS0FBSyxFQUN2QixHQUErQixFQUMvQixHQUFtQixFQUNuQixFQUFFO0lBQ0YsTUFBTSxFQUFFLFlBQVksRUFBRSxHQUFHLEdBQUcsQ0FBQyxJQUFnQyxDQUFDO0lBRTlELElBQUksQ0FBQyxZQUFZLEVBQUUsQ0FBQztRQUNsQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSwwQkFBMEI7U0FDcEMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLEdBQUcsQ0FBQyxZQUFZLENBQUMsUUFBUSxDQUFDO0lBRTdDLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztRQUNoQixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxnQ0FBZ0M7U0FDMUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILDBEQUEwRDtRQUMxRCxNQUFNLGtCQUFrQixHQUN0QixxQkFBUyxDQUFDLE9BQU8sQ0FBMkIsa0NBQW1CLENBQUMsQ0FBQztRQUVuRSxNQUFNLENBQUMsZUFBZSxDQUFDLEdBQUcsTUFBTSxrQkFBa0IsQ0FBQyxvQkFBb0IsQ0FBQztZQUN0RSxZQUFZLEVBQUUsWUFBWTtTQUMzQixDQUFDLENBQUM7UUFFSCxJQUFJLENBQUMsZUFBZSxFQUFFLENBQUM7WUFDckIsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxD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
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Migration20250416034358 = void 0;
|
|
4
|
-
const migrations_1 = require("@mikro-orm/migrations");
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
5
|
class Migration20250416034358 extends migrations_1.Migration {
|
|
6
6
|
async up() {
|
|
7
7
|
this.addSql(`alter table if exists "member_tier" drop constraint if exists "member_tier_min_points_unique";`);
|
|
@@ -16,4 +16,4 @@ class Migration20250416034358 extends migrations_1.Migration {
|
|
|
16
16
|
}
|
|
17
17
|
}
|
|
18
18
|
exports.Migration20250416034358 = Migration20250416034358;
|
|
19
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
19
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA0MTYwMzQzNTguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tZW1iZXJzaGlwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA0MTYwMzQzNTgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGdHQUFnRyxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLE1BQU0sQ0FBQywwRkFBMEYsQ0FBQyxDQUFDO1FBQ3hHLElBQUksQ0FBQyxNQUFNLENBQUMsaVVBQWlVLENBQUMsQ0FBQztRQUMvVSxJQUFJLENBQUMsTUFBTSxDQUFDLG1IQUFtSCxDQUFDLENBQUM7UUFDakksSUFBSSxDQUFDLE1BQU0sQ0FBQywrSEFBK0gsQ0FBQyxDQUFDO1FBQzdJLElBQUksQ0FBQyxNQUFNLENBQUMsaUhBQWlILENBQUMsQ0FBQztJQUNqSSxDQUFDO0lBRVEsS0FBSyxDQUFDLElBQUk7UUFDakIsSUFBSSxDQUFDLE1BQU0sQ0FBQyw2Q0FBNkMsQ0FBQyxDQUFDO0lBQzdELENBQUM7Q0FFRjtBQWZELDBEQWVDIn0=
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Migration20250416231624 = void 0;
|
|
4
|
-
const migrations_1 = require("@mikro-orm/migrations");
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
5
|
class Migration20250416231624 extends migrations_1.Migration {
|
|
6
6
|
async up() {
|
|
7
7
|
this.addSql(`create table if not exists "membership" ("id" text not null, "membership_points" integer not null, "member_tier_id" text not null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "membership_pkey" primary key ("id"));`);
|
|
@@ -12,4 +12,4 @@ class Migration20250416231624 extends migrations_1.Migration {
|
|
|
12
12
|
}
|
|
13
13
|
}
|
|
14
14
|
exports.Migration20250416231624 = Migration20250416231624;
|
|
15
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA0MTYyMzE2MjQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tZW1iZXJzaGlwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA0MTYyMzE2MjQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLHVUQUF1VCxDQUFDLENBQUM7UUFDclUsSUFBSSxDQUFDLE1BQU0sQ0FBQywrR0FBK0csQ0FBQyxDQUFDO0lBQy9ILENBQUM7SUFFUSxLQUFLLENBQUMsSUFBSTtRQUNqQixJQUFJLENBQUMsTUFBTSxDQUFDLDRDQUE0QyxDQUFDLENBQUM7SUFDNUQsQ0FBQztDQUVGO0FBWEQsMERBV0MifQ==
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Migration20250418020235 = void 0;
|
|
4
|
-
const migrations_1 = require("@mikro-orm/migrations");
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
5
|
class Migration20250418020235 extends migrations_1.Migration {
|
|
6
6
|
async up() {
|
|
7
7
|
this.addSql(`alter table if exists "member_tier" add column if not exists "privilege_description" text null;`);
|
|
@@ -11,4 +11,4 @@ class Migration20250418020235 extends migrations_1.Migration {
|
|
|
11
11
|
}
|
|
12
12
|
}
|
|
13
13
|
exports.Migration20250418020235 = Migration20250418020235;
|
|
14
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA0MTgwMjAyMzUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tZW1iZXJzaGlwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA0MTgwMjAyMzUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLGlHQUFpRyxDQUFDLENBQUM7SUFDakgsQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsb0ZBQW9GLENBQUMsQ0FBQztJQUNwRyxDQUFDO0NBRUY7QUFWRCwwREFVQyJ9
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.Migration20250420014232 = void 0;
|
|
4
|
-
const migrations_1 = require("@mikro-orm/migrations");
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
5
|
class Migration20250420014232 extends migrations_1.Migration {
|
|
6
6
|
async up() {
|
|
7
7
|
this.addSql(`alter table if exists "membership_config" drop constraint if exists "membership_config_store_id_unique";`);
|
|
@@ -14,4 +14,4 @@ class Migration20250420014232 extends migrations_1.Migration {
|
|
|
14
14
|
}
|
|
15
15
|
}
|
|
16
16
|
exports.Migration20250420014232 = Migration20250420014232;
|
|
17
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNTA0MjAwMTQyMzIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9tZW1iZXJzaGlwL21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNTA0MjAwMTQyMzIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQXFFO0FBRXJFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFFM0MsS0FBSyxDQUFDLEVBQUU7UUFDZixJQUFJLENBQUMsTUFBTSxDQUFDLDBHQUEwRyxDQUFDLENBQUM7UUFDeEgsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxWUFBcVksQ0FBQyxDQUFDO1FBQ25aLElBQUksQ0FBQyxNQUFNLENBQUMsdUlBQXVJLENBQUMsQ0FBQztRQUNySixJQUFJLENBQUMsTUFBTSxDQUFDLDZIQUE2SCxDQUFDLENBQUM7SUFDN0ksQ0FBQztJQUVRLEtBQUssQ0FBQyxJQUFJO1FBQ2pCLElBQUksQ0FBQyxNQUFNLENBQUMsbURBQW1ELENBQUMsQ0FBQztJQUNuRSxDQUFDO0NBRUY7QUFiRCwwREFhQyJ9
|