@hszrdm/core 1.0.3 → 1.2.0
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/admin/index.js +4375 -2368
- package/.medusa/server/src/admin/index.mjs +4376 -2369
- package/.medusa/server/src/api/admin/ai-translations/apply/route.d.ts +11 -0
- package/.medusa/server/src/api/admin/ai-translations/apply/route.js +102 -0
- package/.medusa/server/src/api/admin/ai-translations/preview/route.d.ts +10 -0
- package/.medusa/server/src/api/admin/ai-translations/preview/route.js +141 -0
- package/.medusa/server/src/api/admin/ai-translations/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/ai-translations/route.js +19 -0
- package/.medusa/server/src/api/admin/cms/entries/[id]/route.d.ts +6 -0
- package/.medusa/server/src/api/admin/cms/entries/[id]/route.js +78 -0
- package/.medusa/server/src/api/admin/cms/entries/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/cms/entries/route.js +77 -0
- package/.medusa/server/src/api/admin/cms/taxonomy/[id]/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/cms/taxonomy/[id]/route.js +50 -0
- package/.medusa/server/src/api/admin/cms/taxonomy/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/cms/taxonomy/route.js +60 -0
- package/.medusa/server/src/api/admin/core/status/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core/status/route.js +11 -0
- package/.medusa/server/src/api/admin/featured-products/[id]/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/featured-products/[id]/route.js +54 -0
- package/.medusa/server/src/api/admin/leads/[id]/route.d.ts +9 -0
- package/.medusa/server/src/api/admin/leads/[id]/route.js +64 -0
- package/.medusa/server/src/api/admin/leads/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/leads/route.js +26 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/export/route.js +74 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/newsletter/subscribers/route.js +57 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.d.ts +7 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +40 -0
- package/.medusa/server/src/api/admin/product-reviews/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/product-reviews/route.js +31 -0
- package/.medusa/server/src/api/admin/quote-requests/[id]/draft-order/route.d.ts +8 -0
- package/.medusa/server/src/api/admin/quote-requests/[id]/draft-order/route.js +160 -0
- package/.medusa/server/src/api/admin/quote-requests/[id]/order/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/quote-requests/[id]/order/route.js +54 -0
- package/.medusa/server/src/api/admin/quote-requests/[id]/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/quote-requests/[id]/route.js +80 -0
- package/.medusa/server/src/api/admin/quote-requests/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/quote-requests/route.js +19 -0
- package/.medusa/server/src/api/middlewares.js +19 -6
- package/.medusa/server/src/api/store/account/wishlist/[productId]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/account/wishlist/[productId]/route.js +18 -0
- package/.medusa/server/src/api/store/account/wishlist/merge/route.d.ts +6 -0
- package/.medusa/server/src/api/store/account/wishlist/merge/route.js +51 -0
- package/.medusa/server/src/api/store/account/wishlist/route.d.ts +7 -0
- package/.medusa/server/src/api/store/account/wishlist/route.js +76 -0
- package/.medusa/server/src/api/store/cms/config/route.d.ts +2 -0
- package/.medusa/server/src/api/store/cms/config/route.js +17 -0
- package/.medusa/server/src/api/store/cms/entries/[slug]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/cms/entries/[slug]/route.js +62 -0
- package/.medusa/server/src/api/store/cms/entries/route.d.ts +2 -0
- package/.medusa/server/src/api/store/cms/entries/route.js +87 -0
- package/.medusa/server/src/api/store/cms/taxonomy/route.d.ts +2 -0
- package/.medusa/server/src/api/store/cms/taxonomy/route.js +44 -0
- package/.medusa/server/src/api/store/core/pricing/variants/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/core/pricing/variants/[id]/route.js +152 -0
- package/.medusa/server/src/api/store/featured-products/route.d.ts +2 -0
- package/.medusa/server/src/api/store/featured-products/route.js +38 -0
- package/.medusa/server/src/api/store/leads/config/route.d.ts +2 -0
- package/.medusa/server/src/api/store/leads/config/route.js +21 -0
- package/.medusa/server/src/api/store/leads/route.d.ts +4 -0
- package/.medusa/server/src/api/store/leads/route.js +176 -0
- package/.medusa/server/src/api/store/newsletter/config/route.d.ts +2 -0
- package/.medusa/server/src/api/store/newsletter/config/route.js +14 -0
- package/.medusa/server/src/api/store/newsletter/confirm/route.d.ts +4 -0
- package/.medusa/server/src/api/store/newsletter/confirm/route.js +52 -0
- package/.medusa/server/src/api/store/newsletter/route.d.ts +4 -0
- package/.medusa/server/src/api/store/newsletter/route.js +172 -0
- package/.medusa/server/src/api/store/newsletter/unsubscribe/route.d.ts +4 -0
- package/.medusa/server/src/api/store/newsletter/unsubscribe/route.js +54 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +8 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.js +174 -0
- package/.medusa/server/src/api/store/quote-requests/config/route.d.ts +2 -0
- package/.medusa/server/src/api/store/quote-requests/config/route.js +13 -0
- package/.medusa/server/src/api/store/quote-requests/route.d.ts +5 -0
- package/.medusa/server/src/api/store/quote-requests/route.js +214 -0
- package/.medusa/server/src/api/store/seo/route.js +42 -10
- package/.medusa/server/src/api/store/seo/structured-data/route.js +3 -2
- package/.medusa/server/src/config.js +7 -1
- package/.medusa/server/src/core/admin-analytics-dashboard.d.ts +1 -0
- package/.medusa/server/src/core/admin-analytics-dashboard.js +15 -3
- package/.medusa/server/src/core/ai-translation.d.ts +26 -0
- package/.medusa/server/src/core/ai-translation.js +173 -0
- package/.medusa/server/src/core/featured-products.d.ts +19 -0
- package/.medusa/server/src/core/featured-products.js +45 -0
- package/.medusa/server/src/core/pricing-tiers.d.ts +25 -0
- package/.medusa/server/src/core/pricing-tiers.js +88 -0
- package/.medusa/server/src/core/release-info.d.ts +10 -0
- package/.medusa/server/src/core/release-info.js +22 -0
- package/.medusa/server/src/core/version.d.ts +4 -4
- package/.medusa/server/src/core/version.js +3 -3
- package/.medusa/server/src/lib/modules/arukereso/config.js +2 -2
- package/.medusa/server/src/lib/modules/google-merchant/config.d.ts +2 -0
- package/.medusa/server/src/lib/modules/google-merchant/config.js +9 -2
- package/.medusa/server/src/lib/modules/google-merchant/feed.d.ts +1 -0
- package/.medusa/server/src/lib/modules/google-merchant/feed.js +4 -2
- package/.medusa/server/src/localized-config.d.ts +9 -0
- package/.medusa/server/src/localized-config.js +14 -0
- package/.medusa/server/src/modules/cms/config.d.ts +11 -0
- package/.medusa/server/src/modules/cms/config.js +65 -0
- package/.medusa/server/src/modules/cms/content-types.d.ts +24 -0
- package/.medusa/server/src/modules/cms/content-types.js +27 -0
- package/.medusa/server/src/modules/cms/index.d.ts +9 -0
- package/.medusa/server/src/modules/cms/index.js +32 -0
- package/.medusa/server/src/modules/cms/migrations/Migration20261029170000.d.ts +5 -0
- package/.medusa/server/src/modules/cms/migrations/Migration20261029170000.js +27 -0
- package/.medusa/server/src/modules/cms/migrations/Migration20261029190000.d.ts +5 -0
- package/.medusa/server/src/modules/cms/migrations/Migration20261029190000.js +52 -0
- package/.medusa/server/src/modules/cms/models/cms.d.ts +67 -0
- package/.medusa/server/src/modules/cms/models/cms.js +64 -0
- package/.medusa/server/src/modules/cms/service.d.ts +82 -0
- package/.medusa/server/src/modules/cms/service.js +9 -0
- package/.medusa/server/src/modules/cms/utils.d.ts +67 -0
- package/.medusa/server/src/modules/cms/utils.js +190 -0
- package/.medusa/server/src/modules/integration-settings/arukereso-registration.js +2 -2
- package/.medusa/server/src/modules/integration-settings/google-merchant-registration.js +6 -2
- package/.medusa/server/src/modules/lead/config.d.ts +37 -0
- package/.medusa/server/src/modules/lead/config.js +147 -0
- package/.medusa/server/src/modules/lead/email.d.ts +17 -0
- package/.medusa/server/src/modules/lead/email.js +68 -0
- package/.medusa/server/src/modules/lead/index.d.ts +9 -0
- package/.medusa/server/src/modules/lead/index.js +27 -0
- package/.medusa/server/src/modules/lead/migrations/Migration20261029163000.d.ts +5 -0
- package/.medusa/server/src/modules/lead/migrations/Migration20261029163000.js +19 -0
- package/.medusa/server/src/modules/lead/models/lead.d.ts +26 -0
- package/.medusa/server/src/modules/lead/models/lead.js +53 -0
- package/.medusa/server/src/modules/lead/service.d.ts +29 -0
- package/.medusa/server/src/modules/lead/service.js +11 -0
- package/.medusa/server/src/modules/lead/spam.d.ts +24 -0
- package/.medusa/server/src/modules/lead/spam.js +114 -0
- package/.medusa/server/src/modules/newsletter/config.d.ts +14 -0
- package/.medusa/server/src/modules/newsletter/config.js +51 -0
- package/.medusa/server/src/modules/newsletter/email.d.ts +9 -0
- package/.medusa/server/src/modules/newsletter/email.js +38 -0
- package/.medusa/server/src/modules/newsletter/events.d.ts +10 -0
- package/.medusa/server/src/modules/newsletter/events.js +34 -0
- package/.medusa/server/src/modules/newsletter/index.d.ts +10 -0
- package/.medusa/server/src/modules/newsletter/index.js +33 -0
- package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.d.ts +5 -0
- package/.medusa/server/src/modules/newsletter/migrations/Migration20261030130000.js +18 -0
- package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.d.ts +21 -0
- package/.medusa/server/src/modules/newsletter/models/newsletter-subscriber.js +35 -0
- package/.medusa/server/src/modules/newsletter/service.d.ts +24 -0
- package/.medusa/server/src/modules/newsletter/service.js +11 -0
- package/.medusa/server/src/modules/newsletter/token.d.ts +10 -0
- package/.medusa/server/src/modules/newsletter/token.js +97 -0
- package/.medusa/server/src/modules/product-review/config.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/config.js +10 -0
- package/.medusa/server/src/modules/product-review/index.d.ts +7 -0
- package/.medusa/server/src/modules/product-review/index.js +18 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261030160100.js +18 -0
- package/.medusa/server/src/modules/product-review/models/product-review.d.ts +16 -0
- package/.medusa/server/src/modules/product-review/models/product-review.js +26 -0
- package/.medusa/server/src/modules/product-review/service.d.ts +25 -0
- package/.medusa/server/src/modules/product-review/service.js +12 -0
- package/.medusa/server/src/modules/quote-request/config.d.ts +14 -0
- package/.medusa/server/src/modules/quote-request/config.js +52 -0
- package/.medusa/server/src/modules/quote-request/email.d.ts +17 -0
- package/.medusa/server/src/modules/quote-request/email.js +133 -0
- package/.medusa/server/src/modules/quote-request/index.d.ts +8 -0
- package/.medusa/server/src/modules/quote-request/index.js +23 -0
- package/.medusa/server/src/modules/quote-request/migrations/Migration20261029160000.d.ts +5 -0
- package/.medusa/server/src/modules/quote-request/migrations/Migration20261029160000.js +20 -0
- package/.medusa/server/src/modules/quote-request/models/quote-request.d.ts +24 -0
- package/.medusa/server/src/modules/quote-request/models/quote-request.js +54 -0
- package/.medusa/server/src/modules/quote-request/service.d.ts +32 -0
- package/.medusa/server/src/modules/quote-request/service.js +12 -0
- package/.medusa/server/src/modules/seo/models/seo-page.js +5 -5
- package/.medusa/server/src/modules/seo/sitemap.js +44 -10
- package/.medusa/server/src/modules/seo/structured-data.d.ts +1 -1
- package/.medusa/server/src/modules/seo/structured-data.js +41 -25
- package/.medusa/server/src/modules/seo/technical.d.ts +7 -2
- package/.medusa/server/src/modules/seo/technical.js +45 -6
- package/.medusa/server/src/modules/seo/types.d.ts +2 -0
- package/.medusa/server/src/modules/wishlist/index.d.ts +5 -0
- package/.medusa/server/src/modules/wishlist/index.js +14 -0
- package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.d.ts +5 -0
- package/.medusa/server/src/modules/wishlist/migrations/Migration20261030160000.js +17 -0
- package/.medusa/server/src/modules/wishlist/models/wishlist-item.d.ts +6 -0
- package/.medusa/server/src/modules/wishlist/models/wishlist-item.js +14 -0
- package/.medusa/server/src/modules/wishlist/service.d.ts +15 -0
- package/.medusa/server/src/modules/wishlist/service.js +12 -0
- package/.medusa/server/src/scripts/ensure-locales.d.ts +2 -0
- package/.medusa/server/src/scripts/ensure-locales.js +34 -0
- package/.medusa/server/src/scripts/ensure-shipping.d.ts +3 -0
- package/.medusa/server/src/scripts/ensure-shipping.js +211 -0
- package/.medusa/server/src/scripts/verify-bootstrap.js +19 -2
- package/.medusa/server/src/subscribers/quote-request-order-placed.d.ts +7 -0
- package/.medusa/server/src/subscribers/quote-request-order-placed.js +27 -0
- package/package.json +3 -2
|
@@ -0,0 +1,11 @@
|
|
|
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
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const newsletter_subscriber_1 = __importDefault(require("./models/newsletter-subscriber"));
|
|
8
|
+
class NewsletterService extends (0, utils_1.MedusaService)({ NewsletterSubscriber: newsletter_subscriber_1.default }) {
|
|
9
|
+
}
|
|
10
|
+
exports.default = NewsletterService;
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL25ld3NsZXR0ZXIvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQUFBLHFEQUF5RDtBQUN6RCwyRkFBaUU7QUFFakUsTUFBTSxpQkFBa0IsU0FBUSxJQUFBLHFCQUFhLEVBQUMsRUFBRSxvQkFBb0IsRUFBcEIsK0JBQW9CLEVBQUUsQ0FBQztDQUFHO0FBRTFFLGtCQUFlLGlCQUFpQixDQUFBIn0=
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export declare function createNewsletterToken(bytes?: number): {
|
|
2
|
+
token: string;
|
|
3
|
+
hash: string;
|
|
4
|
+
};
|
|
5
|
+
export declare function hashNewsletterToken(token: string): string;
|
|
6
|
+
export declare function createNewsletterUnsubscribeToken(subscriberId: string, email: string): string;
|
|
7
|
+
export declare function newsletterSubscriberIdFromUnsubscribeToken(token: string): string;
|
|
8
|
+
export declare function verifyNewsletterUnsubscribeToken(token: string, subscriberId: string, email: string): boolean;
|
|
9
|
+
export declare function normalizeNewsletterEmail(value: unknown): string;
|
|
10
|
+
export declare function normalizeNewsletterUtm(value: unknown): Record<string, string>;
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.createNewsletterToken = createNewsletterToken;
|
|
4
|
+
exports.hashNewsletterToken = hashNewsletterToken;
|
|
5
|
+
exports.createNewsletterUnsubscribeToken = createNewsletterUnsubscribeToken;
|
|
6
|
+
exports.newsletterSubscriberIdFromUnsubscribeToken = newsletterSubscriberIdFromUnsubscribeToken;
|
|
7
|
+
exports.verifyNewsletterUnsubscribeToken = verifyNewsletterUnsubscribeToken;
|
|
8
|
+
exports.normalizeNewsletterEmail = normalizeNewsletterEmail;
|
|
9
|
+
exports.normalizeNewsletterUtm = normalizeNewsletterUtm;
|
|
10
|
+
const node_crypto_1 = require("node:crypto");
|
|
11
|
+
function createNewsletterToken(bytes = 32) {
|
|
12
|
+
const token = (0, node_crypto_1.randomBytes)(bytes).toString("base64url");
|
|
13
|
+
return { token, hash: hashNewsletterToken(token) };
|
|
14
|
+
}
|
|
15
|
+
function hashNewsletterToken(token) {
|
|
16
|
+
return (0, node_crypto_1.createHash)("sha256").update(token, "utf8").digest("hex");
|
|
17
|
+
}
|
|
18
|
+
function createNewsletterUnsubscribeToken(subscriberId, email) {
|
|
19
|
+
const id = String(subscriberId || "").trim();
|
|
20
|
+
if (!id)
|
|
21
|
+
throw new Error("A feliratkozó azonosítója hiányzik.");
|
|
22
|
+
const normalizedEmail = normalizeNewsletterEmail(email);
|
|
23
|
+
const encodedId = Buffer.from(id, "utf8").toString("base64url");
|
|
24
|
+
const signature = signUnsubscribeToken(id, normalizedEmail);
|
|
25
|
+
return `${encodedId}.${signature}`;
|
|
26
|
+
}
|
|
27
|
+
function newsletterSubscriberIdFromUnsubscribeToken(token) {
|
|
28
|
+
const parts = String(token || "").trim().split(".");
|
|
29
|
+
if (parts.length !== 2 || !parts[0] || !parts[1])
|
|
30
|
+
throw new Error("Érvénytelen leiratkozó token.");
|
|
31
|
+
let id = "";
|
|
32
|
+
try {
|
|
33
|
+
id = Buffer.from(parts[0], "base64url").toString("utf8").trim();
|
|
34
|
+
}
|
|
35
|
+
catch {
|
|
36
|
+
id = "";
|
|
37
|
+
}
|
|
38
|
+
if (!id || id.length > 255)
|
|
39
|
+
throw new Error("Érvénytelen leiratkozó token.");
|
|
40
|
+
return id;
|
|
41
|
+
}
|
|
42
|
+
function verifyNewsletterUnsubscribeToken(token, subscriberId, email) {
|
|
43
|
+
const parts = String(token || "").trim().split(".");
|
|
44
|
+
if (parts.length !== 2)
|
|
45
|
+
return false;
|
|
46
|
+
let tokenId;
|
|
47
|
+
try {
|
|
48
|
+
tokenId = newsletterSubscriberIdFromUnsubscribeToken(token);
|
|
49
|
+
}
|
|
50
|
+
catch {
|
|
51
|
+
return false;
|
|
52
|
+
}
|
|
53
|
+
if (tokenId !== subscriberId)
|
|
54
|
+
return false;
|
|
55
|
+
const expected = signUnsubscribeToken(subscriberId, normalizeNewsletterEmail(email));
|
|
56
|
+
const provided = Buffer.from(parts[1], "utf8");
|
|
57
|
+
const wanted = Buffer.from(expected, "utf8");
|
|
58
|
+
return provided.length === wanted.length && (0, node_crypto_1.timingSafeEqual)(provided, wanted);
|
|
59
|
+
}
|
|
60
|
+
function normalizeNewsletterEmail(value) {
|
|
61
|
+
if (typeof value !== "string")
|
|
62
|
+
throw new Error("Az e-mail-cím megadása kötelező.");
|
|
63
|
+
const email = value.trim().toLowerCase();
|
|
64
|
+
if (!email || email.length > 320 || !/^\S+@\S+\.\S+$/.test(email)) {
|
|
65
|
+
throw new Error("Érvényes e-mail-cím szükséges.");
|
|
66
|
+
}
|
|
67
|
+
return email;
|
|
68
|
+
}
|
|
69
|
+
function normalizeNewsletterUtm(value) {
|
|
70
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
71
|
+
return {};
|
|
72
|
+
const allowed = ["utm_source", "utm_medium", "utm_campaign", "utm_term", "utm_content"];
|
|
73
|
+
const input = value;
|
|
74
|
+
const output = {};
|
|
75
|
+
for (const key of allowed) {
|
|
76
|
+
const raw = input[key];
|
|
77
|
+
if (typeof raw !== "string")
|
|
78
|
+
continue;
|
|
79
|
+
const normalized = raw.trim().slice(0, 500);
|
|
80
|
+
if (normalized)
|
|
81
|
+
output[key] = normalized;
|
|
82
|
+
}
|
|
83
|
+
return output;
|
|
84
|
+
}
|
|
85
|
+
function signUnsubscribeToken(subscriberId, email) {
|
|
86
|
+
return (0, node_crypto_1.createHmac)("sha256", newsletterTokenSecret())
|
|
87
|
+
.update(`${subscriberId}:${email}`, "utf8")
|
|
88
|
+
.digest("base64url");
|
|
89
|
+
}
|
|
90
|
+
function newsletterTokenSecret() {
|
|
91
|
+
const secret = String(process.env.NEWSLETTER_TOKEN_SECRET || process.env.COOKIE_SECRET || "").trim();
|
|
92
|
+
if (secret.length < 32) {
|
|
93
|
+
throw new Error("NEWSLETTER_TOKEN_SECRET vagy legalább 32 karakteres COOKIE_SECRET szükséges a leiratkozó linkekhez.");
|
|
94
|
+
}
|
|
95
|
+
return secret;
|
|
96
|
+
}
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidG9rZW4uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9uZXdzbGV0dGVyL3Rva2VuLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsc0RBR0M7QUFFRCxrREFFQztBQUVELDRFQU9DO0FBRUQsZ0dBT0M7QUFFRCw0RUFXQztBQUVELDREQU9DO0FBRUQsd0RBWUM7QUEvREQsNkNBQWtGO0FBRWxGLFNBQWdCLHFCQUFxQixDQUFDLEtBQUssR0FBRyxFQUFFO0lBQzlDLE1BQU0sS0FBSyxHQUFHLElBQUEseUJBQVcsRUFBQyxLQUFLLENBQUMsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUE7SUFDdEQsT0FBTyxFQUFFLEtBQUssRUFBRSxJQUFJLEVBQUUsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQTtBQUNwRCxDQUFDO0FBRUQsU0FBZ0IsbUJBQW1CLENBQUMsS0FBYTtJQUMvQyxPQUFPLElBQUEsd0JBQVUsRUFBQyxRQUFRLENBQUMsQ0FBQyxNQUFNLENBQUMsS0FBSyxFQUFFLE1BQU0sQ0FBQyxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQTtBQUNqRSxDQUFDO0FBRUQsU0FBZ0IsZ0NBQWdDLENBQUMsWUFBb0IsRUFBRSxLQUFhO0lBQ2xGLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxZQUFZLElBQUksRUFBRSxDQUFDLENBQUMsSUFBSSxFQUFFLENBQUE7SUFDNUMsSUFBSSxDQUFDLEVBQUU7UUFBRSxNQUFNLElBQUksS0FBSyxDQUFDLHFDQUFxQyxDQUFDLENBQUE7SUFDL0QsTUFBTSxlQUFlLEdBQUcsd0JBQXdCLENBQUMsS0FBSyxDQUFDLENBQUE7SUFDdkQsTUFBTSxTQUFTLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUMsUUFBUSxDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQy9ELE1BQU0sU0FBUyxHQUFHLG9CQUFvQixD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
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadProductReviewConfig = loadProductReviewConfig;
|
|
4
|
+
function loadProductReviewConfig(env = process.env) {
|
|
5
|
+
return {
|
|
6
|
+
enabled: env.PRODUCT_REVIEWS_ENABLED !== "false",
|
|
7
|
+
requireVerifiedPurchase: env.PRODUCT_REVIEWS_REQUIRE_VERIFIED_PURCHASE === "true",
|
|
8
|
+
};
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcHJvZHVjdC1yZXZpZXcvY29uZmlnLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBS0EsMERBS0M7QUFMRCxTQUFnQix1QkFBdUIsQ0FBQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUMxRSxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyx1QkFBdUIsS0FBSyxPQUFPO1FBQ2hELHVCQUF1QixFQUFFLEdBQUcsQ0FBQyx5Q0FBeUMsS0FBSyxNQUFNO0tBQ2xGLENBQUE7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import ProductReviewService from "./service";
|
|
2
|
+
export declare const PRODUCT_REVIEW_MODULE = "productReview";
|
|
3
|
+
declare const _default: any;
|
|
4
|
+
export default _default;
|
|
5
|
+
export { ProductReviewService };
|
|
6
|
+
export { PRODUCT_REVIEW_STATUSES } from "./models/product-review";
|
|
7
|
+
export { loadProductReviewConfig, type ProductReviewConfig } from "./config";
|
|
@@ -0,0 +1,18 @@
|
|
|
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.loadProductReviewConfig = exports.PRODUCT_REVIEW_STATUSES = exports.ProductReviewService = exports.PRODUCT_REVIEW_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.ProductReviewService = service_1.default;
|
|
10
|
+
exports.PRODUCT_REVIEW_MODULE = "productReview";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.PRODUCT_REVIEW_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
var product_review_1 = require("./models/product-review");
|
|
15
|
+
Object.defineProperty(exports, "PRODUCT_REVIEW_STATUSES", { enumerable: true, get: function () { return product_review_1.PRODUCT_REVIEW_STATUSES; } });
|
|
16
|
+
var config_1 = require("./config");
|
|
17
|
+
Object.defineProperty(exports, "loadProductReviewConfig", { enumerable: true, get: function () { return config_1.loadProductReviewConfig; } });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7QUFBQSxxREFBa0Q7QUFDbEQsd0RBQTRDO0FBUW5DLCtCQVJGLGlCQUFvQixDQVFFO0FBTmhCLFFBQUEscUJBQXFCLEdBQUcsZUFBZSxDQUFBO0FBRXBELGtCQUFlLElBQUEsY0FBTSxFQUFDLDZCQUFxQixFQUFFO0lBQzNDLE9BQU8sRUFBRSxpQkFBb0I7Q0FDOUIsQ0FBQyxDQUFBO0FBR0YsMERBQWlFO0FBQXhELHlIQUFBLHVCQUF1QixPQUFBO0FBQ2hDLG1DQUE0RTtBQUFuRSxpSEFBQSx1QkFBdUIsT0FBQSJ9
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261030160100 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261030160100 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "product_review" ("id" text not null, "product_id" text not null, "customer_id" text not null, "customer_name" text null, "rating" int not null, "body" text not null, "status" text check ("status" in ('pending','approved','rejected')) not null default 'pending', "verified_purchase" boolean not null default false, "order_id" text null, "moderation_note" text null, "moderated_at" timestamptz null, "moderated_by" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "product_review_pkey" primary key ("id"));`);
|
|
8
|
+
this.addSql(`create unique index if not exists "IDX_product_review_product_customer" on "product_review" ("product_id", "customer_id") where deleted_at is null;`);
|
|
9
|
+
this.addSql(`create index if not exists "IDX_product_review_product_status_created" on "product_review" ("product_id", "status", "created_at") where deleted_at is null;`);
|
|
10
|
+
this.addSql(`create index if not exists "IDX_product_review_customer_created" on "product_review" ("customer_id", "created_at") where deleted_at is null;`);
|
|
11
|
+
this.addSql(`create index if not exists "IDX_product_review_status_created" on "product_review" ("status", "created_at") where deleted_at is null;`);
|
|
12
|
+
}
|
|
13
|
+
async down() {
|
|
14
|
+
this.addSql(`drop table if exists "product_review" cascade;`);
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
exports.Migration20261030160100 = Migration20261030160100;
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMzAxNjAxMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9taWdyYXRpb25zL01pZ3JhdGlvbjIwMjYxMDMwMTYwMTAwLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlFQUFvRTtBQUVwRSxNQUFhLHVCQUF3QixTQUFRLHNCQUFTO0lBQ3BELEtBQUssQ0FBQyxFQUFFO1FBQ04sSUFBSSxDQUFDLE1BQU0sQ0FBQyw0bkJBQTRuQixDQUFDLENBQUE7UUFDem9CLElBQUksQ0FBQyxNQUFNLENBQUMscUpBQXFKLENBQUMsQ0FBQTtRQUNsSyxJQUFJLENBQUMsTUFBTSxDQUFDLDZKQUE2SixDQUFDLENBQUE7UUFDMUssSUFBSSxDQUFDLE1BQU0sQ0FBQyw4SUFBOEksQ0FBQyxDQUFBO1FBQzNKLElBQUksQ0FBQyxNQUFNLENBQUMsdUlBQXVJLENBQUMsQ0FBQTtJQUN0SixDQUFDO0lBRUQsS0FBSyxDQUFDLElBQUk7UUFDUixJQUFJLENBQUMsTUFBTSxDQUFDLGdEQUFnRCxDQUFDLENBQUE7SUFDL0QsQ0FBQztDQUNGO0FBWkQsMERBWUMifQ==
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const PRODUCT_REVIEW_STATUSES: readonly ["pending", "approved", "rejected"];
|
|
2
|
+
declare const ProductReview: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
product_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
customer_id: import("@medusajs/framework/utils").TextProperty;
|
|
6
|
+
customer_name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
7
|
+
rating: import("@medusajs/framework/utils").NumberProperty;
|
|
8
|
+
body: import("@medusajs/framework/utils").TextProperty;
|
|
9
|
+
status: import("@medusajs/framework/utils").EnumProperty<["pending", "approved", "rejected"]>;
|
|
10
|
+
verified_purchase: import("@medusajs/framework/utils").BooleanProperty;
|
|
11
|
+
order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
moderation_note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
13
|
+
moderated_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
14
|
+
moderated_by: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
15
|
+
}>, "product_review">;
|
|
16
|
+
export default ProductReview;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.PRODUCT_REVIEW_STATUSES = void 0;
|
|
4
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
5
|
+
exports.PRODUCT_REVIEW_STATUSES = ["pending", "approved", "rejected"];
|
|
6
|
+
const ProductReview = utils_1.model.define("product_review", {
|
|
7
|
+
id: utils_1.model.id().primaryKey(),
|
|
8
|
+
product_id: utils_1.model.text(),
|
|
9
|
+
customer_id: utils_1.model.text(),
|
|
10
|
+
customer_name: utils_1.model.text().nullable(),
|
|
11
|
+
rating: utils_1.model.number(),
|
|
12
|
+
body: utils_1.model.text(),
|
|
13
|
+
status: utils_1.model.enum(["pending", "approved", "rejected"]).default("pending"),
|
|
14
|
+
verified_purchase: utils_1.model.boolean().default(false),
|
|
15
|
+
order_id: utils_1.model.text().nullable(),
|
|
16
|
+
moderation_note: utils_1.model.text().nullable(),
|
|
17
|
+
moderated_at: utils_1.model.dateTime().nullable(),
|
|
18
|
+
moderated_by: utils_1.model.text().nullable(),
|
|
19
|
+
}).indexes([
|
|
20
|
+
{ on: ["product_id", "customer_id"], unique: true },
|
|
21
|
+
{ on: ["product_id", "status", "created_at"] },
|
|
22
|
+
{ on: ["customer_id", "created_at"] },
|
|
23
|
+
{ on: ["status", "created_at"] },
|
|
24
|
+
]);
|
|
25
|
+
exports.default = ProductReview;
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvZHVjdC1yZXZpZXcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9wcm9kdWN0LXJldmlldy9tb2RlbHMvcHJvZHVjdC1yZXZpZXcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEscURBQWlEO0FBRXBDLFFBQUEsdUJBQXVCLEdBQUcsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBVSxDQUFBO0FBRW5GLE1BQU0sYUFBYSxHQUFHLGFBQUssQ0FBQyxNQUFNLENBQUMsZ0JBQWdCLEVBQUU7SUFDbkQsRUFBRSxFQUFFLGFBQUssQ0FBQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLEVBQUU7SUFDM0IsVUFBVSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDeEIsV0FBVyxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDekIsYUFBYSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUUsQ0FBQyxRQUFRLEVBQUU7SUFDdEMsTUFBTSxFQUFFLGFBQUssQ0FBQyxNQUFNLEVBQUU7SUFDdEIsSUFBSSxFQUFFLGFBQUssQ0FBQyxJQUFJLEVBQUU7SUFDbEIsTUFBTSxFQUFFLGFBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLFVBQVUsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQztJQUMxRSxpQkFBaUIsRUFBRSxhQUFLLENBQUMsT0FBTyxFQUFFLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQztJQUNqRCxRQUFRLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUNqQyxlQUFlLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN4QyxZQUFZLEVBQUUsYUFBSyxDQUFDLFFBQVEsRUFBRSxDQUFDLFFBQVEsRUFBRTtJQUN6QyxZQUFZLEVBQUUsYUFBSyxDQUFDLElBQUksRUFBRSxDQUFDLFFBQVEsRUFBRTtDQUN0QyxDQUFDLENBQUMsT0FBTyxDQUFDO0lBQ1QsRUFBRSxFQUFFLEVBQUUsQ0FBQyxZQUFZLEVBQUUsYUFBYSxDQUFDLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRTtJQUNuRCxFQUFFLEVBQUUsRUFBRSxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDOUMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxhQUFhLEVBQUUsWUFBWSxDQUFDLEVBQUU7SUFDckMsRUFBRSxFQUFFLEVBQUUsQ0FBQyxRQUFRLEVBQUUsWUFBWSxDQUFDLEVBQUU7Q0FDakMsQ0FBQyxDQUFBO0FBRUYsa0JBQWUsYUFBYSxDQUFBIn0=
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
declare const ProductReviewBaseService: import("@medusajs/framework/utils").MedusaServiceReturnType<import("@medusajs/framework/utils").ModelConfigurationsToConfigTemplate<{
|
|
2
|
+
readonly ProductReview: import("@medusajs/framework/utils").DmlEntity<import("@medusajs/framework/utils").DMLEntitySchemaBuilder<{
|
|
3
|
+
id: import("@medusajs/framework/utils").PrimaryKeyModifier<string, import("@medusajs/framework/utils").IdProperty>;
|
|
4
|
+
product_id: import("@medusajs/framework/utils").TextProperty;
|
|
5
|
+
customer_id: import("@medusajs/framework/utils").TextProperty;
|
|
6
|
+
customer_name: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
7
|
+
rating: import("@medusajs/framework/utils").NumberProperty;
|
|
8
|
+
body: import("@medusajs/framework/utils").TextProperty;
|
|
9
|
+
status: import("@medusajs/framework/utils").EnumProperty<["pending", "approved", "rejected"]>;
|
|
10
|
+
verified_purchase: import("@medusajs/framework/utils").BooleanProperty;
|
|
11
|
+
order_id: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
12
|
+
moderation_note: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
13
|
+
moderated_at: import("@medusajs/framework/utils").NullableModifier<Date, import("@medusajs/framework/utils").DateTimeProperty>;
|
|
14
|
+
moderated_by: import("@medusajs/framework/utils").NullableModifier<string, import("@medusajs/framework/utils").TextProperty>;
|
|
15
|
+
}>, "product_review">;
|
|
16
|
+
}>>;
|
|
17
|
+
type ProductReviewBaseServiceInstance = InstanceType<typeof ProductReviewBaseService>;
|
|
18
|
+
export default class ProductReviewService extends ProductReviewBaseService {
|
|
19
|
+
createProductReviews: ProductReviewBaseServiceInstance["createProductReviews"];
|
|
20
|
+
updateProductReviews: ProductReviewBaseServiceInstance["updateProductReviews"];
|
|
21
|
+
retrieveProductReview: ProductReviewBaseServiceInstance["retrieveProductReview"];
|
|
22
|
+
listProductReviews: ProductReviewBaseServiceInstance["listProductReviews"];
|
|
23
|
+
listAndCountProductReviews: ProductReviewBaseServiceInstance["listAndCountProductReviews"];
|
|
24
|
+
}
|
|
25
|
+
export {};
|
|
@@ -0,0 +1,12 @@
|
|
|
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
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
7
|
+
const product_review_1 = __importDefault(require("./models/product-review"));
|
|
8
|
+
const ProductReviewBaseService = (0, utils_1.MedusaService)({ ProductReview: product_review_1.default });
|
|
9
|
+
class ProductReviewService extends ProductReviewBaseService {
|
|
10
|
+
}
|
|
11
|
+
exports.default = ProductReviewService;
|
|
12
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL3Byb2R1Y3QtcmV2aWV3L3NlcnZpY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7QUFBQSxxREFBeUQ7QUFDekQsNkVBQW1EO0FBRW5ELE1BQU0sd0JBQXdCLEdBQUcsSUFBQSxxQkFBYSxFQUFDLEVBQUUsYUFBYSxFQUFiLHdCQUFhLEVBQUUsQ0FBQyxDQUFBO0FBR2pFLE1BQXFCLG9CQUFxQixTQUFRLHdCQUF3QjtDQU16RTtBQU5ELHVDQU1DIn0=
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export type QuoteExtraFieldDefinition = {
|
|
2
|
+
key: string;
|
|
3
|
+
label: string;
|
|
4
|
+
type: "text" | "textarea" | "number" | "boolean" | "select";
|
|
5
|
+
required: boolean;
|
|
6
|
+
options?: string[];
|
|
7
|
+
};
|
|
8
|
+
export type QuoteRequestConfig = {
|
|
9
|
+
enabled: boolean;
|
|
10
|
+
emailEnabled: boolean;
|
|
11
|
+
adminEmails: string[];
|
|
12
|
+
extraFields: QuoteExtraFieldDefinition[];
|
|
13
|
+
};
|
|
14
|
+
export declare function loadQuoteRequestConfig(env?: NodeJS.ProcessEnv): QuoteRequestConfig;
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.loadQuoteRequestConfig = loadQuoteRequestConfig;
|
|
4
|
+
function loadQuoteRequestConfig(env = process.env) {
|
|
5
|
+
return {
|
|
6
|
+
enabled: env.QUOTE_REQUESTS_ENABLED !== "false",
|
|
7
|
+
emailEnabled: env.QUOTE_EMAIL_ENABLED !== "false",
|
|
8
|
+
adminEmails: splitEmails(env.QUOTE_ADMIN_EMAILS || env.QUOTE_ADMIN_EMAIL || ""),
|
|
9
|
+
extraFields: parseExtraFields(env.QUOTE_EXTRA_FIELDS_JSON),
|
|
10
|
+
};
|
|
11
|
+
}
|
|
12
|
+
function splitEmails(value) {
|
|
13
|
+
return [...new Set(value.split(/[;,]/).map((email) => email.trim()).filter(Boolean))];
|
|
14
|
+
}
|
|
15
|
+
function parseExtraFields(raw) {
|
|
16
|
+
if (!raw?.trim())
|
|
17
|
+
return [];
|
|
18
|
+
try {
|
|
19
|
+
const parsed = JSON.parse(raw);
|
|
20
|
+
if (!Array.isArray(parsed))
|
|
21
|
+
return [];
|
|
22
|
+
return parsed.flatMap((value) => {
|
|
23
|
+
if (!value || typeof value !== "object" || Array.isArray(value))
|
|
24
|
+
return [];
|
|
25
|
+
const row = value;
|
|
26
|
+
const key = text(row.key);
|
|
27
|
+
const label = text(row.label) || key;
|
|
28
|
+
const type = text(row.type);
|
|
29
|
+
if (!key || !/^[a-zA-Z0-9_.-]{1,80}$/.test(key))
|
|
30
|
+
return [];
|
|
31
|
+
if (!["text", "textarea", "number", "boolean", "select"].includes(type))
|
|
32
|
+
return [];
|
|
33
|
+
const options = Array.isArray(row.options)
|
|
34
|
+
? row.options.map(text).filter(Boolean).slice(0, 100)
|
|
35
|
+
: undefined;
|
|
36
|
+
return [{
|
|
37
|
+
key,
|
|
38
|
+
label: label.slice(0, 160),
|
|
39
|
+
type: type,
|
|
40
|
+
required: row.required === true,
|
|
41
|
+
...(options?.length ? { options } : {}),
|
|
42
|
+
}];
|
|
43
|
+
}).slice(0, 50);
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
return [];
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
function text(value) {
|
|
50
|
+
return typeof value === "string" ? value.trim() : "";
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlnLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vc3JjL21vZHVsZXMvcXVvdGUtcmVxdWVzdC9jb25maWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFlQSx3REFTQztBQVRELFNBQWdCLHNCQUFzQixDQUNwQyxNQUF5QixPQUFPLENBQUMsR0FBRztJQUVwQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLEdBQUcsQ0FBQyxzQkFBc0IsS0FBSyxPQUFPO1FBQy9DLFlBQVksRUFBRSxHQUFHLENBQUMsbUJBQW1CLEtBQUssT0FBTztRQUNqRCxXQUFXLEVBQUUsV0FBVyxDQUFDLEdBQUcsQ0FBQyxrQkFBa0IsSUFBSSxHQUFHLENBQUMsaUJBQWlCLElBQUksRUFBRSxDQUFDO1FBQy9FLFdBQVcsRUFBRSxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUM7S0FDM0QsQ0FBQTtBQUNILENBQUM7QUFFRCxTQUFTLFdBQVcsQ0FBQyxLQUFhO0lBQ2hDLE9BQU8sQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFBO0FBQ3ZGLENBQUM7QUFFRCxTQUFTLGdCQUFnQixDQUFDLEdBQXVCO0lBQy9DLElBQUksQ0FBQyxHQUFHLEVBQUUsSUFBSSxFQUFFO1FBQUUsT0FBTyxFQUFFLENBQUE7SUFDM0IsSUFBSSxDQUFDO1FBQ0gsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTtRQUM5QixJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLEVBQUUsQ0FBQTtRQUNyQyxPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQStCLEVBQUU7WUFDM0QsSUFBSSxDQUFDLEtBQUssSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFDMUUsTUFBTSxHQUFHLEdBQUcsS0FBZ0MsQ0FBQTtZQUM1QyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFBO1lBQ3pCLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLElBQUksR0FBRyxDQUFBO1lBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDM0IsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFDMUQsSUFBSSxDQUFDLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFFBQVEsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUM7Z0JBQUUsT0FBTyxFQUFFLENBQUE7WUFDbEYsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDO2dCQUN4QyxDQUFDLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDO2dCQUNyRCxDQUFDLENBQUMsU0FBUyxDQUFBO1lBQ2IsT0FBTyxDQUFDO29CQUNOLEdBQUc7b0JBQ0gsS0FBSyxFQUFFLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQztvQkFDMUIsSUFBSSxFQUFFLElBQXlDO29CQUMvQyxRQUFRLEVBQUUsR0FBRyxDQUFDLFFBQVEsS0FBSyxJQUFJO29CQUMvQixHQUFHLENBQUMsT0FBTyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxPQUFPLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO2lCQUN4QyxDQUFDLENBQUE7UUFDSixDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFBO0lBQ2pCLENBQUM7SUFBQyxNQUFNLENBQUM7UUFDUCxPQUFPLEVBQUUsQ0FBQTtJQUNYLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxJQUFJLENBQUMsS0FBYztJQUMxQixPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUE7QUFDdEQsQ0FBQyJ9
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
type QuoteLike = Record<string, any>;
|
|
2
|
+
export declare function quoteRequestCreatedEmail(quote: QuoteLike, brand?: string): {
|
|
3
|
+
subject: string;
|
|
4
|
+
text: string;
|
|
5
|
+
html: string;
|
|
6
|
+
};
|
|
7
|
+
export declare function quoteRequestAdminEmail(quote: QuoteLike, brand?: string): {
|
|
8
|
+
subject: string;
|
|
9
|
+
text: string;
|
|
10
|
+
html: string;
|
|
11
|
+
};
|
|
12
|
+
export declare function quoteRequestStatusEmail(quote: QuoteLike, brand?: string): {
|
|
13
|
+
subject: string;
|
|
14
|
+
text: string;
|
|
15
|
+
html: string;
|
|
16
|
+
};
|
|
17
|
+
export {};
|
|
@@ -0,0 +1,133 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.quoteRequestCreatedEmail = quoteRequestCreatedEmail;
|
|
4
|
+
exports.quoteRequestAdminEmail = quoteRequestAdminEmail;
|
|
5
|
+
exports.quoteRequestStatusEmail = quoteRequestStatusEmail;
|
|
6
|
+
function quoteRequestCreatedEmail(quote, brand = "HSZRDM Commerce") {
|
|
7
|
+
const company = text(quote.company_name);
|
|
8
|
+
const contact = text(quote.contact_name);
|
|
9
|
+
const itemCount = Array.isArray(quote.items)
|
|
10
|
+
? quote.items.reduce((sum, item) => sum + Math.max(0, Number(item?.quantity) || 0), 0)
|
|
11
|
+
: 0;
|
|
12
|
+
const subject = `Ajánlatkérésed megérkezett – ${brand}`;
|
|
13
|
+
const body = [
|
|
14
|
+
`Kedves ${contact || "Érdeklődő"}!`,
|
|
15
|
+
"",
|
|
16
|
+
"Megkaptuk az ajánlatkérésedet, hamarosan feldolgozzuk.",
|
|
17
|
+
company ? `Cég: ${company}` : "",
|
|
18
|
+
`Tételek összes mennyisége: ${itemCount}`,
|
|
19
|
+
`Azonosító: ${text(quote.id)}`,
|
|
20
|
+
"",
|
|
21
|
+
brand,
|
|
22
|
+
].filter(Boolean).join("\n");
|
|
23
|
+
return { subject, text: body, html: simpleHtml(body) };
|
|
24
|
+
}
|
|
25
|
+
function quoteRequestAdminEmail(quote, brand = "HSZRDM Commerce") {
|
|
26
|
+
const subject = `Új ajánlatkérés – ${text(quote.company_name) || text(quote.contact_name) || text(quote.id)}`;
|
|
27
|
+
const body = [
|
|
28
|
+
`Új ajánlatkérés érkezett a ${brand} rendszerbe.`,
|
|
29
|
+
"",
|
|
30
|
+
`Azonosító: ${text(quote.id)}`,
|
|
31
|
+
`Cég: ${text(quote.company_name) || "—"}`,
|
|
32
|
+
`Kapcsolattartó: ${text(quote.contact_name) || "—"}`,
|
|
33
|
+
`E-mail: ${text(quote.contact_email) || "—"}`,
|
|
34
|
+
`Telefon: ${text(quote.contact_phone) || "—"}`,
|
|
35
|
+
`Rendelés típusa: ${text(quote.order_type) || "—"}`,
|
|
36
|
+
`Gyakoriság: ${text(quote.recurrence) || "—"}`,
|
|
37
|
+
"",
|
|
38
|
+
...quoteLines(quote, false),
|
|
39
|
+
].join("\n");
|
|
40
|
+
return { subject, text: body, html: simpleHtml(body) };
|
|
41
|
+
}
|
|
42
|
+
function quoteRequestStatusEmail(quote, brand = "HSZRDM Commerce") {
|
|
43
|
+
const labels = {
|
|
44
|
+
reviewing: "feldolgozás alatt",
|
|
45
|
+
quoted: "elkészült az ajánlat",
|
|
46
|
+
accepted: "elfogadva",
|
|
47
|
+
rejected: "elutasítva",
|
|
48
|
+
draft_order: "rendelés-előkészítés alatt",
|
|
49
|
+
ordered: "rendeléssé alakítva",
|
|
50
|
+
closed: "lezárva",
|
|
51
|
+
};
|
|
52
|
+
const status = text(quote.status);
|
|
53
|
+
const label = labels[status] || status;
|
|
54
|
+
const showPricing = status === "quoted" || status === "accepted";
|
|
55
|
+
const subject = status === "quoted"
|
|
56
|
+
? `Elkészült az ajánlatod – ${brand}`
|
|
57
|
+
: `Ajánlatkérés frissítés – ${brand}`;
|
|
58
|
+
const body = [
|
|
59
|
+
`Kedves ${text(quote.contact_name) || "Érdeklődő"}!`,
|
|
60
|
+
"",
|
|
61
|
+
`Az ajánlatkérésed státusza megváltozott: ${label}.`,
|
|
62
|
+
`Azonosító: ${text(quote.id)}`,
|
|
63
|
+
...(showPricing ? ["", ...quoteLines(quote, true)] : []),
|
|
64
|
+
"",
|
|
65
|
+
brand,
|
|
66
|
+
].join("\n");
|
|
67
|
+
return { subject, text: body, html: simpleHtml(body) };
|
|
68
|
+
}
|
|
69
|
+
function quoteLines(quote, showPricing) {
|
|
70
|
+
const items = Array.isArray(quote.items) ? quote.items : [];
|
|
71
|
+
if (!items.length)
|
|
72
|
+
return ["Tételek: —"];
|
|
73
|
+
const currency = text(quote.currency_code).toUpperCase() || "HUF";
|
|
74
|
+
let total = 0;
|
|
75
|
+
let hasCompletePricing = true;
|
|
76
|
+
const lines = items.map((item, index) => {
|
|
77
|
+
const title = text(item.title) || `Tétel ${index + 1}`;
|
|
78
|
+
const quantity = positiveNumber(item.quantity) || 1;
|
|
79
|
+
const unitPrice = finiteNumber(item.unit_price);
|
|
80
|
+
if (unitPrice == null)
|
|
81
|
+
hasCompletePricing = false;
|
|
82
|
+
else
|
|
83
|
+
total += unitPrice * quantity;
|
|
84
|
+
if (!showPricing || unitPrice == null) {
|
|
85
|
+
return `• ${title} × ${quantity}`;
|
|
86
|
+
}
|
|
87
|
+
return `• ${title} × ${quantity} – ${formatAmount(unitPrice, currency)} / egység`;
|
|
88
|
+
});
|
|
89
|
+
if (showPricing && hasCompletePricing) {
|
|
90
|
+
lines.push(`Összesen: ${formatAmount(total, currency)}`);
|
|
91
|
+
}
|
|
92
|
+
return lines;
|
|
93
|
+
}
|
|
94
|
+
function formatAmount(value, currency) {
|
|
95
|
+
try {
|
|
96
|
+
return new Intl.NumberFormat("hu-HU", {
|
|
97
|
+
style: "currency",
|
|
98
|
+
currency,
|
|
99
|
+
maximumFractionDigits: currency === "HUF" ? 0 : 2,
|
|
100
|
+
}).format(value);
|
|
101
|
+
}
|
|
102
|
+
catch {
|
|
103
|
+
return `${value} ${currency}`;
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function simpleHtml(value) {
|
|
107
|
+
return `<div style="font-family:Arial,sans-serif;white-space:pre-line">${escapeHtml(value)}</div>`;
|
|
108
|
+
}
|
|
109
|
+
function escapeHtml(value) {
|
|
110
|
+
return value.replace(/[&<>"']/g, (char) => ({
|
|
111
|
+
"&": "&",
|
|
112
|
+
"<": "<",
|
|
113
|
+
">": ">",
|
|
114
|
+
'"': """,
|
|
115
|
+
"'": "'",
|
|
116
|
+
})[char] || char);
|
|
117
|
+
}
|
|
118
|
+
function finiteNumber(value) {
|
|
119
|
+
const number = typeof value === "number"
|
|
120
|
+
? value
|
|
121
|
+
: typeof value === "string" && value.trim()
|
|
122
|
+
? Number(value)
|
|
123
|
+
: Number.NaN;
|
|
124
|
+
return Number.isFinite(number) && number >= 0 ? number : null;
|
|
125
|
+
}
|
|
126
|
+
function positiveNumber(value) {
|
|
127
|
+
const number = finiteNumber(value);
|
|
128
|
+
return number != null && number > 0 ? number : null;
|
|
129
|
+
}
|
|
130
|
+
function text(value) {
|
|
131
|
+
return typeof value === "string" ? value.trim() : "";
|
|
132
|
+
}
|
|
133
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW1haWwuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdW90ZS1yZXF1ZXN0L2VtYWlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBRUEsNERBd0JDO0FBRUQsd0RBcUJDO0FBRUQsMERBOEJDO0FBL0VELFNBQWdCLHdCQUF3QixDQUN0QyxLQUFnQixFQUNoQixLQUFLLEdBQUcsaUJBQWlCO0lBRXpCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsWUFBWSxDQUFDLENBQUE7SUFDeEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxZQUFZLENBQUMsQ0FBQTtJQUN4QyxNQUFNLFNBQVMsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUM7UUFDMUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNoQixDQUFDLEdBQVcsRUFBRSxJQUFTLEVBQUUsRUFBRSxDQUFDLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsSUFBSSxFQUFFLFFBQVEsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUMxRSxDQUFDLENBQ0Y7UUFDSCxDQUFDLENBQUMsQ0FBQyxDQUFBO0lBQ0wsTUFBTSxPQUFPLEdBQUcsZ0NBQWdDLEtBQUssRUFBRSxDQUFBO0lBQ3ZELE1BQU0sSUFBSSxHQUFHO1FBQ1gsVUFBVSxPQUFPLElBQUksV0FBVyxHQUFHO1FBQ25DLEVBQUU7UUFDRix3REFBd0Q7UUFDeEQsT0FBTyxDQUFDLENBQUMsQ0FBQyxRQUFRLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ2hDLDhCQUE4QixTQUFTLEVBQUU7UUFDekMsY0FBYyxJQUFJLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxFQUFFO1FBQzlCLEVBQUU7UUFDRixLQUFLO0tBQ04sQ0FBQyxNQUFNLENBQUMsT0FBTyxD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
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import QuoteRequestService from "./service";
|
|
2
|
+
export declare const QUOTE_REQUEST_MODULE = "quoteRequest";
|
|
3
|
+
declare const _default: any;
|
|
4
|
+
export default _default;
|
|
5
|
+
export { QuoteRequestService };
|
|
6
|
+
export { loadQuoteRequestConfig, type QuoteExtraFieldDefinition, type QuoteRequestConfig } from "./config";
|
|
7
|
+
export { quoteRequestAdminEmail, quoteRequestCreatedEmail, quoteRequestStatusEmail, } from "./email";
|
|
8
|
+
export { QUOTE_REQUEST_STATUSES, QUOTE_ORDER_TYPES } from "./models/quote-request";
|
|
@@ -0,0 +1,23 @@
|
|
|
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.QUOTE_ORDER_TYPES = exports.QUOTE_REQUEST_STATUSES = exports.quoteRequestStatusEmail = exports.quoteRequestCreatedEmail = exports.quoteRequestAdminEmail = exports.loadQuoteRequestConfig = exports.QuoteRequestService = exports.QUOTE_REQUEST_MODULE = void 0;
|
|
7
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
8
|
+
const service_1 = __importDefault(require("./service"));
|
|
9
|
+
exports.QuoteRequestService = service_1.default;
|
|
10
|
+
exports.QUOTE_REQUEST_MODULE = "quoteRequest";
|
|
11
|
+
exports.default = (0, utils_1.Module)(exports.QUOTE_REQUEST_MODULE, {
|
|
12
|
+
service: service_1.default,
|
|
13
|
+
});
|
|
14
|
+
var config_1 = require("./config");
|
|
15
|
+
Object.defineProperty(exports, "loadQuoteRequestConfig", { enumerable: true, get: function () { return config_1.loadQuoteRequestConfig; } });
|
|
16
|
+
var email_1 = require("./email");
|
|
17
|
+
Object.defineProperty(exports, "quoteRequestAdminEmail", { enumerable: true, get: function () { return email_1.quoteRequestAdminEmail; } });
|
|
18
|
+
Object.defineProperty(exports, "quoteRequestCreatedEmail", { enumerable: true, get: function () { return email_1.quoteRequestCreatedEmail; } });
|
|
19
|
+
Object.defineProperty(exports, "quoteRequestStatusEmail", { enumerable: true, get: function () { return email_1.quoteRequestStatusEmail; } });
|
|
20
|
+
var quote_request_1 = require("./models/quote-request");
|
|
21
|
+
Object.defineProperty(exports, "QUOTE_REQUEST_STATUSES", { enumerable: true, get: function () { return quote_request_1.QUOTE_REQUEST_STATUSES; } });
|
|
22
|
+
Object.defineProperty(exports, "QUOTE_ORDER_TYPES", { enumerable: true, get: function () { return quote_request_1.QUOTE_ORDER_TYPES; } });
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdW90ZS1yZXF1ZXN0L2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7OztBQUFBLHFEQUFrRDtBQUNsRCx3REFBMkM7QUFRbEMsOEJBUkYsaUJBQW1CLENBUUU7QUFOZixRQUFBLG9CQUFvQixHQUFHLGNBQWMsQ0FBQTtBQUVsRCxrQkFBZSxJQUFBLGNBQU0sRUFBQyw0QkFBb0IsRUFBRTtJQUMxQyxPQUFPLEVBQUUsaUJBQW1CO0NBQzdCLENBQUMsQ0FBQTtBQUdGLG1DQUEwRztBQUFqRyxnSEFBQSxzQkFBc0IsT0FBQTtBQUMvQixpQ0FJZ0I7QUFIZCwrR0FBQSxzQkFBc0IsT0FBQTtBQUN0QixpSEFBQSx3QkFBd0IsT0FBQTtBQUN4QixnSEFBQSx1QkFBdUIsT0FBQTtBQUV6Qix3REFBa0Y7QUFBekUsdUhBQUEsc0JBQXNCLE9BQUE7QUFBRSxrSEFBQSxpQkFBaUIsT0FBQSJ9
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.Migration20261029160000 = void 0;
|
|
4
|
+
const migrations_1 = require("@medusajs/framework/mikro-orm/migrations");
|
|
5
|
+
class Migration20261029160000 extends migrations_1.Migration {
|
|
6
|
+
async up() {
|
|
7
|
+
this.addSql(`create table if not exists "quote_request" ("id" text not null, "status" text check ("status" in ('new','reviewing','quoted','accepted','rejected','draft_order','ordered','closed')) not null, "company_name" text null, "tax_number" text null, "company_address" text null, "contact_name" text not null, "contact_email" text not null, "contact_phone" text null, "order_type" text check ("order_type" in ('one_time','recurring')) not null, "recurrence" text null, "note" text null, "admin_note" text null, "items" jsonb not null, "extra_fields" jsonb null, "customer_id" text null, "draft_order_id" text null, "order_id" text null, "currency_code" text null, "source" text null, "created_at" timestamptz not null default now(), "updated_at" timestamptz not null default now(), "deleted_at" timestamptz null, constraint "quote_request_pkey" primary key ("id"));`);
|
|
8
|
+
this.addSql(`create index if not exists "IDX_quote_request_status_created" on "quote_request" ("status", "created_at") where deleted_at is null;`);
|
|
9
|
+
this.addSql(`create index if not exists "IDX_quote_request_email_created" on "quote_request" ("contact_email", "created_at") where deleted_at is null;`);
|
|
10
|
+
this.addSql(`create index if not exists "IDX_quote_request_company" on "quote_request" ("company_name") where deleted_at is null;`);
|
|
11
|
+
this.addSql(`create index if not exists "IDX_quote_request_customer" on "quote_request" ("customer_id") where deleted_at is null;`);
|
|
12
|
+
this.addSql(`create index if not exists "IDX_quote_request_draft_order" on "quote_request" ("draft_order_id") where deleted_at is null;`);
|
|
13
|
+
this.addSql(`create index if not exists "IDX_quote_request_order" on "quote_request" ("order_id") where deleted_at is null;`);
|
|
14
|
+
}
|
|
15
|
+
async down() {
|
|
16
|
+
this.addSql(`drop table if exists "quote_request" cascade;`);
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
exports.Migration20261029160000 = Migration20261029160000;
|
|
20
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTWlncmF0aW9uMjAyNjEwMjkxNjAwMDAuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvbW9kdWxlcy9xdW90ZS1yZXF1ZXN0L21pZ3JhdGlvbnMvTWlncmF0aW9uMjAyNjEwMjkxNjAwMDAudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEseUVBQW9FO0FBRXBFLE1BQWEsdUJBQXdCLFNBQVEsc0JBQVM7SUFDcEQsS0FBSyxDQUFDLEVBQUU7UUFDTixJQUFJLENBQUMsTUFBTSxDQUFDLDAxQkFBMDFCLENBQUMsQ0FBQTtRQUN2MkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxxSUFBcUksQ0FBQyxDQUFBO1FBQ2xKLElBQUksQ0FBQyxNQUFNLENBQUMsMklBQTJJLENBQUMsQ0FBQTtRQUN4SixJQUFJLENBQUMsTUFBTSxDQUFDLHNIQUFzSCxDQUFDLENBQUE7UUFDbkksSUFBSSxDQUFDLE1BQU0sQ0FBQyxzSEFBc0gsQ0FBQyxDQUFBO1FBQ25JLElBQUksQ0FBQyxNQUFNLENBQUMsNEhBQTRILENBQUMsQ0FBQTtRQUN6SSxJQUFJLENBQUMsTUFBTSxDQUFDLGdIQUFnSCxDQUFDLENBQUE7SUFDL0gsQ0FBQztJQUVELEtBQUssQ0FBQyxJQUFJO1FBQ1IsSUFBSSxDQUFDLE1BQU0sQ0FBQywrQ0FBK0MsQ0FBQyxDQUFBO0lBQzlELENBQUM7Q0FDRjtBQWRELDBEQWNDIn0=
|