diff --git a/apps/api/scripts/activate-subscription.ts b/apps/api/scripts/activate-subscription.ts new file mode 100644 index 0000000..63eea53 --- /dev/null +++ b/apps/api/scripts/activate-subscription.ts @@ -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 + * 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 '); + 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); +});