customer-registration 0.0.123 → 0.0.125
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 +6 -2
- package/.medusa/server/src/api/store/customers/route.js +137 -4
- package/.medusa/server/src/api/store/customers/validators.js +18 -0
- package/.medusa/server/src/api/store/my-referrals/__tests__/route.test.js +120 -0
- package/.medusa/server/src/api/store/my-referrals/route.js +62 -0
- package/.medusa/server/src/modules/referral-link/index.js +14 -0
- package/.medusa/server/src/modules/referral-link/migrations/Migration20260502100000CreateReferralLinkTable.js +56 -0
- package/.medusa/server/src/modules/referral-link/models/referral-link.js +29 -0
- package/.medusa/server/src/modules/referral-link/service.js +13 -0
- package/package.json +1 -1
|
@@ -7,6 +7,7 @@ const validators_1 = require("@medusajs/medusa/api/store/customers/validators");
|
|
|
7
7
|
const guard_account_deletion_1 = require("./middlewares/guard-account-deletion");
|
|
8
8
|
const validate_customer_registration_1 = require("./middlewares/validate-customer-registration");
|
|
9
9
|
const ip_rate_limit_1 = require("./middlewares/ip-rate-limit");
|
|
10
|
+
const validators_2 = require("./store/customers/validators");
|
|
10
11
|
const storeCustomerMeQueryTransform = (0, framework_1.validateAndTransformQuery)(validators_1.StoreGetCustomerParams, query_config_1.retrieveTransformQueryConfig);
|
|
11
12
|
exports.default = (0, http_1.defineMiddlewares)({
|
|
12
13
|
routes: [
|
|
@@ -21,7 +22,10 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
21
22
|
{
|
|
22
23
|
matcher: "/store/customers",
|
|
23
24
|
method: ["POST"],
|
|
24
|
-
middlewares: [
|
|
25
|
+
middlewares: [
|
|
26
|
+
(0, http_1.validateAndTransformBody)(validators_2.StoreCreateCustomerWithReferral),
|
|
27
|
+
validate_customer_registration_1.validateCustomerRegistration,
|
|
28
|
+
],
|
|
25
29
|
},
|
|
26
30
|
{
|
|
27
31
|
matcher: "/store/customers/me",
|
|
@@ -41,4 +45,4 @@ exports.default = (0, http_1.defineMiddlewares)({
|
|
|
41
45
|
},
|
|
42
46
|
],
|
|
43
47
|
});
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
48
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlkZGxld2FyZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9zcmMvYXBpL21pZGRsZXdhcmVzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbURBQStEO0FBQy9ELG1EQUFzRjtBQUN0RixvRkFBZ0c7QUFDaEcsZ0ZBQXdGO0FBQ3hGLGlGQUEyRTtBQUMzRSxpR0FBMkY7QUFDM0YsK0RBQXlEO0FBQ3pELDZEQUE4RTtBQUU5RSxNQUFNLDZCQUE2QixHQUFHLElBQUEscUNBQXlCLEVBQzdELG1DQUFzQixFQUN0QiwyQ0FBNEIsQ0FDN0IsQ0FBQTtBQUVELGtCQUFlLElBQUEsd0JBQWlCLEVBQUM7SUFDL0IsTUFBTSxFQUFFO1FBQ047WUFDRSxPQUFPLEVBQUUsa0JBQWtCO1lBQzNCLFdBQVcsRUFBRSxDQUFDLDZDQUFvQixDQUFDO1NBQ3BDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUsVUFBVTtZQUNuQixXQUFXLEVBQUUsQ0FBQyw2Q0FBb0IsQ0FBQztTQUNwQztRQUNEO1lBQ0UsT0FBTyxFQUFFLGtCQUFrQjtZQUMzQixNQUFNLEVBQUUsQ0FBQyxNQUFNLENBQUM7WUFDaEIsV0FBVyxFQUFFO2dCQUNYLElBQUEsK0JBQXdCLEVBQUMsNENBQStCLENBQUM7Z0JBQ3pELDZEQUE0QjthQUM3QjtTQUNGO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLE1BQU0sRUFBRSxDQUFDLEtBQUssQ0FBQztZQUNmLFdBQVcsRUFBRSxDQUFDLDZCQUE2QixDQUFDO1NBQzdDO1FBQ0Q7WUFDRSxPQUFPLEVBQUUscUJBQXFCO1lBQzlCLE1BQU0sRUFBRSxDQUFDLE9BQU8sQ0FBQztZQUNqQixXQUFXLEVBQUUsQ0FBQyw2QkFBNkIsQ0FBQztTQUM3QztRQUNEO1lBQ0UsbUVBQW1FO1lBQ25FLE9BQU8sRUFBRSxrREFBa0Q7WUFDM0QsTUFBTSxFQUFFLENBQUMsTUFBTSxDQUFDO1lBQ2hCLFdBQVcsRUFBRSxDQUFDLElBQUEsMkJBQVcsRUFBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsUUFBUSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7U0FDekQ7S0FDRjtDQUNGLENBQUMsQ0FBQSJ9
|
|
@@ -4,6 +4,7 @@ exports.POST = void 0;
|
|
|
4
4
|
const utils_1 = require("@medusajs/framework/utils");
|
|
5
5
|
const core_flows_1 = require("@medusajs/core-flows");
|
|
6
6
|
const config_1 = require("../../../config");
|
|
7
|
+
const referral_link_1 = require("../../../modules/referral-link");
|
|
7
8
|
const is_social_pending_customer_registration_1 = require("./shared/is-social-pending-customer-registration");
|
|
8
9
|
/** Medusa / Knex raw results may use `rows` (node-pg) or `result[0]` batch shape. */
|
|
9
10
|
function firstKnexRow(result) {
|
|
@@ -20,6 +21,120 @@ function firstKnexRow(result) {
|
|
|
20
21
|
}
|
|
21
22
|
return undefined;
|
|
22
23
|
}
|
|
24
|
+
function parseReferralCodeRaw(raw) {
|
|
25
|
+
if (Array.isArray(raw)) {
|
|
26
|
+
const first = raw[0];
|
|
27
|
+
if (typeof first === "string" && first.trim().length > 0) {
|
|
28
|
+
return first.trim();
|
|
29
|
+
}
|
|
30
|
+
return null;
|
|
31
|
+
}
|
|
32
|
+
if (typeof raw === "string" && raw.trim().length > 0) {
|
|
33
|
+
return raw.trim();
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Supports referral code in request body (`referral_code`) primarily.
|
|
39
|
+
* Also accepts `metadata.referral_code` and query as backward-compatible fallbacks.
|
|
40
|
+
*/
|
|
41
|
+
function parseReferralCodeFromRequest(req) {
|
|
42
|
+
const body = req.validatedBody ??
|
|
43
|
+
req.body;
|
|
44
|
+
const bodyMetadataRaw = body &&
|
|
45
|
+
typeof body === "object" &&
|
|
46
|
+
body.metadata &&
|
|
47
|
+
typeof body.metadata === "object" &&
|
|
48
|
+
!Array.isArray(body.metadata)
|
|
49
|
+
? body.metadata.referral_code
|
|
50
|
+
: undefined;
|
|
51
|
+
console.log("[customer-registration] referral_code inputs", {
|
|
52
|
+
validatedBody_present: !!req.validatedBody,
|
|
53
|
+
metadata_referral_code: bodyMetadataRaw,
|
|
54
|
+
});
|
|
55
|
+
if (body && typeof body === "object") {
|
|
56
|
+
const metadata = body.metadata;
|
|
57
|
+
if (metadata && typeof metadata === "object" && !Array.isArray(metadata)) {
|
|
58
|
+
const fromMetadata = parseReferralCodeRaw(metadata.referral_code);
|
|
59
|
+
if (fromMetadata) {
|
|
60
|
+
console.log("[customer-registration] referral_code resolved from metadata", {
|
|
61
|
+
referral_code: fromMetadata,
|
|
62
|
+
});
|
|
63
|
+
return fromMetadata;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
console.log("[customer-registration] referral_code not present in request");
|
|
68
|
+
return null;
|
|
69
|
+
}
|
|
70
|
+
function isRecord(value) {
|
|
71
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
72
|
+
}
|
|
73
|
+
/**
|
|
74
|
+
* `referral_code` is the referrer's Medusa customer id. If it is set in request body,
|
|
75
|
+
* metadata, or query fallback,
|
|
76
|
+
* the customer must exist before we create the new account (avoids orphaned customers).
|
|
77
|
+
*/
|
|
78
|
+
async function assertReferralCodeReferrerExists(req) {
|
|
79
|
+
const referrerId = parseReferralCodeFromRequest(req);
|
|
80
|
+
if (!referrerId) {
|
|
81
|
+
return;
|
|
82
|
+
}
|
|
83
|
+
const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
|
|
84
|
+
const referrerCustomers = await customerService.listCustomers({
|
|
85
|
+
id: [referrerId],
|
|
86
|
+
});
|
|
87
|
+
if (!referrerCustomers.length) {
|
|
88
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.NOT_FOUND, "Invalid referral_code: no customer exists with this id");
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* When `referral_code` is present (request body, metadata, or query fallback),
|
|
93
|
+
* inserts `referral_link` for the newly created customer. Omits DB write when absent.
|
|
94
|
+
* Call {@link assertReferralCodeReferrerExists} before creating the customer when
|
|
95
|
+
* `referral_code` is present.
|
|
96
|
+
*/
|
|
97
|
+
async function maybeCreateReferralLinkFromRequest(req, newCustomerId) {
|
|
98
|
+
const referrerId = parseReferralCodeFromRequest(req);
|
|
99
|
+
if (!referrerId) {
|
|
100
|
+
console.log("[customer-registration] skip referral_link create (no referral_code)", {
|
|
101
|
+
new_customer_id: newCustomerId,
|
|
102
|
+
});
|
|
103
|
+
return;
|
|
104
|
+
}
|
|
105
|
+
if (referrerId === newCustomerId) {
|
|
106
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.INVALID_DATA, "referral_code cannot match the new customer id");
|
|
107
|
+
}
|
|
108
|
+
const referralLinkService = req.scope.resolve(referral_link_1.REFERRAL_LINK_MODULE);
|
|
109
|
+
const parentByLevel = { "1": referrerId };
|
|
110
|
+
const referrerRows = await referralLinkService.listReferralLinks({
|
|
111
|
+
customer_id: referrerId,
|
|
112
|
+
});
|
|
113
|
+
const referrerOwnLink = referrerRows[0];
|
|
114
|
+
const referrerParents = referrerOwnLink?.parent_customers_by_level;
|
|
115
|
+
if (isRecord(referrerParents)) {
|
|
116
|
+
for (const [key, val] of Object.entries(referrerParents)) {
|
|
117
|
+
const n = Number(key);
|
|
118
|
+
if (!Number.isFinite(n) || n < 1) {
|
|
119
|
+
continue;
|
|
120
|
+
}
|
|
121
|
+
const id = typeof val === "string" ? val.trim() : "";
|
|
122
|
+
if (!id) {
|
|
123
|
+
continue;
|
|
124
|
+
}
|
|
125
|
+
parentByLevel[String(n + 1)] = id;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
await referralLinkService.createReferralLinks({
|
|
129
|
+
customer_id: newCustomerId,
|
|
130
|
+
referrer_id: referrerId,
|
|
131
|
+
parent_customers_by_level: parentByLevel,
|
|
132
|
+
});
|
|
133
|
+
console.log("[customer-registration] referral_link created", {
|
|
134
|
+
customer_id: newCustomerId,
|
|
135
|
+
referrer_id: referrerId,
|
|
136
|
+
});
|
|
137
|
+
}
|
|
23
138
|
/**
|
|
24
139
|
* Override of Medusa's built-in POST /store/customers.
|
|
25
140
|
*
|
|
@@ -45,18 +160,34 @@ const POST = async (req, res) => {
|
|
|
45
160
|
const { identifier } = options.registration;
|
|
46
161
|
const authIdentityId = authContext?.auth_identity_id;
|
|
47
162
|
const customerData = (req.body ?? {});
|
|
163
|
+
// Keep referral_code for referral-link logic, but do not pass it to Medusa's
|
|
164
|
+
// customer create/update internals (they reject unknown top-level fields).
|
|
165
|
+
const customerDataForCreate = { ...customerData };
|
|
166
|
+
delete customerDataForCreate.referral_code;
|
|
167
|
+
// Use metadata.referral_code only as transient input; do not persist it on customer.metadata.
|
|
168
|
+
if (customerDataForCreate.metadata &&
|
|
169
|
+
typeof customerDataForCreate.metadata === "object" &&
|
|
170
|
+
!Array.isArray(customerDataForCreate.metadata)) {
|
|
171
|
+
const metadata = {
|
|
172
|
+
...customerDataForCreate.metadata,
|
|
173
|
+
};
|
|
174
|
+
delete metadata.referral_code;
|
|
175
|
+
customerDataForCreate.metadata = metadata;
|
|
176
|
+
}
|
|
48
177
|
const socialPending = await (0, is_social_pending_customer_registration_1.isSocialPendingCustomerRegistration)(req.scope, authIdentityId);
|
|
49
178
|
const phoneNormalized = customerData.phone != null && String(customerData.phone).trim() !== ""
|
|
50
179
|
? String(customerData.phone).trim()
|
|
51
180
|
: "";
|
|
181
|
+
await assertReferralCodeReferrerExists(req);
|
|
52
182
|
if (identifier === "email" || socialPending) {
|
|
53
183
|
const { result } = await (0, core_flows_1.createCustomerAccountWorkflow)(req.scope).run({
|
|
54
184
|
input: {
|
|
55
185
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
56
|
-
customerData:
|
|
186
|
+
customerData: customerDataForCreate,
|
|
57
187
|
authIdentityId: authIdentityId ?? "",
|
|
58
188
|
},
|
|
59
189
|
});
|
|
190
|
+
await maybeCreateReferralLinkFromRequest(req, result.id);
|
|
60
191
|
const customer = await refetchCustomer(result.id, req.scope);
|
|
61
192
|
return res.status(200).json({ customer });
|
|
62
193
|
}
|
|
@@ -73,10 +204,11 @@ const POST = async (req, res) => {
|
|
|
73
204
|
const { result } = await (0, core_flows_1.createCustomerAccountWorkflow)(req.scope).run({
|
|
74
205
|
input: {
|
|
75
206
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
76
|
-
customerData: { ...
|
|
207
|
+
customerData: { ...customerDataForCreate, phone: phoneNormalized },
|
|
77
208
|
authIdentityId: authIdentityId ?? "",
|
|
78
209
|
},
|
|
79
210
|
});
|
|
211
|
+
await maybeCreateReferralLinkFromRequest(req, result.id);
|
|
80
212
|
const customer = await refetchCustomer(result.id, req.scope);
|
|
81
213
|
return res.status(200).json({ customer });
|
|
82
214
|
}
|
|
@@ -84,7 +216,7 @@ const POST = async (req, res) => {
|
|
|
84
216
|
const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
|
|
85
217
|
const [customer] = await customerService.createCustomers([
|
|
86
218
|
{
|
|
87
|
-
...
|
|
219
|
+
...customerDataForCreate,
|
|
88
220
|
phone: phoneNormalized,
|
|
89
221
|
has_account: !!authIdentityId,
|
|
90
222
|
},
|
|
@@ -97,6 +229,7 @@ const POST = async (req, res) => {
|
|
|
97
229
|
app_metadata: { customer_id: customer.id },
|
|
98
230
|
});
|
|
99
231
|
}
|
|
232
|
+
await maybeCreateReferralLinkFromRequest(req, customer.id);
|
|
100
233
|
const fullCustomer = await refetchCustomer(customer.id, req.scope);
|
|
101
234
|
return res.status(200).json({ customer: fullCustomer });
|
|
102
235
|
};
|
|
@@ -121,4 +254,4 @@ async function refetchCustomer(customerId, scope) {
|
|
|
121
254
|
const customers = await remoteQuery(queryObject);
|
|
122
255
|
return customers[0];
|
|
123
256
|
}
|
|
124
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFLa0M7QUFDbEMscURBQW9FO0FBQ3BFLDRDQUd3QjtBQUN4Qiw4R0FBc0c7QUFFdEcscUZBQXFGO0FBQ3JGLFNBQVMsWUFBWSxDQUNuQixNQUFtQztJQUVuQyxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDakMsSUFBSSxRQUFRLElBQUksT0FBTyxRQUFRLEtBQUssUUFBUSxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO1FBQ3pFLE9BQU8sUUFBUSxDQUFBO0lBQ2pCLENBQUM7SUFDRCxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUE7SUFDdkIsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsTUFBTSxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3RCLElBQUksS0FBSyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNoRSxPQUFPLEtBQVUsQ0FBQTtRQUNuQixDQUFDO0lBQ0gsQ0FBQztJQUNELE9BQU8sU0FBUyxDQUFBO0FBQ2xCLENBQUM7QUFFRDs7Ozs7Ozs7Ozs7Ozs7R0FjRztBQUNJLE1BQU0sSUFBSSxHQUFHLEtBQUssRUFBRSxHQUFrQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNwRSxNQUFNLFdBQVcsR0FDZixHQUdELENBQUMsWUFBWSxDQUFBO0lBRWQsSUFBSSxXQUFXLEVBQUUsUUFBUSxFQUFFLENBQUM7UUFDMUIsTUFBTSxJQUFJLG1CQUFXLENB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
|
|
257
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL2N1c3RvbWVycy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFLQSxxREFLa0M7QUFDbEMscURBQW9FO0FBQ3BFLDRDQUd3QjtBQUN4QixrRUFBcUU7QUFFckUsOEdBQXNHO0FBRXRHLHFGQUFxRjtBQUNyRixTQUFTLFlBQVksQ0FDbkIsTUFBbUM7SUFFbkMsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ2pDLElBQUksUUFBUSxJQUFJLE9BQU8sUUFBUSxLQUFLLFFBQVEsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztRQUN6RSxPQUFPLFFBQVEsQ0FBQTtJQUNqQixDQUFDO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ3ZCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN0QixJQUFJLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEUsT0FBTyxLQUFVLENBQUE7UUFDbkIsQ0FBQztJQUNILENBQUM7SUFDRCxPQUFPLFNBQVMsQ0FBQTtBQUNsQixDQUFDO0FBRUQsU0FBUyxvQkFBb0IsQ0FBQyxHQUFZO0lBQ3hDLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ3ZCLE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUNwQixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsSUFBSSxLQUFLLENB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
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.StoreCreateCustomerWithReferral = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Custom body validator for POST /store/customers that extends Medusa's
|
|
7
|
+
* default create-customer shape with top-level `referral_code`.
|
|
8
|
+
*/
|
|
9
|
+
exports.StoreCreateCustomerWithReferral = zod_1.z.object({
|
|
10
|
+
email: zod_1.z.string().email().nullish(),
|
|
11
|
+
company_name: zod_1.z.string().nullish(),
|
|
12
|
+
first_name: zod_1.z.string().nullish(),
|
|
13
|
+
last_name: zod_1.z.string().nullish(),
|
|
14
|
+
phone: zod_1.z.string().nullish(),
|
|
15
|
+
referral_code: zod_1.z.string().nullish(),
|
|
16
|
+
metadata: zod_1.z.record(zod_1.z.unknown()).nullish(),
|
|
17
|
+
});
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidmFsaWRhdG9ycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvY3VzdG9tZXJzL3ZhbGlkYXRvcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkJBQXVCO0FBRXZCOzs7R0FHRztBQUNVLFFBQUEsK0JBQStCLEdBQUcsT0FBQyxDQUFDLE1BQU0sQ0FBQztJQUN0RCxLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEtBQUssRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUNuQyxZQUFZLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUNsQyxVQUFVLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUNoQyxTQUFTLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUMvQixLQUFLLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUMzQixhQUFhLEVBQUUsT0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLE9BQU8sRUFBRTtJQUNuQyxRQUFRLEVBQUUsT0FBQyxDQUFDLE1BQU0sQ0FBQyxPQUFDLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQyxPQUFPLEVBQUU7Q0FDMUMsQ0FBQyxDQUFBIn0=
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const vitest_1 = require("vitest");
|
|
5
|
+
const referral_link_1 = require("../../../../modules/referral-link");
|
|
6
|
+
const route_1 = require("../route");
|
|
7
|
+
(0, vitest_1.describe)("GET /store/my-referrals table-driven tests", () => {
|
|
8
|
+
const cases = [
|
|
9
|
+
{
|
|
10
|
+
title: "returns empty children when no referral links",
|
|
11
|
+
auth_context: { actor_id: "cus_parent", actor_type: "customer" },
|
|
12
|
+
links: [],
|
|
13
|
+
customers: [],
|
|
14
|
+
expectListCustomersCalls: 0,
|
|
15
|
+
expectedStatus: 200,
|
|
16
|
+
expectedJson: { children: [] },
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
title: "returns children merged with customer rows",
|
|
20
|
+
auth_context: { actor_id: "cus_parent", actor_type: "customer" },
|
|
21
|
+
links: [
|
|
22
|
+
{
|
|
23
|
+
id: "rl_1",
|
|
24
|
+
customer_id: "cus_child",
|
|
25
|
+
referrer_id: "cus_parent",
|
|
26
|
+
parent_customers_by_level: { "1": "cus_parent" },
|
|
27
|
+
created_at: new Date("2025-06-01T12:00:00.000Z"),
|
|
28
|
+
},
|
|
29
|
+
],
|
|
30
|
+
customers: [
|
|
31
|
+
{
|
|
32
|
+
id: "cus_child",
|
|
33
|
+
email: "child@example.com",
|
|
34
|
+
first_name: "C",
|
|
35
|
+
last_name: "One",
|
|
36
|
+
phone: "+1000",
|
|
37
|
+
created_at: "2025-06-01T00:00:00.000Z",
|
|
38
|
+
},
|
|
39
|
+
],
|
|
40
|
+
expectListCustomersCalls: 1,
|
|
41
|
+
expectedStatus: 200,
|
|
42
|
+
expectedJson: {
|
|
43
|
+
children: [
|
|
44
|
+
{
|
|
45
|
+
referral_link_id: "rl_1",
|
|
46
|
+
referred_at: "2025-06-01T12:00:00.000Z",
|
|
47
|
+
parent_customers_by_level: { "1": "cus_parent" },
|
|
48
|
+
customer: {
|
|
49
|
+
id: "cus_child",
|
|
50
|
+
email: "child@example.com",
|
|
51
|
+
first_name: "C",
|
|
52
|
+
last_name: "One",
|
|
53
|
+
phone: "+1000",
|
|
54
|
+
created_at: "2025-06-01T00:00:00.000Z",
|
|
55
|
+
},
|
|
56
|
+
},
|
|
57
|
+
],
|
|
58
|
+
},
|
|
59
|
+
},
|
|
60
|
+
];
|
|
61
|
+
vitest_1.test.each(cases)("$title", async ({ auth_context, links, customers, expectListCustomersCalls, expectedStatus, expectedJson, }) => {
|
|
62
|
+
const listReferralLinks = vitest_1.vi.fn().mockResolvedValue(links);
|
|
63
|
+
const listCustomers = vitest_1.vi.fn().mockResolvedValue(customers);
|
|
64
|
+
const req = {
|
|
65
|
+
auth_context,
|
|
66
|
+
scope: {
|
|
67
|
+
resolve: (token) => {
|
|
68
|
+
if (token === referral_link_1.REFERRAL_LINK_MODULE) {
|
|
69
|
+
return { listReferralLinks };
|
|
70
|
+
}
|
|
71
|
+
if (token === utils_1.Modules.CUSTOMER) {
|
|
72
|
+
return { listCustomers };
|
|
73
|
+
}
|
|
74
|
+
return undefined;
|
|
75
|
+
},
|
|
76
|
+
},
|
|
77
|
+
};
|
|
78
|
+
const status = vitest_1.vi.fn().mockReturnThis();
|
|
79
|
+
const json = vitest_1.vi.fn();
|
|
80
|
+
const res = { status, json };
|
|
81
|
+
await (0, route_1.GET)(req, res);
|
|
82
|
+
(0, vitest_1.expect)(status).toHaveBeenCalledWith(expectedStatus);
|
|
83
|
+
(0, vitest_1.expect)(json).toHaveBeenCalledWith(expectedJson);
|
|
84
|
+
(0, vitest_1.expect)(listReferralLinks).toHaveBeenCalledWith({
|
|
85
|
+
referrer_id: auth_context?.actor_id,
|
|
86
|
+
});
|
|
87
|
+
(0, vitest_1.expect)(listCustomers).toHaveBeenCalledTimes(expectListCustomersCalls);
|
|
88
|
+
if (expectListCustomersCalls > 0) {
|
|
89
|
+
(0, vitest_1.expect)(listCustomers).toHaveBeenCalledWith({ id: ["cus_child"] });
|
|
90
|
+
}
|
|
91
|
+
});
|
|
92
|
+
const authErrorCases = [
|
|
93
|
+
{
|
|
94
|
+
title: "rejects when actor_type is not customer",
|
|
95
|
+
auth_context: { actor_id: "usr_admin", actor_type: "user" },
|
|
96
|
+
wantMessage: "Unauthorized",
|
|
97
|
+
},
|
|
98
|
+
{
|
|
99
|
+
title: "rejects when actor_id is missing",
|
|
100
|
+
auth_context: { actor_type: "customer" },
|
|
101
|
+
wantMessage: "Unauthorized",
|
|
102
|
+
},
|
|
103
|
+
];
|
|
104
|
+
vitest_1.test.each(authErrorCases)("$title", async ({ auth_context, wantMessage }) => {
|
|
105
|
+
const listReferralLinks = vitest_1.vi.fn();
|
|
106
|
+
const req = {
|
|
107
|
+
auth_context,
|
|
108
|
+
scope: {
|
|
109
|
+
resolve: () => ({ listReferralLinks }),
|
|
110
|
+
},
|
|
111
|
+
};
|
|
112
|
+
const res = {};
|
|
113
|
+
await (0, vitest_1.expect)((0, route_1.GET)(req, res)).rejects.toMatchObject({
|
|
114
|
+
type: utils_1.MedusaError.Types.UNAUTHORIZED,
|
|
115
|
+
message: wantMessage,
|
|
116
|
+
});
|
|
117
|
+
(0, vitest_1.expect)(listReferralLinks).not.toHaveBeenCalled();
|
|
118
|
+
});
|
|
119
|
+
});
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUudGVzdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3NyYy9hcGkvc3RvcmUvbXktcmVmZXJyYWxzL19fdGVzdHNfXy9yb3V0ZS50ZXN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQ0EscURBQWdFO0FBQ2hFLG1DQUFtRDtBQUNuRCxxRUFBd0U7QUFDeEUsb0NBQThCO0FBMkI5QixJQUFBLGlCQUFRLEVBQUMsNENBQTRDLEVBQUUsR0FBRyxFQUFFO0lBQzFELE1BQU0sS0FBSyxHQUEwQjtRQUNuQztZQUNFLEtBQUssRUFBRSwrQ0FBK0M7WUFDdEQsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRSxFQUFFO1lBQ1QsU0FBUyxFQUFFLEVBQUU7WUFDYix3QkFBd0IsRUFBRSxDQUFDO1lBQzNCLGNBQWMsRUFBRSxHQUFHO1lBQ25CLFlBQVksRUFBRSxFQUFFLFFBQVEsRUFBRSxFQUFFLEVBQUU7U0FDL0I7UUFDRDtZQUNFLEtBQUssRUFBRSw0Q0FBNEM7WUFDbkQsWUFBWSxFQUFFLEVBQUUsUUFBUSxFQUFFLFlBQVksRUFBRSxVQUFVLEVBQUUsVUFBVSxFQUFFO1lBQ2hFLEtBQUssRUFBRTtnQkFDTDtvQkFDRSxFQUFFLEVBQUUsTUFBTTtvQkFDVixXQUFXLEVBQUUsV0FBVztvQkFDeEIsV0FBVyxFQUFFLFlBQVk7b0JBQ3pCLHlCQUF5QixFQUFFLEVBQUUsR0FBRyxFQUFFLFlBQVksRUFBRTtvQkFDaEQsVUFBVSxFQUFFLElBQUksSUFBSSxDQUFDLDBCQUEwQixDQUFDO2lCQUNqRDthQUNGO1lBQ0QsU0FBUyxFQUFFO2dCQUNUO29CQUNFLEVBQUUsRUFBRSxXQUFXO29CQUNmLEtBQUssRUFBRSxtQkFBbUI7b0JBQzFCLFVBQVUsRUFBRSxHQUFHO29CQUNmLFNBQVMsRUFBRSxLQUFLO29CQUNoQixLQUFLLEVBQUUs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
|
|
@@ -0,0 +1,62 @@
|
|
|
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 referral_link_1 = require("../../../modules/referral-link");
|
|
6
|
+
/**
|
|
7
|
+
* GET /store/my-referrals
|
|
8
|
+
*
|
|
9
|
+
* Returns every customer who signed up with this customer as `referrer_id`
|
|
10
|
+
* (`referral_link` rows for the authenticated customer).
|
|
11
|
+
*/
|
|
12
|
+
const GET = async (req, res) => {
|
|
13
|
+
const authContext = req.auth_context;
|
|
14
|
+
const actorId = authContext?.actor_id;
|
|
15
|
+
if (!actorId || authContext?.actor_type !== "customer") {
|
|
16
|
+
throw new utils_1.MedusaError(utils_1.MedusaError.Types.UNAUTHORIZED, "Unauthorized");
|
|
17
|
+
}
|
|
18
|
+
const referralLinkService = req.scope.resolve(referral_link_1.REFERRAL_LINK_MODULE);
|
|
19
|
+
const links = await referralLinkService.listReferralLinks({
|
|
20
|
+
referrer_id: actorId,
|
|
21
|
+
});
|
|
22
|
+
const childIds = [
|
|
23
|
+
...new Set(links
|
|
24
|
+
.map((row) => row.customer_id)
|
|
25
|
+
.filter((id) => typeof id === "string" && id.length > 0)),
|
|
26
|
+
];
|
|
27
|
+
const customerService = req.scope.resolve(utils_1.Modules.CUSTOMER);
|
|
28
|
+
const customers = childIds.length > 0
|
|
29
|
+
? await customerService.listCustomers({ id: childIds })
|
|
30
|
+
: [];
|
|
31
|
+
const byId = new Map(customers.map((c) => [c.id, c]));
|
|
32
|
+
const children = links.map((link) => {
|
|
33
|
+
const c = byId.get(link.customer_id);
|
|
34
|
+
const parentLevel = link.parent_customers_by_level;
|
|
35
|
+
const parentParsed = parentLevel !== null &&
|
|
36
|
+
parentLevel !== undefined &&
|
|
37
|
+
typeof parentLevel === "object" &&
|
|
38
|
+
!Array.isArray(parentLevel)
|
|
39
|
+
? parentLevel
|
|
40
|
+
: null;
|
|
41
|
+
return {
|
|
42
|
+
referral_link_id: link.id,
|
|
43
|
+
referred_at: link.created_at != null
|
|
44
|
+
? typeof link.created_at === "string"
|
|
45
|
+
? link.created_at
|
|
46
|
+
: link.created_at.toISOString()
|
|
47
|
+
: null,
|
|
48
|
+
parent_customers_by_level: parentParsed,
|
|
49
|
+
customer: {
|
|
50
|
+
id: link.customer_id,
|
|
51
|
+
email: c?.email ?? null,
|
|
52
|
+
first_name: c?.first_name ?? null,
|
|
53
|
+
last_name: c?.last_name ?? null,
|
|
54
|
+
phone: c?.phone ?? null,
|
|
55
|
+
created_at: c?.created_at ?? null,
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
});
|
|
59
|
+
res.status(200).json({ children });
|
|
60
|
+
};
|
|
61
|
+
exports.GET = GET;
|
|
62
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL3N0b3JlL215LXJlZmVycmFscy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFFQSxxREFBZ0U7QUFDaEUsa0VBQXFFO0FBc0JyRTs7Ozs7R0FLRztBQUNJLE1BQU0sR0FBRyxHQUFHLEtBQUssRUFBRSxHQUErQixFQUFFLEdBQW1CLEVBQUUsRUFBRTtJQUNoRixNQUFNLFdBQVcsR0FBSSxHQUFzQyxDQUFDLFlBQVksQ0FBQTtJQUN4RSxNQUFNLE9BQU8sR0FBRyxXQUFXLEVBQUUsUUFBUSxDQUFBO0lBQ3JDLElBQUksQ0FBQyxPQUFPLElBQUksV0FBVyxFQUFFLFVBQVUsS0FBSyxVQUFVLEVBQUUsQ0FBQztRQUN2RCxNQUFNLElBQUksbUJBQVcsQ0FBQyxtQkFBVyxDQUFDLEtBQUssQ0FBQyxZQUFZLEVBQUUsY0FBYyxDQUFDLENBQUE7SUFDdkUsQ0FBQztJQUVELE1BQU0sbUJBQW1CLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQzNDLG9DQUFvQixDQUNyQixDQUFBO0lBQ0QsTUFBTSxLQUFLLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxpQkFBaUIsQ0FBQztRQUN4RCxXQUFXLEVBQUUsT0FBTztLQUNyQixDQUFDLENBQUE7SUFFRixNQUFNLFFBQVEsR0FBRztRQUNmLEdBQUcsSUFBSSxHQUFHLENBQ1IsS0FBSzthQUNGLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQzthQUM3QixNQUFNLENBQUMsQ0FBQyxFQUFFLEVBQWdCLEVBQUUsQ0FBQyxPQUFPLEVBQUUsS0FBSyxRQUFRLElBQUksRUFBRSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FDekU7S0FDRixDQUFBO0lBRUQsTUFBTSxlQUFlLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQXlCLGVBQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQTtJQUNuRixNQUFNLFNBQVMsR0FDYixRQUFRLENBQUMsTUFBTSxHQUFHLENBQUM7UUFDakIsQ0FBQyxDQUFDLE1BQU0sZUFBZSxDQUFDLGFBQWEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQztRQUN2RCxDQUFDLENBQUMsRUFBRSxDQUFBO0lBRVIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtJQUVyRCxNQUFNLFFBQVEsR0FBNEIsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQzNELE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFBO1FBQ3BDLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyx5QkFBeUIsQ0FBQTtRQUNsRCxNQUFNLFlBQVksR0FDaEIsV0FBVyxLQUFLLElBQUk7WUFDcEIsV0FBVyxLQUFLLFNBQVM7WUFDekIsT0FBTyxXQUFXLEtBQUssUUFBUTtZQUMvQixDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDO1lBQ3pCLENBQUMsQ0FBRSxXQUF1QztZQUMxQyxDQUFDLENBQUMsSUFBSSxDQUFBO1FBRVYsT0FBTztZQUNMLGdCQUFnQixFQUFFLElBQUksQ0FBQyxFQUFFO1lBQ3pCLFdBQVcsRUFDVCxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUk7Z0JBQ3JCLENBQUMsQ0FBQyxPQUFPLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUTtvQkFDbkMsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVO29CQUNqQixDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxXQUFXLEVBQUU7Z0JBQ2pDLENBQUMsQ0FBQyxJQUFJO1lBQ1YseUJBQXlCLEVBQUUsWUFBWTtZQUN2QyxRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxFQUFFLElBQUksQ0FBQyxXQUFXO2dCQUNwQixLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJO2dCQUN2QixVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsSUFBSSxJQUFJO2dCQUNqQyxTQUFTLEVBQUUsQ0FBQyxFQUFFLFNBQVMsSUFBSSxJQUFJO2dCQUMvQixLQUFLLEVBQUUsQ0FBQyxFQUFFLEtBQUssSUFBSSxJQUFJO2dCQUN2QixVQUFVLEVBQUUsQ0FBQyxFQUFFLFVBQVUsSUFBSSxJQUFJO2FBQ2xDO1NBQ0YsQ0FBQTtJQUNILENBQUMsQ0FBQyxDQUFBO0lBRUYsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0FBQ3BDLENBQUMsQ0FBQTtBQTlEWSxRQUFBLEdBQUcsT0E4RGYifQ==
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
3
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
|
+
};
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
exports.ReferralLinkModuleService = exports.REFERRAL_LINK_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.ReferralLinkModuleService = service_1.default;
|
|
10
|
+
exports.REFERRAL_LINK_MODULE = "referral_link";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.REFERRAL_LINK_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9yZWZlcnJhbC1saW5rL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBaUQ7QUFReEMsb0NBUkYsaUJBQXlCLENBUUU7QUFOckIsUUFBQSxvQkFBb0IsR0FBRyxlQUFlLENBQUE7QUFFbkQsa0JBQWUsSUFBQSxjQUFNLEVBQUMsNEJBQW9CLEVBQUU7SUFDMUMsT0FBTyxFQUFFLGlCQUF5QjtDQUNuQyxDQUFDLENBQUEifQ==
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20260502100000CreateReferralLinkTable = void 0;
|
|
4
|
+
const migrations_1 = require("@mikro-orm/migrations");
|
|
5
|
+
/**
|
|
6
|
+
* Referral link for a referred customer (child) to their upline.
|
|
7
|
+
* Uses IF NOT EXISTS so the same table can be shared if both `customer-registration`
|
|
8
|
+
* and `medusa-referral-affiliate` register a `referral_link` module (whichever
|
|
9
|
+
* migration runs first creates the table; the other no-ops).
|
|
10
|
+
*/
|
|
11
|
+
class Migration20260502100000CreateReferralLinkTable extends migrations_1.Migration {
|
|
12
|
+
async up() {
|
|
13
|
+
this.addSql(`
|
|
14
|
+
CREATE TABLE IF NOT EXISTS "referral_link" (
|
|
15
|
+
"id" TEXT NOT NULL,
|
|
16
|
+
"customer_id" TEXT NOT NULL,
|
|
17
|
+
"referrer_id" TEXT NOT NULL,
|
|
18
|
+
"parent_customers_by_level" JSONB NOT NULL DEFAULT '{}'::jsonb,
|
|
19
|
+
"created_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
|
20
|
+
"updated_at" TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT now(),
|
|
21
|
+
"deleted_at" TIMESTAMP WITH TIME ZONE NULL,
|
|
22
|
+
CONSTRAINT "referral_link_pkey" PRIMARY KEY ("id"),
|
|
23
|
+
CONSTRAINT "referral_link_no_self" CHECK ("customer_id" <> "referrer_id"),
|
|
24
|
+
CONSTRAINT "referral_link_ids_nonempty" CHECK (
|
|
25
|
+
length(trim("customer_id")) > 0 AND length(trim("referrer_id")) > 0
|
|
26
|
+
),
|
|
27
|
+
CONSTRAINT "referral_link_parent_customers_by_level_is_object_chk" CHECK (
|
|
28
|
+
jsonb_typeof("parent_customers_by_level") = 'object'
|
|
29
|
+
)
|
|
30
|
+
);
|
|
31
|
+
`);
|
|
32
|
+
this.addSql(`
|
|
33
|
+
CREATE UNIQUE INDEX IF NOT EXISTS "IDX_referral_link_customer_unique"
|
|
34
|
+
ON "referral_link" ("customer_id")
|
|
35
|
+
WHERE deleted_at IS NULL;
|
|
36
|
+
`);
|
|
37
|
+
this.addSql(`
|
|
38
|
+
CREATE INDEX IF NOT EXISTS "IDX_referral_link_referrer_id"
|
|
39
|
+
ON "referral_link" ("referrer_id")
|
|
40
|
+
WHERE deleted_at IS NULL;
|
|
41
|
+
`);
|
|
42
|
+
this.addSql(`
|
|
43
|
+
CREATE INDEX IF NOT EXISTS "IDX_referral_link_deleted_at"
|
|
44
|
+
ON "referral_link" ("deleted_at")
|
|
45
|
+
WHERE deleted_at IS NULL;
|
|
46
|
+
`);
|
|
47
|
+
}
|
|
48
|
+
async down() {
|
|
49
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_referral_link_deleted_at";`);
|
|
50
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_referral_link_referrer_id";`);
|
|
51
|
+
this.addSql(`DROP INDEX IF EXISTS "IDX_referral_link_customer_unique";`);
|
|
52
|
+
this.addSql(`DROP TABLE IF EXISTS "referral_link";`);
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
exports.Migration20260502100000CreateReferralLinkTable = Migration20260502100000CreateReferralLinkTable;
|
|
56
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjA1MDIxMDAwMDBDcmVhdGVSZWZlcnJhbExpbmtUYWJsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3JlZmVycmFsLWxpbmsvbWlncmF0aW9ucy9NaWdyYXRpb24yMDI2MDUwMjEwMDAwMENyZWF0ZVJlZmVycmFsTGlua1RhYmxlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNEQUFpRDtBQUVqRDs7Ozs7R0FLRztBQUNILE1BQWEsOENBQStDLFNBQVEsc0JBQVM7SUFDM0UsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDOzs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FrQlgsQ0FBQyxDQUFBO1FBQ0YsSUFBSSxDQUFDLE1BQU0sQ0FBQzs7OztLQUlYLENBQUMsQ0FBQTtRQUNGLElBQUksQ0FBQyxNQUFNLENBQUM7Ozs7S0FJWCxDQUFDLENBQUE7UUFDRixJQUFJLENBQUMsTUFBTSxDQUFDOzs7O0tBSVgsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxzREFBc0QsQ0FBQyxDQUFBO1FBQ25FLElBQUksQ0FBQyxNQUFNLENBQUMsdURBQXVELENBQUMsQ0FBQTtRQUNwRSxJQUFJLENBQUMsTUFBTSxDQUFDLDJEQUEyRCxDQUFDLENBQUE7UUFDeEUsSUFBSSxDQUFDLE1BQU0sQ0FBQyx1Q0FBdUMsQ0FBQyxDQUFBO0lBQ3RELENBQUM7Q0FDRjtBQTVDRCx3R0E0Q0MifQ==
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.ReferralLink = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.ReferralLink = utils_1.model
|
|
6
|
+
.define("referral_link", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
customer_id: utils_1.model.text().searchable(),
|
|
9
|
+
referrer_id: utils_1.model.text().searchable(),
|
|
10
|
+
/**
|
|
11
|
+
* Upline keyed by referral distance: `"1"` = direct parent (same as `referrer_id`),
|
|
12
|
+
* `"2"` = next upline, etc. Example: `{ "1": "cus_123", "2": "cus_456", "3": "cus_789" }`.
|
|
13
|
+
*/
|
|
14
|
+
parent_customers_by_level: utils_1.model.json(),
|
|
15
|
+
})
|
|
16
|
+
.indexes([
|
|
17
|
+
{
|
|
18
|
+
name: "IDX_referral_link_customer_unique",
|
|
19
|
+
on: ["customer_id"],
|
|
20
|
+
unique: true,
|
|
21
|
+
where: "deleted_at IS NULL",
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
name: "IDX_referral_link_referrer_id",
|
|
25
|
+
on: ["referrer_id"],
|
|
26
|
+
where: "deleted_at IS NULL",
|
|
27
|
+
},
|
|
28
|
+
]);
|
|
29
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmZXJyYWwtbGluay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3JlZmVycmFsLWxpbmsvbW9kZWxzL3JlZmVycmFsLWxpbmsudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsWUFBWSxHQUFHLGFBQUs7S0FDOUIsTUFBTSxDQUFDLGVBQWUsRUFBRTtJQUN2QixFQUFFLEVBQUUsYUFBSyxDQUFDLEVBQUUsRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUMzQixXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUN0QyxXQUFXLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFVBQVUsRUFBRTtJQUN0Qzs7O09BR0c7SUFDSCx5QkFBeUIsRUFBRSxhQUFLLENBQUMsSUFBSSxFQUFFO0NBQ3hDLENBQUM7S0FDRCxPQUFPLENBQUM7SUFDUDtRQUNFLElBQUksRUFBRSxtQ0FBbUM7UUFDekMsRUFBRSxFQUFFLENBQUMsYUFBYSxDQUFDO1FBQ25CLE1BQU0sRUFBRSxJQUFJO1FBQ1osS0FBSyxFQUFFLG9CQUFvQjtLQUM1QjtJQUNEO1FBQ0UsSUFBSSxFQUFFLCtCQUErQjtRQUNyQyxFQUFFLEVBQUUsQ0FBQyxhQUFhLENBQUM7UUFDbkIsS0FBSyxFQUFFLG9CQUFvQjtLQUM1QjtDQUNGLENBQUMsQ0FBQSJ9
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
4
|
+
const referral_link_1 = require("./models/referral-link");
|
|
5
|
+
class ReferralLinkModuleService extends (0, utils_1.MedusaService)({
|
|
6
|
+
ReferralLink: referral_link_1.ReferralLink,
|
|
7
|
+
}) {
|
|
8
|
+
constructor(container, moduleOptions, moduleDeclaration) {
|
|
9
|
+
super(container, moduleOptions, moduleDeclaration);
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
exports.default = ReferralLinkModuleService;
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3JlZmVycmFsLWxpbmsvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUFBLHFEQUF5RDtBQUV6RCwwREFBcUQ7QUFNckQsTUFBcUIseUJBQTBCLFNBQVEsSUFBQSxxQkFBYSxFQUFDO0lBQ25FLFlBQVksRUFBWiw0QkFBWTtDQUNiLENBQUM7SUFDQSxZQUNFLFNBQStCLEVBQy9CLGFBQXVDLEVBQ3ZDLGlCQUF5RDtRQUV6RCxLQUFLLENBQUMsU0FBUyxFQUFFLGFBQWEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFBO0lBQ3BELENBQUM7Q0FDRjtBQVZELDRDQVVDIn0=
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "customer-registration",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.125",
|
|
4
4
|
"description": "Medusa plugin that overrides store customer registration, enforces email/phone verification flags, and provides OTP management module.",
|
|
5
5
|
"author": "Medusa (https://medusajs.com)",
|
|
6
6
|
"license": "MIT",
|