sofia-cloud / MIGRATION_GUIDE.md
Gmagl
fix: correcciones críticas y refactorización de componentes
3eebcd0
|
Raw
History Blame Contribute Delete
6.93 kB
# 🗂️ Guía de Migración de Base de Datos - Stripe Integration
## 📋 Descripción General
Este proyecto ha sido actualizado con:
- **Integración Stripe**: Pagos, checkout, webhooks
- **Renovación Automática**: Suscripciones recurrentes mensuales
- **Contabilidad Exacta**: Modelo `Earning` para cada pago
- **Cancelación Cliente**: Cancelar suscripciones cuando quieran
Para esto, necesitas ejecutar una **migración de BD** que agregue campos nuevos a las tablas.
---
## ⚙️ Pre-requisitos
✅ Tienes PostgreSQL o SQLite instalado y funcionando
✅ Tu `.env` tiene `DATABASE_URL` configurado
✅ Ejecutaste `npm install stripe` (ya hecho)
✅ Node.js 18+ instalado
---
## 🚀 Paso 1: Ejecutar la Migración
Abre la terminal en la raíz del proyecto:
```bash
cd c:\Users\gemag\sofia-cloud
npx prisma migrate dev --name add_stripe_and_renewals
```
**¿Qué pasa?**
1. Prisma detecta cambios en `prisma/schema.prisma` (campos Stripe nuevos)
2. Genera un archivo de migración en `prisma/migrations/`
3. **Aplica automáticamente** la migración a tu BD local
4. Regenera el cliente Prisma
**Salida esperada:**
```
✓ Created new migration: ./prisma/migrations/202501xx_add_stripe_and_renewals/migration.sql
✓ Database has been updated
✓ Generated Prisma Client
```
**Si hay error:**
```bash
# Revertir si algo sale mal:
npx prisma migrate resolve --rolled-back <nombre-migracion>
```
---
## ✅ Paso 2: Verificar la Migración
Confirma que los campos nuevos existen en la BD:
```bash
# Ver estado de migraciones
npx prisma migrate status
# Ver el contenido de la BD
npx prisma studio
```
En Prisma Studio deberías ver en la tabla `InfluencerSubscription`:
-`stripeSubscriptionId` (string, opcional)
-`stripeCustomerId` (string, opcional)
-`nextRenewalDate` (DateTime)
-`autoRenew` (boolean, default: true)
Y en tabla `Earning`:
-`subscriptionId` (foreign key)
-`stripePaymentIntentId` (string, opcional)
-`isRecurring` (boolean, default: false)
-`paymentStatus` (enum: pending, completed, failed)
-`paymentMethod` (string, opcional)
---
## 🔑 Paso 3: Configurar Variables de Entorno
Edita tu `.env` (o `.env.local`) y agrega:
```env
# ====== STRIPE KEYS ======
# Obtén estos de: https://dashboard.stripe.com/apikeys
STRIPE_SECRET_KEY="sk_test_XXXXX..." # Para testing
# En producción: sk_live_XXXXX...
STRIPE_WEBHOOK_SECRET="whsec_XXXXX..." # De https://dashboard.stripe.com/webhooks
```
### 📌 Cómo obtener las keys:
1. **STRIPE_SECRET_KEY**
- Ve a [dashboard.stripe.com/apikeys](https://dashboard.stripe.com/apikeys)
- Mira en la sección "Secret Key"
- Copia la que empiece con `sk_test_` (para desarrollo)
2. **STRIPE_WEBHOOK_SECRET**
- Ve a [dashboard.stripe.com/webhooks](https://dashboard.stripe.com/webhooks)
- Haz click en "+ Add endpoint"
- **Endpoint URL**: `http://localhost:3000/api/payments/webhook` (local)
- **Eventos**: Selecciona estos:
- `checkout.session.completed`
- `customer.subscription.created`
- `customer.subscription.deleted`
- `customer.subscription.updated`
- `invoice.payment_succeeded`
- `invoice.payment_failed`
- Click "Add endpoint"
- Verás el "Signing secret" (empieza con `whsec_`)
- Cópialo y agrégalo a `.env`
---
## 🧪 Paso 4: Verificar la Instalación (Local)
Inicia el servidor:
```bash
npm run dev
```
Prueba que los endpoints nuevos funcionan:
```bash
# 1. Ver si puedes llegar al checkout
curl http://localhost:3000/api/payments/checkout
# 2. Ver si el webhook está listo
curl http://localhost:3000/api/payments/webhook
# Resultado esperado: 405 Method Not Allowed (porque es POST, no GET)
# ✅ Eso significa que el endpoint existe
```
---
## 📤 Paso 5: Para Producción (VPS/Hosting)
Cuando subes a un VPS o servidor:
```bash
# 1. Subir código (git push)
git add .
git commit -m "Add Stripe integration and auto-renewal"
git push origin main
# 2. En el servidor VPS:
cd /ruta/del/proyecto
npm install stripe # Instala Stripe
npx prisma migrate deploy # Aplica migraciones sin preguntar
# 3. Actualizar .env en producción:
# - STRIPE_SECRET_KEY: sk_live_XXXXX... (clave VIVA, no test)
# - STRIPE_WEBHOOK_SECRET: del webhook en producción
# - DATABASE_URL: URL de BD producción
npm run build
npm start
```
---
## 📊 Campos Nuevos en la BD
### InfluencerSubscription
| Campo | Tipo | Descripción |
|-------|------|------------|
| `stripeSubscriptionId` | string | ID de suscripción en Stripe (ej: sub_12345) |
| `stripeCustomerId` | string | ID de cliente en Stripe (ej: cus_XXXXX) |
| `nextRenewalDate` | DateTime | Fecha próxima renovación (calculada cada pago) |
| `autoRenew` | boolean | Si es true, se renueva automáticamente |
### Earning
| Campo | Tipo | Descripción |
|-------|------|------------|
| `subscriptionId` | string | FK a InfluencerSubscription |
| `stripePaymentIntentId` | string | ID de pago en Stripe |
| `isRecurring` | boolean | true si viene de renovación automática |
| `paymentStatus` | enum | "pending" \| "completed" \| "failed" |
| `paymentMethod` | string | "stripe" \| "manual" \| etc |
---
## 🔍 Verificación Post-Migración
Ejecuta esto para confirmar todo está bien:
```bash
# 1. Ver migrations aplicadas
npx prisma migrate status
# 2. Ver esquema generado
npx prisma generate
# 3. Compilar proyecto
npm run build
# Si los 3 pasos pasan sin ERROR ✅, estás listo
```
---
## ⚠️ Si Algo Sale Mal
### Error: "Column does not exist"
```bash
# La migración se aplicó solo parcialmente
# Revertir y intentar de novo:
npx prisma migrate resolve --rolled-back add_stripe_and_renewals
npx prisma migrate dev --name add_stripe_and_renewals
```
### Error: "STRIPE_SECRET_KEY not set"
```bash
# Olvidaste agregar la key a .env
# Agrega: STRIPE_SECRET_KEY="sk_test_XXXXX"
# Reinicia el servidor: npm run dev
```
### Error: "Cannot find module 'stripe'"
```bash
# Stripe no está instalado
npm install stripe
npx prisma generate
npm run dev
```
---
## 📞 Resumen de Pasos (Quick Reference)
| # | Paso | Comando | Resultado |
|---|------|---------|-----------|
| 1 | Migrar BD | `npx prisma migrate dev --name add_stripe_and_renewals` | ✅ Campos nuevos en tablas |
| 2 | Verificar | `npx prisma studio` | ✅ Ver nuevos campos |
| 3 | Config env | Editar `.env` | ✅ Keys Stripe agregadas |
| 4 | Webhook Stripe | Agregar endpoint en dashboard | ✅ Webhooks conectados |
| 5 | Compilar | `npm run build` | ✅ Sin errores |
| 6 | Testear | `npm run dev` + curl | ✅ Endpoints funcionan |
---
## ✨ ¡Listo! Ahora puedes:
✅ Crear suscripciones en Stripe
✅ Procesar pagos automáticos mensuales
✅ Rastrear earnings por pago exacto
✅ Cancelar suscripciones cuando el cliente quiera
✅ Ver reportes con contabilidad exacta
**¿Preguntas? Ejecuta los pasos en orden y reporta cualquier error.**