@zaamx/netme-bundle 0.0.11 → 0.0.13
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.
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* POST /admin/special-packs/recalculate
|
|
4
|
+
*
|
|
5
|
+
* Dispara el recálculo de paquetes a precio especial para el período activo.
|
|
6
|
+
* Llama a netme_calcular_paquetes_precio_especial_actual() en la DB.
|
|
7
|
+
*
|
|
8
|
+
* Idempotente: se puede llamar N veces, siempre refleja el estado actual.
|
|
9
|
+
* Los créditos 'redeemed' nunca se tocan.
|
|
10
|
+
*
|
|
11
|
+
* Requiere: autenticación de admin
|
|
12
|
+
*
|
|
13
|
+
* Respuesta 200:
|
|
14
|
+
* { period_id, period_name, packs_generated }
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.POST = POST;
|
|
18
|
+
const bundles_1 = require("../../../../modules/bundles");
|
|
19
|
+
async function POST(req, res) {
|
|
20
|
+
try {
|
|
21
|
+
const bundleService = req.scope.resolve(bundles_1.BUNDLE_MODULE);
|
|
22
|
+
const result = await bundleService.recalculateSpecialPacks();
|
|
23
|
+
console.log(`[admin/special-packs/recalculate] ${result.packs_generated} paquetes generados — período ${result.period_name} (id=${result.period_id})`);
|
|
24
|
+
res.status(200).json(result);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
console.error("[admin/special-packs/recalculate] Error:", error);
|
|
28
|
+
res.status(500).json({
|
|
29
|
+
error: error instanceof Error ? error.message : "Error al recalcular paquetes",
|
|
30
|
+
});
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicm91dGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9zcmMvYXBpL2FkbWluL3NwZWNpYWwtcGFja3MvcmVjYWxjdWxhdGUvcm91dGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7O0dBYUc7O0FBTUgsb0JBbUJDO0FBdEJELHlEQUEyRDtBQUdwRCxLQUFLLFVBQVUsSUFBSSxDQUN4QixHQUFrQixFQUNsQixHQUFtQjtJQUVuQixJQUFJLENBQUM7UUFDSCxNQUFNLGFBQWEsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyx1QkFBYSxDQUFrQixDQUFBO1FBQ3ZFLE1BQU0sTUFBTSxHQUFHLE1BQU0sYUFBYSxDQUFDLHVCQUF1QixFQUFFLENBQUE7UUFFNUQsT0FBTyxDQUFDLEdBQUcsQ0FDVCxxQ0FBcUMsTUFBTSxDQUFDLGVBQWUsaUNBQWlDLE1BQU0sQ0FBQyxXQUFXLFFBQVEsTUFBTSxDQUFDLFNBQVMsR0FBRyxDQUMxSSxDQUFBO1FBRUQsR0FBRyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUE7SUFDOUIsQ0FBQztJQUFDLE9BQU8sS0FBSyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsS0FBSyxDQUFDLDBDQUEwQyxFQUFFLEtBQUssQ0FBQyxDQUFBO1FBQ2hFLEdBQUcsQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQ25CLEtBQUssRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyw4QkFBOEI7U0FDL0UsQ0FBQyxDQUFBO0lBQ0osQ0FBQztBQUNILENBQUMifQ==
|
|
@@ -182,6 +182,44 @@ class BundleService extends (0, utils_1.MedusaService)({
|
|
|
182
182
|
AND pv.deleted_at IS NULL`, [...variantIds, exports.SPECIAL_PACK_CATEGORY_ID]);
|
|
183
183
|
return (Number(rows?.[0]?.cnt) ?? 0) > 0;
|
|
184
184
|
}
|
|
185
|
+
/**
|
|
186
|
+
* Ejecuta netme_calcular_paquetes_precio_especial_actual() en la DB.
|
|
187
|
+
* Detecta el período activo automáticamente y recalcula los créditos.
|
|
188
|
+
* Idempotente: borra los 'available' del período y recalcula.
|
|
189
|
+
* Los 'redeemed' no se tocan.
|
|
190
|
+
*/
|
|
191
|
+
async recalculateSpecialPacks() {
|
|
192
|
+
return this._recalculateSpecialPacks();
|
|
193
|
+
}
|
|
194
|
+
async _recalculateSpecialPacks(sharedContext) {
|
|
195
|
+
const rows = await sharedContext?.manager?.execute(`SELECT period_id, period_name, packs_generated
|
|
196
|
+
FROM netme_calcular_paquetes_precio_especial_actual()`);
|
|
197
|
+
if (!rows?.length) {
|
|
198
|
+
throw new Error("La función SQL no retornó resultados");
|
|
199
|
+
}
|
|
200
|
+
return rows[0];
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Cuenta cuántas unidades de paquetes especiales tiene una orden
|
|
204
|
+
* en su versión actual (respeta ediciones de orden).
|
|
205
|
+
* Retorna 0 si la orden no contiene paquetes especiales.
|
|
206
|
+
*/
|
|
207
|
+
async countSpecialPacksInOrder(orderId) {
|
|
208
|
+
return this._countSpecialPacksInOrder(orderId);
|
|
209
|
+
}
|
|
210
|
+
async _countSpecialPacksInOrder(orderId, sharedContext) {
|
|
211
|
+
const rows = await sharedContext?.manager?.execute(`SELECT COALESCE(SUM(oi.quantity), 0)::INT AS total
|
|
212
|
+
FROM "order" o
|
|
213
|
+
JOIN order_item oi ON oi.order_id = o.id AND oi.version = o.version
|
|
214
|
+
JOIN order_line_item oli ON oli.id = oi.item_id
|
|
215
|
+
JOIN product_variant pv ON pv.id = oli.variant_id
|
|
216
|
+
JOIN product p ON p.id = pv.product_id
|
|
217
|
+
JOIN product_category_product pcp ON pcp.product_id = p.id
|
|
218
|
+
WHERE o.id = ?
|
|
219
|
+
AND pcp.product_category_id = ?
|
|
220
|
+
AND o.deleted_at IS NULL`, [orderId, exports.SPECIAL_PACK_CATEGORY_ID]);
|
|
221
|
+
return Number(rows?.[0]?.total ?? 0);
|
|
222
|
+
}
|
|
185
223
|
/**
|
|
186
224
|
* Verifica si una orden contiene productos de la categoría
|
|
187
225
|
* Paquetes a Precio Especial.
|
|
@@ -246,6 +284,20 @@ __decorate([
|
|
|
246
284
|
__metadata("design:paramtypes", [Array, Object]),
|
|
247
285
|
__metadata("design:returntype", Promise)
|
|
248
286
|
], BundleService.prototype, "_variantsContainSpecialPack", null);
|
|
287
|
+
__decorate([
|
|
288
|
+
(0, utils_1.InjectManager)(),
|
|
289
|
+
__param(0, (0, utils_1.MedusaContext)()),
|
|
290
|
+
__metadata("design:type", Function),
|
|
291
|
+
__metadata("design:paramtypes", [Object]),
|
|
292
|
+
__metadata("design:returntype", Promise)
|
|
293
|
+
], BundleService.prototype, "_recalculateSpecialPacks", null);
|
|
294
|
+
__decorate([
|
|
295
|
+
(0, utils_1.InjectManager)(),
|
|
296
|
+
__param(1, (0, utils_1.MedusaContext)()),
|
|
297
|
+
__metadata("design:type", Function),
|
|
298
|
+
__metadata("design:paramtypes", [String, Object]),
|
|
299
|
+
__metadata("design:returntype", Promise)
|
|
300
|
+
], BundleService.prototype, "_countSpecialPacksInOrder", null);
|
|
249
301
|
__decorate([
|
|
250
302
|
(0, utils_1.InjectManager)(),
|
|
251
303
|
__param(1, (0, utils_1.MedusaContext)()),
|
|
@@ -254,4 +306,4 @@ __decorate([
|
|
|
254
306
|
__metadata("design:returntype", Promise)
|
|
255
307
|
], BundleService.prototype, "_orderContainsSpecialPack", null);
|
|
256
308
|
exports.default = BundleService;
|
|
257
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
309
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3NyYy9tb2R1bGVzL2J1bmRsZXMvc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7Ozs7Ozs7Ozs7Ozs7QUFBQSxxREFBdUY7QUFHdkYsNENBQXdDO0FBRXhDLG9EQUFvRDtBQUN2QyxRQUFBLHdCQUF3QixHQUFHLGlDQUFpQyxDQUFBO0FBa0J6RSxNQUFNLGFBQWMsU0FBUSxJQUFBLHFCQUFhLEVBQUM7SUFDeEMsTUFBTSxFQUFOLGVBQU07Q0FDUCxDQUFDO0lBQ0EsS0FBSyxDQUFDLHFCQUFxQixDQUFDLFNBQWlCO1FBQzNDLE1BQU0sTUFBTSxHQUFHLE1BQU0sSUFBSSxDQUFDLFdBQVcsQ0FBQztZQUNwQyxFQUFFLEVBQUUsQ0FBQyxTQUFTLENBQUM7WUFDZixTQUFTLEVBQUUsQ0FBQyxlQUFlLENBQUM7U0FDN0IsQ0FBQyxDQUFBO1FBQ0YsT0FBTyxNQUFNLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFBO0lBQzFCLENBQUM7SUFFRCw2REFBNkQ7SUFFN0Q7OztPQUdHO0lBQ0gsS0FBSyxDQUFDLHdCQUF3QixDQUFDLFVBQWtCO1FBQy9DLE9BQU8sSUFBSSxDQUFDLHlCQUF5QixDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ25ELENBQUM7SUFHYSxBQUFOLEtBQUssQ0FBQyx5QkFBeUIsQ0FDckMsVUFBa0IsRUFDRCxhQUFzQztRQUV2RCxNQUFNLElBQUksR0FBRyxNQUFNLGFBQWEsRUFBRSxPQUFPLEVBQUUsT0FBTyxDQUNoRDs7OztlQUlTLEVBQ1QsQ0FBQyxVQUFVLENBQUMsQ0FDb0IsQ0FBQTtRQUNsQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLFVBQVUsSUFBSSxJQUFJLENBQUE7SUFDdEMsQ0FBQztJQUVEOzs7T0FHRztJQUNILEtBQUssQ0FBQyx3QkFBd0IsQ0FBQyxVQUFrQjtRQUMvQyxNQUFNLFNBQVMsR0FB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
|
|
@@ -1,46 +1,52 @@
|
|
|
1
1
|
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* Subscriber: order.payment_captured
|
|
4
|
-
*
|
|
5
|
-
* Cuando se confirma el pago de una orden que contiene un producto
|
|
6
|
-
* de la categoría Paquetes a Precio Especial, redime el pack disponible
|
|
7
|
-
* más antiguo del customer (FIFO por created_at).
|
|
8
|
-
*
|
|
9
|
-
* Solo actúa si la orden contiene al menos un producto de la categoría
|
|
10
|
-
* pcat_01KQDWQ1GCQR1F278TMVWY9WNB.
|
|
11
|
-
*/
|
|
12
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
3
|
exports.config = void 0;
|
|
14
4
|
exports.default = redeemSpecialPackOnPayment;
|
|
15
|
-
const utils_1 = require("@medusajs/framework/utils");
|
|
16
5
|
const bundles_1 = require("../modules/bundles");
|
|
17
6
|
async function redeemSpecialPackOnPayment({ event: { data }, container, }) {
|
|
18
|
-
const
|
|
7
|
+
const query = container.resolve("query");
|
|
8
|
+
// Resolver la orden desde el payment via query.graph
|
|
9
|
+
const { data: [payment] } = await query.graph({
|
|
10
|
+
entity: "payment",
|
|
11
|
+
fields: [
|
|
12
|
+
"id",
|
|
13
|
+
"payment_collection.order.id",
|
|
14
|
+
"payment_collection.order.customer_id",
|
|
15
|
+
],
|
|
16
|
+
filters: { id: data.id },
|
|
17
|
+
});
|
|
18
|
+
const order = payment?.payment_collection?.order;
|
|
19
|
+
if (!order?.id)
|
|
20
|
+
return;
|
|
19
21
|
const bundleService = container.resolve(bundles_1.BUNDLE_MODULE);
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (!hasSpecialPack)
|
|
22
|
+
// Contar unidades de paquetes especiales en la versión actual de la orden
|
|
23
|
+
const packCount = await bundleService.countSpecialPacksInOrder(order.id);
|
|
24
|
+
if (packCount === 0)
|
|
24
25
|
return;
|
|
25
|
-
// Obtener el customer de la orden
|
|
26
|
-
const order = await orderModule.retrieveOrder(orderId);
|
|
27
26
|
const customerId = order.customer_id;
|
|
28
27
|
if (!customerId) {
|
|
29
|
-
console.warn(`[special-packs] Orden ${
|
|
28
|
+
console.warn(`[special-packs] Orden ${order.id} sin customer_id`);
|
|
30
29
|
return;
|
|
31
30
|
}
|
|
32
|
-
// Redimir
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
// Redimir 1 crédito por pack (FIFO por created_at)
|
|
32
|
+
let redeemedCount = 0;
|
|
33
|
+
for (let i = 0; i < packCount; i++) {
|
|
34
|
+
const redeemedPackId = await bundleService.redeemOldestPack(customerId, order.id);
|
|
35
|
+
if (!redeemedPackId)
|
|
36
|
+
break;
|
|
37
|
+
redeemedCount++;
|
|
38
|
+
}
|
|
39
|
+
if (redeemedCount === packCount) {
|
|
40
|
+
console.log(`[special-packs] ${redeemedCount}/${packCount} crédito(s) redimidos — customer ${customerId} orden ${order.id}`);
|
|
41
|
+
}
|
|
42
|
+
else if (redeemedCount > 0) {
|
|
43
|
+
console.warn(`[special-packs] PARCIAL: ${redeemedCount}/${packCount} — créditos insuficientes para customer ${customerId} orden ${order.id}`);
|
|
36
44
|
}
|
|
37
45
|
else {
|
|
38
|
-
|
|
39
|
-
// El validador de add-to-cart debería haber prevenido esto
|
|
40
|
-
console.error(`[special-packs] ALERTA: orden ${orderId} con paquete especial pero sin créditos disponibles para customer ${customerId}`);
|
|
46
|
+
console.error(`[special-packs] ALERTA: orden ${order.id} con ${packCount} pack(s) sin créditos disponibles para customer ${customerId}`);
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
exports.config = {
|
|
44
|
-
event: "
|
|
50
|
+
event: "payment.captured",
|
|
45
51
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkZWVtLXNwZWNpYWwtcGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9yZWRlZW0tc3BlY2lhbC1wYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUlBLDZDQStDQztBQWxERCxnREFBa0Q7QUFHbkMsS0FBSyxVQUFVLDBCQUEwQixDQUFDLEVBQ3ZELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUNmLFNBQVMsR0FDc0I7SUFDL0IsTUFBTSxLQUFLLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQTtJQUV4QyxxREFBcUQ7SUFDckQsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLE9BQU8sQ0FBQyxFQUFFLEdBQUcsTUFBTSxLQUFLLENBQUMsS0FBSyxDQUFDO1FBQzVDLE1BQU0sRUFBRSxTQUFTO1FBQ2pCLE1BQU0sRUFBRTtZQUNOLElBQUk7WUFDSiw2QkFBNkI7WUFDN0Isc0NBQXNDO1NBQ3ZDO1FBQ0QsT0FBTyxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLEVBQUU7S0FDekIsQ0FBQyxDQUFBO0lBRUYsTUFBTSxLQUFLLEdBQUcsT0FBTyxFQUFFLGtCQUFrQixFQUFFLEtBQUssQ0FBQTtJQUNoRCxJQUFJLENBQUMsS0FBSyxFQUFFLEVBQUU7UUFBRSxPQUFNO0lBRXRCLE1BQU0sYUFBYSxHQUFrQixTQUFTLENBQUMsT0FBTyxDQUFDLHVCQUFhLENBQUMsQ0FBQTtJQUVyRSwwRUFBMEU7SUFDMUUsTUFBTSxTQUFTLEdBQUcsTUFBTSxhQUFhLENBQUMsd0JBQXdCLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO0lBQ3hFLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBRTNCLE1BQU0sVUFBVSxHQUFHLEtBQUssQ0FBQyxXQUFXLENBQUE7SUFDcEMsSUFBSSxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ2hCLE9BQU8sQ0FBQyxJQUFJLENBQUMseUJBQXlCLEtBQUssQ0FBQyxFQUFFLGtCQUFrQixDQUFDLENBQUE7UUFDakUsT0FBTTtJQUNSLENBQUM7SUFFRCxtREFBbUQ7SUFDbkQsSUFBSSxhQUFhLEdBQUcsQ0FBQyxDQUFBO0lBQ3JCLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztRQUNuQyxNQUFNLGNBQWMsR0FBRyxNQUFNLGFBQWEsQ0FBQyxnQkFBZ0IsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1FBQ2pGLElBQUksQ0FBQyxjQUFjO1lBQUUsTUFBSztRQUMxQixhQUFhLEVBQUUsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxtQkFBbUIsYUFBYSxJQUFJLFNBQVMsb0NBQW9DLFVBQVUsVUFBVSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUM5SCxDQUFDO1NBQU0sSUFBSSxhQUFhLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDN0IsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsYUFBYSxJQUFJLFNBQVMsMkNBQTJDLFVBQVUsVUFBVSxLQUFLLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQTtJQUMvSSxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsaUNBQWlDLEtBQUssQ0FBQyxFQUFFLFFBQVEsU0FBUyxtREFBbUQsVUFBVSxFQUFFLENBQUMsQ0FBQTtJQUMxSSxDQUFDO0FBQ0gsQ0FBQztBQUVZLFFBQUEsTUFBTSxHQUFxQjtJQUN0QyxLQUFLLEVBQUUsa0JBQWtCO0NBQzFCLENBQUEifQ==
|