feat(subscriptions): script para activar suscripción manualmente por período

This commit is contained in:
Horux Dev
2026-08-26 18:10:37 +00:00
parent 683b65b432
commit 26c1c0ec75

View File

@@ -0,0 +1,76 @@
import { prisma } from '../src/config/database.js';
/**
* Activa manualmente una suscripción para un tenant por un período dado.
* Uso:
* pnpm tsx scripts/activate-subscription.ts <tenant-rfc> <amount> <period-start> <period-end>
* Ejemplo:
* pnpm tsx scripts/activate-subscription.ts ROEM691011EZ4 580 2026-08-29 2026-09-29
*/
async function main() {
const [rfc, amountStr, periodStartStr, periodEndStr] = process.argv.slice(2);
if (!rfc || !amountStr || !periodStartStr || !periodEndStr) {
console.error('Uso: pnpm tsx scripts/activate-subscription.ts <tenant-rfc> <amount> <period-start> <period-end>');
process.exit(1);
}
const amount = Number(amountStr);
if (!Number.isFinite(amount) || amount <= 0) {
console.error('Monto inválido');
process.exit(1);
}
const periodStart = new Date(periodStartStr);
const periodEnd = new Date(periodEndStr);
periodEnd.setHours(23, 59, 59, 999);
const tenant = await prisma.tenant.findUnique({ where: { rfc } });
if (!tenant) {
console.error(`Tenant ${rfc} no encontrado`);
process.exit(1);
}
const subscription = await prisma.subscription.findFirst({
where: { tenantId: tenant.id },
orderBy: { createdAt: 'desc' },
});
if (!subscription) {
console.error(`No hay suscripción para tenant ${rfc}`);
process.exit(1);
}
await prisma.$transaction(async (tx) => {
await tx.subscription.update({
where: { id: subscription.id },
data: {
status: 'authorized',
currentPeriodStart: periodStart,
currentPeriodEnd: periodEnd,
},
});
const payment = await tx.payment.create({
data: {
tenantId: tenant.id,
subscriptionId: subscription.id,
mpPaymentId: `manual-${Date.now()}`,
amount,
status: 'approved',
paymentMethod: 'bank_transfer',
paidAt: new Date(),
},
});
console.log(`[Activate Subscription] Tenant ${rfc} activado`);
console.log(` Plan: ${subscription.plan}`);
console.log(` Período: ${periodStart.toISOString()} → ${periodEnd.toISOString()}`);
console.log(` Pago: ${amount} (ID: ${payment.id})`);
});
}
main().catch(err => {
console.error(err);
process.exit(1);
});