Initial commit - Horux Despachos NL
This commit is contained in:
59
apps/api/scripts/refresh-metricas-cache.ts
Normal file
59
apps/api/scripts/refresh-metricas-cache.ts
Normal file
@@ -0,0 +1,59 @@
|
||||
/**
|
||||
* Limpia el cache `metricas_mensuales` de TODOS los tenants activos.
|
||||
*
|
||||
* Ejecutar después de cambios fiscales en las fórmulas de ingresos/deducciones
|
||||
* (dashboard.service.ts) — los valores ya escritos en el cache reflejan la
|
||||
* fórmula vieja y muestran datos incorrectos para meses pasados hasta ser
|
||||
* recomputados.
|
||||
*
|
||||
* Estrategia: TRUNCATE (vía DELETE) por tenant. La próxima consulta a un
|
||||
* período pasado cae al path on-the-fly y rehidrata el cache con la fórmula
|
||||
* vigente. No bloquea uso normal — solo aumenta latencia de la primera lectura.
|
||||
*
|
||||
* Idempotente. Por-tenant try/catch para que un tenant que falla no tumbe el
|
||||
* resto.
|
||||
*/
|
||||
import { prisma, tenantDb } from '../src/config/database.js';
|
||||
|
||||
async function main() {
|
||||
const tenants = await prisma.tenant.findMany({
|
||||
where: { active: true },
|
||||
select: { id: true, nombre: true, rfc: true, databaseName: true },
|
||||
orderBy: { rfc: 'asc' },
|
||||
});
|
||||
|
||||
console.log(`[Cache Refresh] Iterando ${tenants.length} tenant(s) activo(s)...\n`);
|
||||
|
||||
let totalRows = 0;
|
||||
let okTenants = 0;
|
||||
let failedTenants = 0;
|
||||
|
||||
for (const t of tenants) {
|
||||
try {
|
||||
const pool = await tenantDb.getPool(t.id, t.databaseName);
|
||||
const result = await pool.query('DELETE FROM metricas_mensuales');
|
||||
const rows = result.rowCount ?? 0;
|
||||
totalRows += rows;
|
||||
okTenants++;
|
||||
console.log(`✓ ${t.rfc.padEnd(15)} ${t.nombre.padEnd(40)} → ${rows.toLocaleString('es-MX')} filas borradas`);
|
||||
} catch (err: any) {
|
||||
failedTenants++;
|
||||
console.error(`✗ ${t.rfc.padEnd(15)} ${t.nombre.padEnd(40)} → ERROR: ${err.message || err}`);
|
||||
}
|
||||
}
|
||||
|
||||
console.log(`\n[Cache Refresh] Completado:`);
|
||||
console.log(` Tenants OK: ${okTenants}`);
|
||||
console.log(` Tenants fallidos: ${failedTenants}`);
|
||||
console.log(` Total filas: ${totalRows.toLocaleString('es-MX')}`);
|
||||
console.log(`\nLa próxima consulta a un período en cache lo recomputará on-demand`);
|
||||
console.log(`con las fórmulas vigentes en dashboard.service.ts.`);
|
||||
|
||||
await prisma.$disconnect();
|
||||
process.exit(failedTenants > 0 ? 1 : 0);
|
||||
}
|
||||
|
||||
main().catch(err => {
|
||||
console.error(err);
|
||||
process.exit(1);
|
||||
});
|
||||
Reference in New Issue
Block a user