@hszrdm/core 1.4.0 → 1.6.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 +6361 -3789
- package/.medusa/server/src/admin/index.mjs +6361 -3789
- package/.medusa/server/src/api/admin/back-in-stock/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/back-in-stock/route.js +70 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/[itemId]/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/[itemId]/route.js +64 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/items/route.js +40 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/[code]/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/[code]/route.js +40 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/promotions/route.js +41 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/[id]/route.js +28 -0
- package/.medusa/server/src/api/admin/core-carts/customer/[id]/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/core-carts/customer/[id]/route.js +34 -0
- package/.medusa/server/src/api/admin/core-carts/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/core-carts/route.js +69 -0
- package/.medusa/server/src/api/admin/customer-activation/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/customer-activation/route.js +97 -0
- package/.medusa/server/src/api/admin/customer-import/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/customer-import/route.js +166 -0
- package/.medusa/server/src/api/admin/order-export/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/order-export/route.js +88 -0
- package/.medusa/server/src/api/admin/product-migration/inventory/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-migration/inventory/route.js +164 -0
- package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-migration/price-list-prices/route.js +204 -0
- package/.medusa/server/src/api/admin/product-migration/products/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/product-migration/products/route.js +24 -0
- package/.medusa/server/src/api/admin/product-reviews/[id]/route.js +36 -4
- package/.medusa/server/src/api/admin/product-reviews/settings/route.d.ts +3 -0
- package/.medusa/server/src/api/admin/product-reviews/settings/route.js +63 -0
- package/.medusa/server/src/api/admin/shared-cart/settings/route.d.ts +5 -0
- package/.medusa/server/src/api/admin/shared-cart/settings/route.js +31 -0
- package/.medusa/server/src/api/admin/system-runtime/route.d.ts +2 -0
- package/.medusa/server/src/api/admin/system-runtime/route.js +18 -0
- package/.medusa/server/src/api/hooks/packeta/status/route.d.ts +2 -0
- package/.medusa/server/src/api/hooks/packeta/status/route.js +55 -0
- package/.medusa/server/src/api/middlewares.js +24 -1
- package/.medusa/server/src/api/store/abandoned-cart/recover/route.d.ts +2 -0
- package/.medusa/server/src/api/store/abandoned-cart/recover/route.js +37 -0
- package/.medusa/server/src/api/store/back-in-stock/route.d.ts +8 -0
- package/.medusa/server/src/api/store/back-in-stock/route.js +124 -0
- package/.medusa/server/src/api/store/core-carts/me/active/route.d.ts +2 -0
- package/.medusa/server/src/api/store/core-carts/me/active/route.js +54 -0
- package/.medusa/server/src/api/store/customer-activation/complete/route.d.ts +2 -0
- package/.medusa/server/src/api/store/customer-activation/complete/route.js +96 -0
- package/.medusa/server/src/api/store/customer-activation/route.d.ts +2 -0
- package/.medusa/server/src/api/store/customer-activation/route.js +34 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.d.ts +1 -0
- package/.medusa/server/src/api/store/products/[id]/reviews/route.js +76 -34
- package/.medusa/server/src/api/store/review-request/route.d.ts +2 -0
- package/.medusa/server/src/api/store/review-request/route.js +60 -0
- package/.medusa/server/src/api/store/shared-carts/[token]/route.d.ts +2 -0
- package/.medusa/server/src/api/store/shared-carts/[token]/route.js +52 -0
- package/.medusa/server/src/api/store/shared-carts/route.d.ts +13 -0
- package/.medusa/server/src/api/store/shared-carts/route.js +78 -0
- package/.medusa/server/src/core/abandoned-cart.d.ts +64 -0
- package/.medusa/server/src/core/abandoned-cart.js +197 -0
- package/.medusa/server/src/core/admin-cart-management.d.ts +18 -0
- package/.medusa/server/src/core/admin-cart-management.js +102 -0
- package/.medusa/server/src/core/admin-cart-visibility.d.ts +94 -0
- package/.medusa/server/src/core/admin-cart-visibility.js +192 -0
- package/.medusa/server/src/core/back-in-stock.d.ts +51 -0
- package/.medusa/server/src/core/back-in-stock.js +107 -0
- package/.medusa/server/src/core/cart-observability.d.ts +23 -0
- package/.medusa/server/src/core/cart-observability.js +54 -0
- package/.medusa/server/src/core/checkout-contract.d.ts +1 -0
- package/.medusa/server/src/core/checkout-contract.js +2 -1
- package/.medusa/server/src/core/customer-account-contract.d.ts +3 -0
- package/.medusa/server/src/core/customer-account-contract.js +4 -1
- package/.medusa/server/src/core/customer-activation.d.ts +120 -0
- package/.medusa/server/src/core/customer-activation.js +169 -0
- package/.medusa/server/src/core/customer-cart-resume.d.ts +21 -0
- package/.medusa/server/src/core/customer-cart-resume.js +72 -0
- package/.medusa/server/src/core/customer-email.d.ts +1 -1
- package/.medusa/server/src/core/customer-email.js +4 -1
- package/.medusa/server/src/core/native-migration-export.d.ts +6 -0
- package/.medusa/server/src/core/native-migration-export.js +105 -0
- package/.medusa/server/src/core/order-export.d.ts +11 -0
- package/.medusa/server/src/core/order-export.js +297 -0
- package/.medusa/server/src/core/review-request.d.ts +61 -0
- package/.medusa/server/src/core/review-request.js +105 -0
- package/.medusa/server/src/core/review-reward.d.ts +94 -0
- package/.medusa/server/src/core/review-reward.js +124 -0
- package/.medusa/server/src/core/runtime-health.d.ts +39 -0
- package/.medusa/server/src/core/runtime-health.js +250 -0
- package/.medusa/server/src/core/storefront-core-config.d.ts +10 -0
- package/.medusa/server/src/core/storefront-core-config.js +26 -1
- package/.medusa/server/src/core/version.d.ts +2 -2
- package/.medusa/server/src/core/version.js +2 -2
- package/.medusa/server/src/jobs/abandoned-cart-recovery.d.ts +23 -0
- package/.medusa/server/src/jobs/abandoned-cart-recovery.js +137 -0
- package/.medusa/server/src/jobs/back-in-stock-reconciliation.d.ts +15 -0
- package/.medusa/server/src/jobs/back-in-stock-reconciliation.js +90 -0
- package/.medusa/server/src/jobs/dpd-statusdata-sync.d.ts +17 -0
- package/.medusa/server/src/jobs/dpd-statusdata-sync.js +107 -0
- package/.medusa/server/src/jobs/mpl-push-tracking.d.ts +19 -0
- package/.medusa/server/src/jobs/mpl-push-tracking.js +183 -0
- package/.medusa/server/src/jobs/mpl-status-sync.d.ts +8 -2
- package/.medusa/server/src/jobs/mpl-status-sync.js +12 -7
- package/.medusa/server/src/jobs/product-review-request-dispatch.d.ts +28 -0
- package/.medusa/server/src/jobs/product-review-request-dispatch.js +84 -0
- package/.medusa/server/src/jobs/runtime-heartbeat.d.ts +12 -0
- package/.medusa/server/src/jobs/runtime-heartbeat.js +13 -0
- package/.medusa/server/src/jobs/shipping-status-sync.d.ts +8 -2
- package/.medusa/server/src/jobs/shipping-status-sync.js +11 -14
- package/.medusa/server/src/lib/modules/shipping/idempotency.js +3 -3
- package/.medusa/server/src/lib/modules/shipping/index.d.ts +1 -0
- package/.medusa/server/src/lib/modules/shipping/index.js +2 -1
- package/.medusa/server/src/lib/modules/shipping/tracking.d.ts +48 -0
- package/.medusa/server/src/lib/modules/shipping/tracking.js +368 -0
- package/.medusa/server/src/lib/modules/shipping/webhooks.d.ts +6 -9
- package/.medusa/server/src/lib/modules/shipping/webhooks.js +24 -137
- package/.medusa/server/src/modules/back-in-stock/index.d.ts +23 -0
- package/.medusa/server/src/modules/back-in-stock/index.js +16 -0
- package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.d.ts +5 -0
- package/.medusa/server/src/modules/back-in-stock/migrations/Migration20261101202000.js +18 -0
- package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.d.ts +13 -0
- package/.medusa/server/src/modules/back-in-stock/models/back-in-stock-subscription.js +23 -0
- package/.medusa/server/src/modules/back-in-stock/service.d.ts +22 -0
- package/.medusa/server/src/modules/back-in-stock/service.js +12 -0
- package/.medusa/server/src/modules/email-center/abandoned-cart-registration.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/abandoned-cart-registration.js +27 -0
- package/.medusa/server/src/modules/email-center/back-in-stock-registration.d.ts +1 -0
- package/.medusa/server/src/modules/email-center/back-in-stock-registration.js +27 -0
- package/.medusa/server/src/modules/email-center/defaults.js +7 -1
- package/.medusa/server/src/modules/email-center/index.d.ts +2 -0
- package/.medusa/server/src/modules/email-center/index.js +3 -1
- package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/abandoned-cart-registration.js +30 -0
- package/.medusa/server/src/modules/integration-settings/index.d.ts +1 -0
- package/.medusa/server/src/modules/integration-settings/index.js +2 -1
- package/.medusa/server/src/modules/integration-settings/storefront-public-registration.js +15 -1
- package/.medusa/server/src/modules/product-review/index.d.ts +14 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101113000.js +28 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101114500.js +20 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.d.ts +5 -0
- package/.medusa/server/src/modules/product-review/migrations/Migration20261101121500.js +18 -0
- package/.medusa/server/src/modules/product-review/models/product-review-settings.d.ts +15 -0
- package/.medusa/server/src/modules/product-review/models/product-review-settings.js +19 -0
- package/.medusa/server/src/modules/product-review/models/product-review.d.ts +6 -2
- package/.medusa/server/src/modules/product-review/models/product-review.js +7 -3
- package/.medusa/server/src/modules/product-review/service.d.ts +22 -1
- package/.medusa/server/src/modules/product-review/service.js +3 -2
- package/.medusa/server/src/modules/shared-cart/index.d.ts +21 -0
- package/.medusa/server/src/modules/shared-cart/index.js +13 -0
- package/.medusa/server/src/modules/shared-cart/migrations/Migration20261102010000.d.ts +5 -0
- package/.medusa/server/src/modules/shared-cart/migrations/Migration20261102010000.js +16 -0
- package/.medusa/server/src/modules/shared-cart/models/shared-cart.d.ts +10 -0
- package/.medusa/server/src/modules/shared-cart/models/shared-cart.js +17 -0
- package/.medusa/server/src/modules/shared-cart/service.d.ts +14 -0
- package/.medusa/server/src/modules/shared-cart/service.js +11 -0
- package/.medusa/server/src/modules/shared-cart/settings.d.ts +7 -0
- package/.medusa/server/src/modules/shared-cart/settings.js +64 -0
- package/.medusa/server/src/providers/dpd/index.d.ts +2 -0
- package/.medusa/server/src/providers/dpd/index.js +3 -1
- package/.medusa/server/src/providers/dpd/statusdata-ftp.d.ts +16 -0
- package/.medusa/server/src/providers/dpd/statusdata-ftp.js +268 -0
- package/.medusa/server/src/providers/dpd/statusdata.d.ts +14 -0
- package/.medusa/server/src/providers/dpd/statusdata.js +161 -0
- package/.medusa/server/src/providers/mpl/client.d.ts +3 -1
- package/.medusa/server/src/providers/mpl/client.js +154 -2
- package/.medusa/server/src/providers/mpl/service.js +31 -20
- package/.medusa/server/src/providers/mpl/types.d.ts +25 -0
- package/.medusa/server/src/providers/mpl/types.js +1 -1
- package/.medusa/server/src/providers/packeta/index.d.ts +1 -0
- package/.medusa/server/src/providers/packeta/index.js +2 -1
- package/.medusa/server/src/providers/packeta/push-tracking.d.ts +8 -0
- package/.medusa/server/src/providers/packeta/push-tracking.js +96 -0
- package/.medusa/server/src/providers/packeta/service.js +22 -2
- package/.medusa/server/src/scripts/core-init.d.ts +1 -1
- package/.medusa/server/src/scripts/core-init.js +3 -2
- package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.d.ts +7 -0
- package/.medusa/server/src/subscribers/back-in-stock-inventory-changed.js +65 -0
- package/.medusa/server/src/workflows/link-migrated-customer.d.ts +8 -0
- package/.medusa/server/src/workflows/link-migrated-customer.js +17 -0
- package/README.md +1 -1
- package/package.json +30 -8
|
@@ -0,0 +1,204 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const utils_1 = require("@medusajs/framework/utils");
|
|
6
|
+
const core_flows_1 = require("@medusajs/medusa/core-flows");
|
|
7
|
+
const EXPORT_HEADERS = [
|
|
8
|
+
"Price List Id",
|
|
9
|
+
"Price List Title",
|
|
10
|
+
"Customer Group Ids",
|
|
11
|
+
"Price Id",
|
|
12
|
+
"Variant Id",
|
|
13
|
+
"Variant Sku",
|
|
14
|
+
"Amount",
|
|
15
|
+
"Currency Code",
|
|
16
|
+
"Min Quantity",
|
|
17
|
+
"Max Quantity",
|
|
18
|
+
];
|
|
19
|
+
async function GET(req, res) {
|
|
20
|
+
const priceLists = await loadPriceLists(req, undefined);
|
|
21
|
+
const rows = priceLists.flatMap((list) => {
|
|
22
|
+
const customerGroups = customerGroupIds(list);
|
|
23
|
+
return (list.prices || []).map((price) => [
|
|
24
|
+
list.id,
|
|
25
|
+
list.title || "",
|
|
26
|
+
customerGroups.join(";"),
|
|
27
|
+
price.id || "",
|
|
28
|
+
price.price_set?.variant?.id || "",
|
|
29
|
+
price.price_set?.variant?.sku || "",
|
|
30
|
+
printable(price.amount),
|
|
31
|
+
price.currency_code || "",
|
|
32
|
+
printable(price.min_quantity),
|
|
33
|
+
printable(price.max_quantity),
|
|
34
|
+
]);
|
|
35
|
+
});
|
|
36
|
+
res.setHeader("Cache-Control", "private, no-store, max-age=0");
|
|
37
|
+
return res.json({ headers: EXPORT_HEADERS, rows });
|
|
38
|
+
}
|
|
39
|
+
async function POST(req, res) {
|
|
40
|
+
const body = (req.body || {});
|
|
41
|
+
const rows = Array.isArray(body.rows) ? body.rows : [];
|
|
42
|
+
const dryRun = body.dry_run !== false;
|
|
43
|
+
const mode = body.mode === "skip" ? "skip" : "update";
|
|
44
|
+
if (!rows.length)
|
|
45
|
+
return res.status(400).json({ message: "Nincs importálható Price List ársor." });
|
|
46
|
+
if (rows.length > 10_000)
|
|
47
|
+
return res.status(400).json({ message: "Egy Price List import legfeljebb 10 000 sort tartalmazhat." });
|
|
48
|
+
const priceListIds = [...new Set(rows.map((row) => cell(row, "Price List Id")).filter(Boolean))];
|
|
49
|
+
if (!priceListIds.length)
|
|
50
|
+
return res.status(400).json({ message: "A Price List Id oszlop kötelező." });
|
|
51
|
+
const priceLists = await loadPriceLists(req, priceListIds);
|
|
52
|
+
const listMap = new Map(priceLists.map((list) => [list.id, list]));
|
|
53
|
+
const operations = new Map();
|
|
54
|
+
const errors = [];
|
|
55
|
+
const seen = new Set();
|
|
56
|
+
let skipped = 0;
|
|
57
|
+
for (let index = 0; index < rows.length; index++) {
|
|
58
|
+
const source = rows[index] || {};
|
|
59
|
+
const rowNumber = index + 2;
|
|
60
|
+
const priceListId = cell(source, "Price List Id");
|
|
61
|
+
const priceId = cell(source, "Price Id");
|
|
62
|
+
const variantId = cell(source, "Variant Id");
|
|
63
|
+
const currencyCode = cell(source, "Currency Code").toLowerCase();
|
|
64
|
+
const amount = parseRequiredNumber(source, "Amount");
|
|
65
|
+
const minQuantity = parseOptionalNumber(source, "Min Quantity");
|
|
66
|
+
const maxQuantity = parseOptionalNumber(source, "Max Quantity");
|
|
67
|
+
if (!priceListId || !listMap.has(priceListId)) {
|
|
68
|
+
errors.push({ row: rowNumber, message: `Ismeretlen vagy hiányzó Price List Id: ${priceListId || "—"}` });
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!variantId) {
|
|
72
|
+
errors.push({ row: rowNumber, message: "Hiányzó Variant Id." });
|
|
73
|
+
continue;
|
|
74
|
+
}
|
|
75
|
+
if (!currencyCode) {
|
|
76
|
+
errors.push({ row: rowNumber, message: "Hiányzó Currency Code." });
|
|
77
|
+
continue;
|
|
78
|
+
}
|
|
79
|
+
if (amount == null || amount < 0) {
|
|
80
|
+
errors.push({ row: rowNumber, message: "Az Amount mezőnek 0 vagy pozitív számnak kell lennie." });
|
|
81
|
+
continue;
|
|
82
|
+
}
|
|
83
|
+
if (minQuantity === false || maxQuantity === false) {
|
|
84
|
+
errors.push({ row: rowNumber, message: "A Min Quantity / Max Quantity csak szám vagy üres érték lehet." });
|
|
85
|
+
continue;
|
|
86
|
+
}
|
|
87
|
+
const list = listMap.get(priceListId);
|
|
88
|
+
const existingIds = new Set((list.prices || []).map((price) => String(price.id || "")).filter(Boolean));
|
|
89
|
+
if (priceId && !existingIds.has(priceId)) {
|
|
90
|
+
errors.push({ row: rowNumber, message: `A Price Id (${priceId}) nem ehhez a Price Listhez tartozik.` });
|
|
91
|
+
continue;
|
|
92
|
+
}
|
|
93
|
+
const identity = priceId
|
|
94
|
+
? `${priceListId}:price:${priceId}`
|
|
95
|
+
: `${priceListId}:new:${variantId}:${currencyCode}:${minQuantity ?? ""}:${maxQuantity ?? ""}`;
|
|
96
|
+
if (seen.has(identity)) {
|
|
97
|
+
errors.push({ row: rowNumber, message: "Duplikált Price List ársor a fájlban." });
|
|
98
|
+
continue;
|
|
99
|
+
}
|
|
100
|
+
seen.add(identity);
|
|
101
|
+
const operation = operations.get(priceListId) || { create: [], update: [] };
|
|
102
|
+
const price = {
|
|
103
|
+
amount,
|
|
104
|
+
currency_code: currencyCode,
|
|
105
|
+
variant_id: variantId,
|
|
106
|
+
...(minQuantity == null ? {} : { min_quantity: minQuantity }),
|
|
107
|
+
...(maxQuantity == null ? {} : { max_quantity: maxQuantity }),
|
|
108
|
+
};
|
|
109
|
+
if (priceId) {
|
|
110
|
+
if (mode === "skip") {
|
|
111
|
+
skipped++;
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
operation.update.push({ id: priceId, ...price });
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
else {
|
|
118
|
+
operation.create.push(price);
|
|
119
|
+
}
|
|
120
|
+
operations.set(priceListId, operation);
|
|
121
|
+
}
|
|
122
|
+
const created = [...operations.values()].reduce((sum, operation) => sum + operation.create.length, 0);
|
|
123
|
+
const updated = [...operations.values()].reduce((sum, operation) => sum + operation.update.length, 0);
|
|
124
|
+
if (!dryRun) {
|
|
125
|
+
for (const [priceListId, operation] of operations) {
|
|
126
|
+
if (!operation.create.length && !operation.update.length)
|
|
127
|
+
continue;
|
|
128
|
+
await (0, core_flows_1.batchPriceListPricesWorkflow)(req.scope).run({
|
|
129
|
+
input: {
|
|
130
|
+
data: {
|
|
131
|
+
id: priceListId,
|
|
132
|
+
create: operation.create,
|
|
133
|
+
update: operation.update,
|
|
134
|
+
delete: [],
|
|
135
|
+
},
|
|
136
|
+
},
|
|
137
|
+
});
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
return res.json({
|
|
141
|
+
dry_run: dryRun,
|
|
142
|
+
mode,
|
|
143
|
+
total: rows.length,
|
|
144
|
+
created,
|
|
145
|
+
updated,
|
|
146
|
+
skipped,
|
|
147
|
+
failed: errors.length,
|
|
148
|
+
errors: errors.slice(0, 200),
|
|
149
|
+
});
|
|
150
|
+
}
|
|
151
|
+
async function loadPriceLists(req, ids) {
|
|
152
|
+
const query = req.scope.resolve(utils_1.ContainerRegistrationKeys.QUERY);
|
|
153
|
+
const { data } = await query.graph({
|
|
154
|
+
entity: "price_list",
|
|
155
|
+
fields: [
|
|
156
|
+
"id",
|
|
157
|
+
"title",
|
|
158
|
+
"type",
|
|
159
|
+
"status",
|
|
160
|
+
"rules",
|
|
161
|
+
"prices.id",
|
|
162
|
+
"prices.amount",
|
|
163
|
+
"prices.currency_code",
|
|
164
|
+
"prices.min_quantity",
|
|
165
|
+
"prices.max_quantity",
|
|
166
|
+
"prices.price_set.variant.id",
|
|
167
|
+
"prices.price_set.variant.sku",
|
|
168
|
+
],
|
|
169
|
+
filters: ids?.length ? { id: ids } : {},
|
|
170
|
+
pagination: { take: ids?.length ? Math.min(ids.length, 10_000) : 1_000 },
|
|
171
|
+
});
|
|
172
|
+
return (data || []);
|
|
173
|
+
}
|
|
174
|
+
function customerGroupIds(list) {
|
|
175
|
+
const raw = list.rules?.["customer.groups.id"];
|
|
176
|
+
if (Array.isArray(raw))
|
|
177
|
+
return raw.map(String);
|
|
178
|
+
if (raw == null || raw === "")
|
|
179
|
+
return [];
|
|
180
|
+
return [String(raw)];
|
|
181
|
+
}
|
|
182
|
+
function cell(row, wanted) {
|
|
183
|
+
const key = Object.keys(row).find((candidate) => candidate.trim().toLowerCase() === wanted.toLowerCase());
|
|
184
|
+
const value = key ? row[key] : undefined;
|
|
185
|
+
return value == null ? "" : String(value).trim();
|
|
186
|
+
}
|
|
187
|
+
function parseRequiredNumber(row, key) {
|
|
188
|
+
const raw = cell(row, key).replace(",", ".");
|
|
189
|
+
if (!raw)
|
|
190
|
+
return null;
|
|
191
|
+
const value = Number(raw);
|
|
192
|
+
return Number.isFinite(value) ? value : null;
|
|
193
|
+
}
|
|
194
|
+
function parseOptionalNumber(row, key) {
|
|
195
|
+
const raw = cell(row, key).replace(",", ".");
|
|
196
|
+
if (!raw)
|
|
197
|
+
return null;
|
|
198
|
+
const value = Number(raw);
|
|
199
|
+
return Number.isFinite(value) ? value : false;
|
|
200
|
+
}
|
|
201
|
+
function printable(value) {
|
|
202
|
+
return value == null ? "" : String(value);
|
|
203
|
+
}
|
|
204
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtbWlncmF0aW9uL3ByaWNlLWxpc3QtcHJpY2VzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBeUNBLGtCQW9CQztBQUVELG9CQXdIQztBQXRMRCxxREFBcUU7QUFDckUsNERBQTBFO0FBMEIxRSxNQUFNLGNBQWMsR0FBRztJQUNyQixlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLG9CQUFvQjtJQUNwQixVQUFVO0lBQ1YsWUFBWTtJQUNaLGFBQWE7SUFDYixRQUFRO0lBQ1IsZUFBZTtJQUNmLGNBQWM7SUFDZCxjQUFjO0NBQ2YsQ0FBQTtBQUVNLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxNQUFNLFVBQVUsR0FBRyxNQUFNLGNBQWMsQ0FBQyxHQUFHLEVBQUUsU0FBUyxDQUFDLENBQUE7SUFDdkQsTUFBTSxJQUFJLEdBQUcsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFO1FBQ3ZDLE1BQU0sY0FBYyxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFBO1FBQzdDLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxJQUFJLEVBQUUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUM7WUFDeEMsSUFBSSxDQUFDLEVBQUU7WUFDUCxJQUFJLENBQUMsS0FBSyxJQUFJLEVBQUU7WUFDaEIsY0FBYyxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDeEIsS0FBSyxDQUFDLEVBQUUsSUFBSSxFQUFFO1lBQ2QsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsRUFBRSxJQUFJLEVBQUU7WUFDbEMsS0FBSyxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxJQUFJLEVBQUU7WUFDbkMsU0FBUyxDQUFDLEtBQUssQ0FBQyxN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
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const native_migration_export_1 = require("../../../../core/native-migration-export");
|
|
5
|
+
async function GET(req, res) {
|
|
6
|
+
try {
|
|
7
|
+
const exported = await (0, native_migration_export_1.exportNativeMigrationCsv)(req.scope, "products");
|
|
8
|
+
res.setHeader("Cache-Control", "private, no-store, max-age=0");
|
|
9
|
+
res.setHeader("Content-Type", "text/csv; charset=utf-8");
|
|
10
|
+
res.setHeader("Content-Disposition", `attachment; filename="${safeFilename(exported.filename)}"`);
|
|
11
|
+
return res.send(exported.csv);
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return res.status(500).json({
|
|
15
|
+
message: error instanceof Error
|
|
16
|
+
? error.message
|
|
17
|
+
: "A natív termékexport nem készíthető el.",
|
|
18
|
+
});
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
function safeFilename(value) {
|
|
22
|
+
return value.replace(/[\r\n"\\/]+/g, "-") || "products.csv";
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtbWlncmF0aW9uL3Byb2R1Y3RzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsa0JBa0JDO0FBcEJELHNGQUFtRjtBQUU1RSxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsSUFBSSxDQUFDO1FBQ0gsTUFBTSxRQUFRLEdBQUcsTUFBTSxJQUFBLGtEQUF3QixFQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUE7UUFDdEUsR0FBRyxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsOEJBQThCLENBQUMsQ0FBQTtRQUM5RCxHQUFHLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSx5QkFBeUIsQ0FBQyxDQUFBO1FBQ3hELEdBQUcsQ0FBQyxTQUFTLENBQ1gscUJBQXFCLEVBQ3JCLHlCQUF5QixZQUFZLENBQUMsUUFBUSxDQUFDLFFBQVEsQ0FBQyxHQUFHLENBQzVELENBQUE7UUFDRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQ0wsS0FBSyxZQUFZLEtBQUs7Z0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFDZixDQUFDLENBQUMseUNBQXlDO1NBQ2hELENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsS0FBYTtJQUNqQyxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsY0FBYyxFQUFFLEdBQUcsQ0FBQyxJQUFJLGNBQWMsQ0FBQTtBQUM3RCxDQUFDIn0=
|
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.POST = POST;
|
|
4
4
|
const core_audit_1 = require("../../../../modules/core-audit");
|
|
5
5
|
const product_review_1 = require("../../../../modules/product-review");
|
|
6
|
+
const review_reward_1 = require("../../../../core/review-reward");
|
|
6
7
|
async function POST(req, res) {
|
|
7
8
|
const service = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
8
9
|
const status = text(req.body?.status, 40);
|
|
@@ -12,13 +13,44 @@ async function POST(req, res) {
|
|
|
12
13
|
const actorId = req.auth_context?.actor_id || null;
|
|
13
14
|
try {
|
|
14
15
|
const review = await service.retrieveProductReview(req.params.id);
|
|
15
|
-
|
|
16
|
+
let updated = await service.updateProductReviews({
|
|
16
17
|
id: review.id,
|
|
17
18
|
status,
|
|
18
19
|
moderation_note: text(req.body?.moderation_note, 2000) || null,
|
|
19
20
|
moderated_at: new Date(),
|
|
20
21
|
moderated_by: actorId,
|
|
21
22
|
});
|
|
23
|
+
let rewardError = null;
|
|
24
|
+
if (status === "published" && review.status !== "published" && !review.reward_coupon_code) {
|
|
25
|
+
try {
|
|
26
|
+
const [settings] = await service.listProductReviewSettings({}, { take: 1 });
|
|
27
|
+
const reward = await (0, review_reward_1.issuePublishedReviewReward)({
|
|
28
|
+
container: req.scope,
|
|
29
|
+
review: updated,
|
|
30
|
+
settings: settings || { reward_enabled: true, reward_type: "percentage", reward_value: 10, reward_currency_code: "huf" },
|
|
31
|
+
});
|
|
32
|
+
if (reward && !reward.existing) {
|
|
33
|
+
updated = await service.updateProductReviews({
|
|
34
|
+
id: review.id,
|
|
35
|
+
reward_promotion_id: reward.id,
|
|
36
|
+
reward_coupon_code: reward.code,
|
|
37
|
+
reward_issued_at: new Date(),
|
|
38
|
+
});
|
|
39
|
+
try {
|
|
40
|
+
const mail = await (0, review_reward_1.sendPublishedReviewRewardEmail)({ container: req.scope, review: updated, reward: reward });
|
|
41
|
+
if (!mail?.skipped) {
|
|
42
|
+
updated = await service.updateProductReviews({ id: review.id, reward_email_sent_at: new Date() });
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
catch {
|
|
46
|
+
// A kupon létrejött; e-mail hiba miatt nem generálunk új kupont.
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
catch (error) {
|
|
51
|
+
rewardError = error instanceof Error ? error.message : "Az értékelési jutalom létrehozása nem sikerült.";
|
|
52
|
+
}
|
|
53
|
+
}
|
|
22
54
|
await (0, core_audit_1.writeCoreAudit)(req.scope, {
|
|
23
55
|
action: `product_review.${status}`,
|
|
24
56
|
resourceType: "product_review",
|
|
@@ -26,9 +58,9 @@ async function POST(req, res) {
|
|
|
26
58
|
integration: "product-review",
|
|
27
59
|
actorId,
|
|
28
60
|
summary: `Termékértékelés moderálva: ${status}.`,
|
|
29
|
-
details: { product_id: review.product_id, customer_id: review.customer_id, status },
|
|
61
|
+
details: { product_id: review.product_id, customer_id: review.customer_id, status, reward_error: rewardError },
|
|
30
62
|
});
|
|
31
|
-
return res.json({ review: updated });
|
|
63
|
+
return res.json({ review: updated, reward_error: rewardError });
|
|
32
64
|
}
|
|
33
65
|
catch (error) {
|
|
34
66
|
return res.status(400).json({ message: error instanceof Error ? error.message : "Az értékelés nem moderálható." });
|
|
@@ -37,4 +69,4 @@ async function POST(req, res) {
|
|
|
37
69
|
function text(value, max) {
|
|
38
70
|
return typeof value === "string" ? value.trim().slice(0, max) : "";
|
|
39
71
|
}
|
|
40
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtcmV2aWV3cy9baWRdL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBY0Esb0JBOERDO0FBM0VELCtEQUErRDtBQUMvRCx1RUFJMkM7QUFDM0Msa0VBR3VDO0FBSWhDLEtBQUssVUFBVSxJQUFJLENBQUMsR0FBd0IsRUFBRSxHQUFtQjtJQUN0RSxNQUFNLE9BQU8sR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxzQ0FBcUIsQ0FBeUIsQ0FBQTtJQUNoRixNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFDekMsSUFBSSxDQUFFLHdDQUE2QyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDO1FBQ3JFLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsZ0NBQWdDLEVBQUUsQ0FBQyxDQUFBO0lBQzVFLENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBSSxHQUEyRCxDQUFDLFlBQVksRUFBRSxRQUFRLElBQUksSUFBSSxDQUFBO0lBQzNHLElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sT0FBTyxDQUFDLHFCQUFxQixDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFtQyxDQUFBO1FBQ25HLElBQUksT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLG9CQUFvQixDQUFDO1lBQy9DLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNiLE1BQU07WUFDTixlQUFlLEVBQUUsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsZUFBZSxFQUFFLElBQUksQ0FBQyxJQUFJLElBQUk7WUFDOUQsWUFBWSxFQUFFLElBQUksSUFBSSxFQUFFO1lBQ3hCLFlBQVksRUFBRSxPQUFPO1NBQ2IsQ0FBbUMsQ0FBQTtRQUU3QyxJQUFJLFdBQVcsR0FBa0IsSUFBSSxDQUFBO1FBQ3JDLElBQUksTUFBTSxLQUFLLFdBQVcsSUFBSSxNQUFNLENBQUMsTUFBTSxLQUFLLFdBQVcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1lBQzFGLElBQUksQ0FBQztnQkFDSCxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsTUFBTSxPQUFPLENBQUMseUJBQXlCLENBQUMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBVyxDQUEwQyxDQUFBO2dCQUM3SCxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsMENBQTBCLEVBQUM7b0JBQzlDLFNBQVMsRUFBRSxHQUFHLENBQUMsS0FBYztvQkFDN0IsTUFBTSxFQUFFLE9BQU87b0JBQ2YsUUFBUSxFQUFFLFFBQVEsSUFBSSxFQUFFLGNBQWMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFlBQVksRUFBRSxZQUFZLEVBQUUsRUFBRSxFQUFFLG9CQUFvQixFQUFFLEtBQUssRUFBRTtpQkFDekgsQ0FBQyxDQUFBO2dCQUNGLElBQUksTUFBTSxJQUFJLENBQUMsTUFBTSxDQUFDLFFBQVEsRUFBRSxDQUFDO29CQUMvQixPQUFPLEdBQUcsTUFBTSxPQUFPLENBQUMsb0JBQW9CLENBQUM7d0JBQzNDLEVBQUUsRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDYixtQkFBbUIsRUFBRSxNQUFNLENBQUMsRUFBRTt3QkFDOUIsa0JBQWtCLEVBQUUsTUFBTSxDQUFDLElBQUk7d0JBQy9CLGdCQUFnQixFQUFFLElBQUksSUFBSSxFQUFFO3FCQUNwQixDQUFtQyxDQUFBO29CQUM3QyxJQUFJLENBQUM7d0JBQ0gsTUFBTSxJQUFJLEdBQUcsTUFBTSxJQUFBLDhDQUE4QixFQUFDLEVBQUUsU0FBUyxFQUFFLEdBQUcsQ0FBQyxLQUFjLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBYSxFQUFFLENBQUMsQ0FBQTt3QkFDNUgsSUFBSSxDQUFDLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzs0QkFDbkIsT0FBTyxHQUFHLE1BQU0sT0FBTyxDQUFDLG9CQUFvQixDQUFDLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxFQUFFLEVBQUUsb0JBQW9CLEVBQUUsSUFBSSxJQUFJLEVBQUUsRUFBVyxDQUFtQyxDQUFBO3dCQUM5SSxDQUFDO29CQUNILENBQUM7b0JBQUMsTUFBTSxDQUFDO3dCQUNQLGlFQUFpRTtvQkFDbkUsQ0FBQztnQkFDSCxDQUFDO1lBQ0gsQ0FBQztZQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7Z0JBQ2YsV0FBVyxHQUFHLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLGlEQUFpRCxDQUFBO1lBQzFHLENBQUM7UUFDSCxDQUFDO1FBRUQsTUFBTSxJQUFBLDJCQUFjLEVBQUMsR0FBRyxDQUFDLEtBQWMsRUFBRTtZQUN2QyxNQUFNLEVBQUUsa0JBQWtCLE1BQU0sRUFBRTtZQUNsQyxZQUFZLEVBQUUsZ0JBQWdCO1lBQzlCLFVBQVUsRUFBRSxNQUFNLENBQUMsRUFBRTtZQUNyQixXQUFXLEVBQUUsZ0JBQWdCO1lBQzdCLE9BQU87WUFDUCxPQUFPLEVBQUUsOEJBQThCLE1BQU0sR0FBRztZQUNoRCxPQUFPLEVBQUUsRUFBRSxVQUFVLEVBQUUsTUFBTSxDQUFDLFVBQVUsRUFBRSxXQUFXLEVBQUUsTUFBTSxDQUFDLFdBQVcsRUFBRSxNQUFNLEVBQUUsWUFBWSxFQUFFLFdBQVcsRUFBRTtTQUMvRyxDQUFDLENBQUE7UUFFRixPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLFlBQVksRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFBO0lBQ2pFLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQywrQkFBK0IsRUFBRSxDQUFDLENBQUE7SUFDcEgsQ0FBQztBQUNILENBQUM7QUFFRCxTQUFTLElBQUksQ0FBQyxLQUFjLEVBQUUsR0FBVztJQUN2QyxPQUFPLE9BQU8sS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQTtBQUNwRSxDQUFDIn0=
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const product_review_1 = require("../../../../modules/product-review");
|
|
6
|
+
const SETTINGS_ID = "product-review-settings";
|
|
7
|
+
async function GET(req, res) {
|
|
8
|
+
const service = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
9
|
+
const settings = await getOrCreateSettings(service);
|
|
10
|
+
return res.json({ settings });
|
|
11
|
+
}
|
|
12
|
+
async function POST(req, res) {
|
|
13
|
+
const service = req.scope.resolve(product_review_1.PRODUCT_REVIEW_MODULE);
|
|
14
|
+
const current = await getOrCreateSettings(service);
|
|
15
|
+
const body = (req.body || {});
|
|
16
|
+
const rewardType = body.reward_type === "fixed" ? "fixed" : "percentage";
|
|
17
|
+
const rawValue = Number(body.reward_value ?? current.reward_value ?? 5);
|
|
18
|
+
const rewardValue = Number.isFinite(rawValue) && rawValue > 0
|
|
19
|
+
? (rewardType === "percentage" ? Math.min(rawValue, 100) : rawValue)
|
|
20
|
+
: current.reward_value || 5;
|
|
21
|
+
const trigger = body.request_trigger === "order" || body.request_trigger === "fulfillment" || body.request_trigger === "delivery"
|
|
22
|
+
? body.request_trigger
|
|
23
|
+
: (current.request_trigger || "delivery");
|
|
24
|
+
const rawDelay = Number(body.request_delay_days ?? current.request_delay_days ?? 2);
|
|
25
|
+
const requestDelayDays = Number.isFinite(rawDelay) ? Math.max(0, Math.min(90, Math.trunc(rawDelay))) : 2;
|
|
26
|
+
const rawExpiry = Number(body.reward_coupon_expiry_days ?? current.reward_coupon_expiry_days ?? 30);
|
|
27
|
+
const rewardCouponExpiryDays = Number.isFinite(rawExpiry) ? Math.max(0, Math.min(3650, Math.trunc(rawExpiry))) : 30;
|
|
28
|
+
const settings = await service.updateProductReviewSettings({
|
|
29
|
+
id: current.id,
|
|
30
|
+
auto_publish: body.auto_publish === true,
|
|
31
|
+
reward_enabled: body.reward_enabled !== false,
|
|
32
|
+
reward_type: rewardType,
|
|
33
|
+
reward_value: rewardValue,
|
|
34
|
+
reward_currency_code: String(body.reward_currency_code || current.reward_currency_code || "huf").trim().toLowerCase() || "huf",
|
|
35
|
+
reward_coupon_expiry_days: rewardCouponExpiryDays,
|
|
36
|
+
reward_once_per_order: body.reward_once_per_order !== false,
|
|
37
|
+
reward_email_enabled: body.reward_email_enabled !== false,
|
|
38
|
+
request_email_enabled: body.request_email_enabled !== false,
|
|
39
|
+
request_trigger: trigger,
|
|
40
|
+
request_delay_days: requestDelayDays,
|
|
41
|
+
});
|
|
42
|
+
return res.json({ settings });
|
|
43
|
+
}
|
|
44
|
+
async function getOrCreateSettings(service) {
|
|
45
|
+
const [existing] = await service.listProductReviewSettings({}, { take: 1 });
|
|
46
|
+
if (existing)
|
|
47
|
+
return existing;
|
|
48
|
+
return service.createProductReviewSettings({
|
|
49
|
+
id: SETTINGS_ID,
|
|
50
|
+
auto_publish: false,
|
|
51
|
+
reward_enabled: true,
|
|
52
|
+
reward_type: "percentage",
|
|
53
|
+
reward_value: 5,
|
|
54
|
+
reward_currency_code: "huf",
|
|
55
|
+
reward_coupon_expiry_days: 30,
|
|
56
|
+
reward_once_per_order: true,
|
|
57
|
+
reward_email_enabled: true,
|
|
58
|
+
request_email_enabled: true,
|
|
59
|
+
request_trigger: "delivery",
|
|
60
|
+
request_delay_days: 2,
|
|
61
|
+
});
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3Byb2R1Y3QtcmV2aWV3cy9zZXR0aW5ncy9yb3V0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOztBQUtBLGtCQUlDO0FBRUQsb0JBaUNDO0FBM0NELHVFQUFxRztBQUVyRyxNQUFNLFdBQVcsR0FBRyx5QkFBeUIsQ0FBQTtBQUV0QyxLQUFLLFVBQVUsR0FBRyxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDL0QsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsc0NBQXFCLENBQXlCLENBQUE7SUFDaEYsTUFBTSxRQUFRLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNuRCxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0FBQy9CLENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsc0NBQXFCLENBQXlCLENBQUE7SUFDaEYsTUFBTSxPQUFPLEdBQUcsTUFBTSxtQkFBbUIsQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUNsRCxNQUFNLElBQUksR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLElBQUksRUFBRSxDQUE0QixDQUFBO0lBQ3hELE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLEtBQUssT0FBTyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFlBQVksQ0FBQTtJQUN4RSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLFlBQVksSUFBSSxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsQ0FBQyxDQUFBO0lBQ3ZFLE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMs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
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { MedusaRequest, MedusaResponse } from "@medusajs/framework/http";
|
|
2
|
+
export declare function GET(req: MedusaRequest, res: MedusaResponse): Promise<MedusaResponse>;
|
|
3
|
+
export declare function POST(req: MedusaRequest<{
|
|
4
|
+
ttl_days?: number;
|
|
5
|
+
}>, res: MedusaResponse): Promise<MedusaResponse>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
exports.POST = POST;
|
|
5
|
+
const integration_settings_1 = require("../../../../modules/integration-settings");
|
|
6
|
+
const settings_1 = require("../../../../modules/shared-cart/settings");
|
|
7
|
+
async function GET(req, res) {
|
|
8
|
+
try {
|
|
9
|
+
const store = req.scope.resolve(integration_settings_1.INTEGRATION_SETTINGS_MODULE);
|
|
10
|
+
const ttl_days = await (0, settings_1.getSharedCartTtlDays)(store);
|
|
11
|
+
return res.json({ ttl_days });
|
|
12
|
+
}
|
|
13
|
+
catch (error) {
|
|
14
|
+
return res.status(500).json({
|
|
15
|
+
message: error instanceof Error ? error.message : "A kosármegosztás beállítása nem tölthető be.",
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async function POST(req, res) {
|
|
20
|
+
try {
|
|
21
|
+
const store = req.scope.resolve(integration_settings_1.INTEGRATION_SETTINGS_MODULE);
|
|
22
|
+
const ttl_days = await (0, settings_1.saveSharedCartTtlDays)(store, Number(req.body?.ttl_days));
|
|
23
|
+
return res.json({ ttl_days });
|
|
24
|
+
}
|
|
25
|
+
catch (error) {
|
|
26
|
+
return res.status(400).json({
|
|
27
|
+
message: error instanceof Error ? error.message : "A kosármegosztás beállítása nem menthető.",
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3NoYXJlZC1jYXJ0L3NldHRpbmdzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBVUEsa0JBVUM7QUFFRCxvQkFhQztBQWxDRCxtRkFHaUQ7QUFDakQsdUVBR2lEO0FBRTFDLEtBQUssVUFBVSxHQUFHLENBQUMsR0FBa0IsRUFBRSxHQUFtQjtJQUMvRCxJQUFJLENBQUM7UUFDSCxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxrREFBMkIsQ0FBd0MsQ0FBQTtRQUNuRyxNQUFNLFFBQVEsR0FBRyxNQUFNLElBQUEsK0JBQW9CLEVBQUMsS0FBSyxDQUFDLENBQUE7UUFDbEQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLENBQUMsQ0FBQTtJQUMvQixDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUM7WUFDMUIsT0FBTyxFQUFFLEtBQUssWUFBWSxLQUFLLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLDhDQUE4QztTQUNqRyxDQUFDLENBQUE7SUFDSixDQUFDO0FBQ0gsQ0FBQztBQUVNLEtBQUssVUFBVSxJQUFJLENBQ3hCLEdBQXlDLEVBQ3pDLEdBQW1CO0lBRW5CLElBQUksQ0FBQztRQUNILE1BQU0sS0FBSyxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLGtEQUEyQixDQUF3QyxDQUFBO1FBQ25HLE1BQU0sUUFBUSxHQUFHLE1BQU0sSUFBQSxnQ0FBcUIsRUFBQyxLQUFLLEVBQUUsTUFBTSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQTtRQUMvRSxPQUFPLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFBO0lBQy9CLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQUUsS0FBSyxZQUFZLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsMkNBQTJDO1NBQzlGLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.GET = GET;
|
|
4
|
+
const runtime_health_1 = require("../../../core/runtime-health");
|
|
5
|
+
async function GET(_req, res) {
|
|
6
|
+
try {
|
|
7
|
+
res.setHeader("Cache-Control", "private, no-store, max-age=0");
|
|
8
|
+
return res.json((0, runtime_health_1.collectRuntimeHealth)());
|
|
9
|
+
}
|
|
10
|
+
catch (error) {
|
|
11
|
+
return res.status(500).json({
|
|
12
|
+
message: error instanceof Error
|
|
13
|
+
? error.message
|
|
14
|
+
: "A runtime állapot nem ellenőrizhető.",
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3N5c3RlbS1ydW50aW1lL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBSUEsa0JBWUM7QUFkRCxpRUFBbUU7QUFFNUQsS0FBSyxVQUFVLEdBQUcsQ0FBQyxJQUFtQixFQUFFLEdBQW1CO0lBQ2hFLElBQUksQ0FBQztRQUNILEdBQUcsQ0FBQyxTQUFTLENBQUMsZUFBZSxFQUFFLDhCQUE4QixDQUFDLENBQUE7UUFDOUQsT0FBTyxHQUFHLENBQUMsSUFBSSxDQUFDLElBQUEscUNBQW9CLEdBQUUsQ0FBQyxDQUFBO0lBQ3pDLENBQUM7SUFBQyxPQUFPLEtBQUssRUFBRSxDQUFDO1FBQ2YsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQztZQUMxQixPQUFPLEVBQ0wsS0FBSyxZQUFZLEtBQUs7Z0JBQ3BCLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTztnQkFDZixDQUFDLENBQUMsc0NBQXNDO1NBQzdDLENBQUMsQ0FBQTtJQUNKLENBQUM7QUFDSCxDQUFDIn0=
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.POST = POST;
|
|
4
|
+
const packeta_1 = require("../../../../providers/packeta");
|
|
5
|
+
const shipping_1 = require("../../../../lib/modules/shipping");
|
|
6
|
+
const integration_operation_1 = require("../../../../modules/integration-operation");
|
|
7
|
+
function headerValue(value) {
|
|
8
|
+
return Array.isArray(value) ? value[0] : value;
|
|
9
|
+
}
|
|
10
|
+
async function POST(req, res) {
|
|
11
|
+
const rawBody = req.rawBody
|
|
12
|
+
? req.rawBody.toString("utf8")
|
|
13
|
+
: JSON.stringify(req.body ?? {});
|
|
14
|
+
const timestamp = headerValue(req.headers["x-webhook-timestamp"]);
|
|
15
|
+
const signature = headerValue(req.headers["x-webhook-signature"]);
|
|
16
|
+
const eventId = headerValue(req.headers["x-webhook-event-id"]);
|
|
17
|
+
if (!(0, packeta_1.verifyPacketaPushSignature)({
|
|
18
|
+
rawBody,
|
|
19
|
+
timestamp,
|
|
20
|
+
signature,
|
|
21
|
+
signingKey: process.env.PACKETA_WEBHOOK_SIGNING_KEY,
|
|
22
|
+
})) {
|
|
23
|
+
return res.status(401).json({ message: "Érvénytelen Packeta webhook aláírás." });
|
|
24
|
+
}
|
|
25
|
+
let event;
|
|
26
|
+
try {
|
|
27
|
+
event = (0, packeta_1.packetaPushEvent)(req.body, eventId);
|
|
28
|
+
}
|
|
29
|
+
catch (error) {
|
|
30
|
+
return res.status(400).json({
|
|
31
|
+
message: error instanceof Error ? error.message : "Érvénytelen Packeta tracking esemény.",
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
try {
|
|
35
|
+
const orderService = req.scope.resolve("order");
|
|
36
|
+
const operationStore = req.scope.resolve(integration_operation_1.INTEGRATION_OPERATION_MODULE);
|
|
37
|
+
const result = await (0, shipping_1.applyNormalizedTrackingEvent)({
|
|
38
|
+
orderService,
|
|
39
|
+
operationStore,
|
|
40
|
+
event,
|
|
41
|
+
});
|
|
42
|
+
if (!result) {
|
|
43
|
+
// Packeta retries non-2xx responses with exponential backoff. If the
|
|
44
|
+
// order/operation is not visible yet, keep the signed event retryable.
|
|
45
|
+
return res.status(503).json({ received: true, matched: false });
|
|
46
|
+
}
|
|
47
|
+
return res.status(200).json({ received: true, matched: true, ...result });
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
return res.status(503).json({
|
|
51
|
+
message: error instanceof Error ? error.message : "Packeta tracking feldolgozási hiba.",
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2hvb2tzL3BhY2tldGEvc3RhdHVzL3JvdXRlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBa0JBLG9CQXVEQztBQXhFRCwyREFHc0M7QUFDdEMsK0RBR3lDO0FBQ3pDLHFGQUdrRDtBQUVsRCxTQUFTLFdBQVcsQ0FBQyxLQUFvQztJQUN2RCxPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFBO0FBQ2hELENBQUM7QUFFTSxLQUFLLFVBQVUsSUFBSSxDQUFDLEdBQWtCLEVBQUUsR0FBbUI7SUFDaEUsTUFBTSxPQUFPLEdBQUcsR0FBRyxDQUFDLE9BQU87UUFDekIsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQztRQUM5QixDQUFDLENBQUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxJQUFJLEVBQUUsQ0FBQyxDQUFBO0lBQ2xDLE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FDM0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBa0MsQ0FDcEUsQ0FBQTtJQUNELE1BQU0sU0FBUyxHQUFHLFdBQVcsQ0FDM0IsR0FBRyxDQUFDLE9BQU8sQ0FBQyxxQkFBcUIsQ0FBa0MsQ0FDcEUsQ0FBQTtJQUNELE1BQU0sT0FBTyxHQUFHLFdBQVcsQ0FDekIsR0FBRyxDQUFDLE9BQU8sQ0FBQyxvQkFBb0IsQ0FBa0MsQ0FDbkUsQ0FBQTtJQUVELElBQUksQ0FBQyxJQUFBLG9DQUEwQixFQUFDO1FBQzlCLE9BQU87UUFDUCxTQUFTO1FBQ1QsU0FBUztRQUNULFVBQVUsRUFBRSxPQUFPLENBQUMsR0FBRyxDQUFDLDJCQUEyQjtLQUNwRCxDQUFDLEVBQUUsQ0FBQztRQUNILE9BQU8sR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsRUFBRSxPQUFPLEVBQUUsc0NBQXNDLEVBQUUsQ0FBQyxDQUFBO0lBQ2xGLENBQUM7SUFFRCxJQUFJLEtBQUssQ0FBQTtJQUNULElBQUksQ0FBQztRQUNILEtBQUssR0FBRyxJQUFBLDBCQUFnQixFQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUE7SUFDN0MsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyx1Q0FBdUM7U0FDMUYsQ0FBQyxDQUFBO0lBQ0osQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sWUFBWSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLE9BQU8sQ0FBb0MsQ0FBQTtRQUNsRixNQUFNLGNBQWMsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FDdEMsb0RBQTRCLENBQ0UsQ0FBQTtRQUNoQyxNQUFNLE1BQU0sR0FBRyxNQUFNLElBQUEsdUNBQTRCLEVBQUM7WUFDaEQsWUFBWTtZQUNaLGNBQWM7WUFDZCxLQUFLO1NBQ04sQ0FBQyxDQUFBO1FBRUYsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDO1lBQ1oscUVBQXFFO1lBQ3JFLHVFQUF1RTtZQUN2RSxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUNqRSxDQUFDO1FBRUQsT0FBTyxHQUFHLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxHQUFHLE1BQU0sRUFBRSxDQUFDLENBQUE7SUFDM0UsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzFCLE9BQU8sRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxxQ0FBcUM7U0FDeEYsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|