@zaamx/netme-bundle 0.0.10 → 0.0.12
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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
|
|
@@ -2,12 +2,11 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Subscriber: order.payment_captured
|
|
4
4
|
*
|
|
5
|
-
* Cuando se confirma el pago de una orden que contiene
|
|
6
|
-
* de la categoría Paquetes a Precio Especial, redime
|
|
7
|
-
*
|
|
5
|
+
* Cuando se confirma el pago de una orden que contiene productos
|
|
6
|
+
* de la categoría Paquetes a Precio Especial, redime 1 crédito
|
|
7
|
+
* por cada unidad comprada (usando la versión actual de la orden).
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
* pcat_01KQDWQ1GCQR1F278TMVWY9WNB.
|
|
9
|
+
* Orden FIFO por created_at — el crédito más antiguo se redime primero.
|
|
11
10
|
*/
|
|
12
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
13
12
|
exports.config = void 0;
|
|
@@ -18,9 +17,9 @@ async function redeemSpecialPackOnPayment({ event: { data }, container, }) {
|
|
|
18
17
|
const orderId = data.id;
|
|
19
18
|
const bundleService = container.resolve(bundles_1.BUNDLE_MODULE);
|
|
20
19
|
const orderModule = container.resolve(utils_1.Modules.ORDER);
|
|
21
|
-
//
|
|
22
|
-
const
|
|
23
|
-
if (
|
|
20
|
+
// Contar cuántas unidades de paquetes especiales tiene la orden
|
|
21
|
+
const packCount = await bundleService.countSpecialPacksInOrder(orderId);
|
|
22
|
+
if (packCount === 0)
|
|
24
23
|
return;
|
|
25
24
|
// Obtener el customer de la orden
|
|
26
25
|
const order = await orderModule.retrieveOrder(orderId);
|
|
@@ -29,18 +28,25 @@ async function redeemSpecialPackOnPayment({ event: { data }, container, }) {
|
|
|
29
28
|
console.warn(`[special-packs] Orden ${orderId} sin customer_id`);
|
|
30
29
|
return;
|
|
31
30
|
}
|
|
32
|
-
// Redimir
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
// Redimir 1 crédito por cada pack comprado (FIFO)
|
|
32
|
+
let redeemedCount = 0;
|
|
33
|
+
for (let i = 0; i < packCount; i++) {
|
|
34
|
+
const redeemedPackId = await bundleService.redeemOldestPack(customerId, orderId);
|
|
35
|
+
if (!redeemedPackId)
|
|
36
|
+
break; // sin más créditos disponibles
|
|
37
|
+
redeemedCount++;
|
|
38
|
+
}
|
|
39
|
+
if (redeemedCount === packCount) {
|
|
40
|
+
console.log(`[special-packs] ${redeemedCount}/${packCount} crédito(s) redimidos para customer ${customerId} en orden ${orderId}`);
|
|
41
|
+
}
|
|
42
|
+
else if (redeemedCount > 0) {
|
|
43
|
+
console.warn(`[special-packs] PARCIAL: ${redeemedCount}/${packCount} crédito(s) redimidos para customer ${customerId} en orden ${orderId} — créditos insuficientes`);
|
|
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 ${orderId} con ${packCount} paquete(s) pero sin créditos disponibles para customer ${customerId}`);
|
|
41
47
|
}
|
|
42
48
|
}
|
|
43
49
|
exports.config = {
|
|
44
50
|
event: "order.payment_captured",
|
|
45
51
|
};
|
|
46
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
52
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVkZWVtLXNwZWNpYWwtcGFjay5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy9zdWJzY3JpYmVycy9yZWRlZW0tc3BlY2lhbC1wYWNrLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7R0FRRzs7O0FBT0gsNkNBMENDO0FBOUNELHFEQUFtRDtBQUNuRCxnREFBa0Q7QUFHbkMsS0FBSyxVQUFVLDBCQUEwQixDQUFDLEVBQ3ZELEtBQUssRUFBRSxFQUFFLElBQUksRUFBRSxFQUNmLFNBQVMsR0FDc0I7SUFDL0IsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQTtJQUV2QixNQUFNLGFBQWEsR0FBa0IsU0FBUyxDQUFDLE9BQU8sQ0FBQyx1QkFBYSxDQUFDLENBQUE7SUFDckUsTUFBTSxXQUFXLEdBQUcsU0FBUyxDQUFDLE9BQU8sQ0FBQyxlQUFPLENBQUMsS0FBSyxDQUFDLENBQUE7SUFFcEQsZ0VBQWdFO0lBQ2hFLE1BQU0sU0FBUyxHQUFHLE1BQU0sYUFBYSxDQUFDLHdCQUF3QixDQUFDLE9BQU8sQ0FBQyxDQUFBO0lBQ3ZFLElBQUksU0FBUyxLQUFLLENBQUM7UUFBRSxPQUFNO0lBRTNCLGtDQUFrQztJQUNsQyxNQUFNLEtBQUssR0FBRyxNQUFNLFdBQVcsQ0FBQyxhQUFhLENBQUMsT0FBTyxDQUFDLENBQUE7SUFDdEQsTUFBTSxVQUFVLEdBQUcsS0FBSyxDQUFDLFdBQVcsQ0FBQTtJQUNwQyxJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyx5QkFBeUIsT0FBTyxrQkFBa0IsQ0FBQyxDQUFBO1FBQ2hFLE9BQU07SUFDUixDQUFDO0lBRUQsa0RBQWtEO0lBQ2xELElBQUksYUFBYSxHQUFHLENBQUMsQ0FBQTtJQUNyQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsU0FBUyxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDbkMsTUFBTSxjQUFjLEdBQUcsTUFBTSxhQUFhLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLE9BQU8sQ0FBQyxDQUFBO1FBQ2hGLElBQUksQ0FBQyxjQUFjO1lBQUUsTUFBSyxDQUFFLCtCQUErQjtRQUMzRCxhQUFhLEVBQUUsQ0FBQTtJQUNqQixDQUFDO0lBRUQsSUFBSSxhQUFhLEtBQUssU0FBUyxFQUFFLENBQUM7UUFDaEMsT0FBTyxDQUFDLEdBQUcsQ0FDVCxtQkFBbUIsYUFBYSxJQUFJLFNBQVMsdUNBQXVDLFVBQVUsYUFBYSxPQUFPLEVBQUUsQ0FDckgsQ0FBQTtJQUNILENBQUM7U0FBTSxJQUFJLGFBQWEsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUM3QixPQUFPLENBQUMsSUFBSSxDQUNWLDRCQUE0QixhQUFhLElBQUksU0FBUyx1Q0FBdUMsVUFBVSxhQUFhLE9BQU8sMkJBQTJCLENBQ3ZKLENBQUE7SUFDSCxDQUFDO1NBQU0sQ0FBQztRQUNOLE9BQU8sQ0FBQyxLQUFLLENBQ1gsaUNBQWlDLE9BQU8sUUFBUSxTQUFTLDJEQUEyRCxVQUFVLEVBQUUsQ0FDakksQ0FBQTtJQUNILENBQUM7QUFDSCxDQUFDO0FBRVksUUFBQSxNQUFNLEdBQXFCO0lBQ3RDLEtBQUssRUFBRSx3QkFBd0I7Q0FDaEMsQ0FBQSJ9
|