60 lines
2.1 KiB
TypeScript
60 lines
2.1 KiB
TypeScript
/**
|
|
* 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);
|
|
});
|