✅ FASE 4 COMPLETADA: Pagos y Monetización con MercadoPago
Implementados 4 módulos con agent swarm: 1. MERCADOPAGO INTEGRADO - SDK oficial de MercadoPago - Crear preferencias de pago - Webhooks para notificaciones - Reembolsos y cancelaciones - Estados: PENDING, PROCESSING, COMPLETED, REFUNDED 2. SISTEMA DE BONOS Y PACKS - Pack 5, Pack 10, Pack Mensual - Compra online con MP - Uso FIFO automático - Control de expiración - Aplicación en reservas 3. SUSCRIPCIONES/MEMBRESÍAS - Planes: Básico, Premium, Anual VIP - Beneficios: descuentos, reservas gratis, prioridad - Cobro recurrente vía MP - Estados: ACTIVE, PAUSED, CANCELLED - Aplicación automática en reservas 4. CLASES CON PROFESORES - Registro de coaches con verificación - Tipos: Individual, Grupal, Clínica - Horarios y disponibilidad - Reservas con pago integrado - Sistema de reseñas Endpoints nuevos: - /payments/* - Pagos MercadoPago - /bonus-packs/*, /bonuses/* - Bonos - /subscription-plans/*, /subscriptions/* - Suscripciones - /coaches/* - Profesores - /classes/*, /class-enrollments/* - Clases Variables de entorno: - MERCADOPAGO_ACCESS_TOKEN - MERCADOPAGO_PUBLIC_KEY - MERCADOPAGO_WEBHOOK_SECRET Datos de prueba: - 3 Bonus Packs - 3 Planes de suscripción - 1 Coach verificado (admin) - 3 Clases disponibles
This commit is contained in:
@@ -1,6 +1,270 @@
|
||||
# Fase 4: Pagos
|
||||
# Fase 4: Pagos y Monetización
|
||||
|
||||
## Estado: ⏳ Pendiente
|
||||
## Estado: ✅ COMPLETADA
|
||||
|
||||
*Esta fase comenzará al finalizar la Fase 3*
|
||||
### ✅ Tareas completadas:
|
||||
|
||||
#### 4.1.1: Integración de MercadoPago
|
||||
- [x] SDK de MercadoPago instalado y configurado
|
||||
- [x] Crear preferencias de pago
|
||||
- [x] Webhooks para notificaciones de pago
|
||||
- [x] Procesar pagos completados
|
||||
- [x] Reembolsos (refunds)
|
||||
- [x] Cancelación de pagos pendientes
|
||||
|
||||
#### 4.1.2: Gestión de Transacciones
|
||||
- [x] Historial de pagos del usuario
|
||||
- [x] Estados de pago (PENDING, PROCESSING, COMPLETED, FAILED, REFUNDED, CANCELLED)
|
||||
- [x] Comprobantes/facturas automáticas
|
||||
- [x] Metadata de pagos (método, cuotas)
|
||||
|
||||
#### 4.2.1: Sistema de Bonos
|
||||
- [x] Tipos de bonos (5, 10, 30 clases)
|
||||
- [x] Compra de bonos online (integración MP)
|
||||
- [x] Descuento automático al usar bono
|
||||
- [x] Expiración de bonos configurable
|
||||
- [x] Historial de uso de bonos
|
||||
- [x] Verificación automática de expirados
|
||||
|
||||
#### 4.2.2: Suscripciones/Membresías
|
||||
- [x] Planes: Básico, Premium, Anual VIP
|
||||
- [x] Beneficios por plan (descuentos, reservas gratis, prioridad)
|
||||
- [x] Cobro recurrente vía MercadoPago
|
||||
- [x] Estados: PENDING, ACTIVE, PAUSED, CANCELLED, EXPIRED
|
||||
- [x] Cambio de método de pago
|
||||
- [x] Aplicación automática de beneficios en reservas
|
||||
|
||||
#### 4.3.1: Gestión de Profesores
|
||||
- [x] Perfil de coaches (bio, especialidades, certificaciones)
|
||||
- [x] Horarios disponibles por coach
|
||||
- [x] Tarifas por clase/tipo
|
||||
- [x] Sistema de reseñas y rating
|
||||
|
||||
#### 4.3.2: Reserva de Clases
|
||||
- [x] Catálogo de clases disponibles
|
||||
- [x] Tipos: Individual, Grupal, Clínica
|
||||
- [x] Reserva con pago integrado (MP)
|
||||
- [x] Control de cupos
|
||||
- [x] Historial de clases tomadas
|
||||
- [x] Marcado de asistencia
|
||||
|
||||
---
|
||||
|
||||
## 💳 Integración MercadoPago
|
||||
|
||||
### Flujo de Pago
|
||||
|
||||
1. **Crear Preferencia** → Backend crea preferencia MP con items
|
||||
2. **Redirigir a MP** → Frontend redirige a init_point
|
||||
3. **Usuario paga** → En MP con tarjeta/efectivo/transferencia
|
||||
4. **Webhook MP** → Notifica a backend el resultado
|
||||
5. **Actualizar estado** → Backend actualiza payment y entidad relacionada
|
||||
|
||||
### Estados de Pago
|
||||
|
||||
| Estado | Descripción |
|
||||
|--------|-------------|
|
||||
| PENDING | Preferencia creada, esperando pago |
|
||||
| PROCESSING | Pago en proceso |
|
||||
| COMPLETED | Pago aprobado |
|
||||
| FAILED | Pago rechazado |
|
||||
| REFUNDED | Reembolsado |
|
||||
| CANCELLED | Cancelado por usuario |
|
||||
|
||||
---
|
||||
|
||||
## 🎟️ Sistema de Bonos
|
||||
|
||||
### Tipos de Bonos
|
||||
|
||||
| Nombre | Reservas | Precio | Validez |
|
||||
|--------|----------|--------|---------|
|
||||
| Pack 5 Clases | 5 | $90 | 90 días |
|
||||
| Pack 10 Clases | 10 | $160 | 180 días |
|
||||
| Pack Mensual | 30 | $400 | 30 días |
|
||||
|
||||
### Reglas
|
||||
- Un bono = Una reserva completa (1 hora)
|
||||
- No se puede usar parcialmente
|
||||
- Un booking solo puede tener un bono
|
||||
- FIFO al usar (el que expira primero)
|
||||
|
||||
---
|
||||
|
||||
## 💎 Suscripciones
|
||||
|
||||
### Planes Disponibles
|
||||
|
||||
| Plan | Precio/Mes | Descuento | Gratis/Mes | Prioridad |
|
||||
|------|-----------|-----------|------------|-----------|
|
||||
| Básico | $150 | 10% | 2 | No |
|
||||
| Premium | $250 | 20% | 5 | Sí |
|
||||
| Anual VIP | $25000/año | 30% | 10 | Sí |
|
||||
|
||||
### Beneficios Automáticos
|
||||
- Descuento en todas las reservas
|
||||
- Reservas gratis mensuales (contador)
|
||||
- Prioridad en reservas (primeros en cola)
|
||||
- Descuento en torneos
|
||||
|
||||
---
|
||||
|
||||
## 👨🏫 Sistema de Clases
|
||||
|
||||
### Tipos de Clase
|
||||
|
||||
| Tipo | Máx. Alumnos | Duración | Precio/persona |
|
||||
|------|-------------|----------|----------------|
|
||||
| Individual | 1 | 60 min | $50 |
|
||||
| Grupal | 2-4 | 60 min | $35 |
|
||||
| Clínica | 5-16 | 90 min | $20 |
|
||||
|
||||
### Proceso
|
||||
1. Ver catálogo de clases
|
||||
2. Seleccionar clase y ver sesiones disponibles
|
||||
3. Inscribirse y pagar vía MercadoPago
|
||||
4. Confirmación automática al completar pago
|
||||
5. Asistencia marcada por el coach
|
||||
|
||||
---
|
||||
|
||||
## 🔌 Endpoints de Pagos
|
||||
|
||||
```
|
||||
POST /api/v1/payments/preference - Crear preferencia MP
|
||||
GET /api/v1/payments/my-payments - Mis pagos
|
||||
GET /api/v1/payments/:id - Ver pago
|
||||
POST /api/v1/payments/webhook - Webhook MP (público)
|
||||
POST /api/v1/payments/:id/refund - Reembolsar (admin)
|
||||
POST /api/v1/payments/:id/cancel - Cancelar pago
|
||||
```
|
||||
|
||||
## 🔌 Endpoints de Bonos
|
||||
|
||||
```
|
||||
GET /api/v1/bonus-packs - Listar packs disponibles
|
||||
POST /api/v1/bonus-packs - Crear pack (admin)
|
||||
POST /api/v1/bonuses/purchase - Comprar bono
|
||||
GET /api/v1/bonuses/my-bonuses - Mis bonos
|
||||
GET /api/v1/bonuses/available - Bonos disponibles para usar
|
||||
POST /api/v1/bonuses/:id/use - Usar bono específico
|
||||
POST /api/v1/bonuses/use-auto - Usar bono automático
|
||||
```
|
||||
|
||||
## 🔌 Endpoints de Suscripciones
|
||||
|
||||
```
|
||||
GET /api/v1/subscription-plans - Listar planes
|
||||
POST /api/v1/subscription-plans - Crear plan (admin)
|
||||
POST /api/v1/subscriptions - Crear suscripción
|
||||
GET /api/v1/subscriptions/my-subscription - Mi suscripción
|
||||
GET /api/v1/subscriptions/benefits - Ver mis beneficios
|
||||
PUT /api/v1/subscriptions/:id/cancel - Cancelar
|
||||
PUT /api/v1/subscriptions/:id/pause - Pausar
|
||||
PUT /api/v1/subscriptions/:id/resume - Reanudar
|
||||
POST /api/v1/subscriptions/webhook - Webhook MP
|
||||
```
|
||||
|
||||
## 🔌 Endpoints de Clases
|
||||
|
||||
```
|
||||
POST /api/v1/coaches/register - Registrarme como coach
|
||||
GET /api/v1/coaches - Listar coaches
|
||||
GET /api/v1/coaches/:id - Ver coach
|
||||
POST /api/v1/coaches/:id/reviews - Dejar reseña
|
||||
GET /api/v1/classes - Listar clases
|
||||
POST /api/v1/classes - Crear clase (coach)
|
||||
POST /api/v1/classes/:id/sessions - Programar sesión
|
||||
POST /api/v1/class-enrollments - Inscribirme
|
||||
GET /api/v1/class-enrollments/my - Mis inscripciones
|
||||
PUT /api/v1/class-enrollments/:id/attend - Marcar asistencia
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🚀 Cómo probar pagos
|
||||
|
||||
### Configurar credenciales MercadoPago
|
||||
```bash
|
||||
# .env
|
||||
MERCADOPAGO_ACCESS_TOKEN=TEST-xxxxxxxx
|
||||
MERCADOPAGO_PUBLIC_KEY=TEST-yyyyyyyy
|
||||
```
|
||||
|
||||
### Crear preferencia de pago
|
||||
```bash
|
||||
curl -X POST http://localhost:3000/api/v1/payments/preference \
|
||||
-H "Authorization: Bearer TOKEN" \
|
||||
-H "Content-Type: application/json" \
|
||||
-d '{
|
||||
"type": "BOOKING",
|
||||
"referenceId": "booking-id",
|
||||
"title": "Reserva Cancha 1",
|
||||
"description": "Reserva para el 15/02/2024",
|
||||
"amount": 2500
|
||||
}'
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📁 Archivos creados en esta fase
|
||||
|
||||
```
|
||||
backend/src/
|
||||
├── config/
|
||||
│ └── mercadopago.ts # Configuración MP
|
||||
├── services/
|
||||
│ ├── payment.service.ts # Pagos con MP
|
||||
│ ├── bonusPack.service.ts # Packs de bonos
|
||||
│ ├── userBonus.service.ts # Bonos de usuarios
|
||||
│ ├── subscriptionPlan.service.ts # Planes
|
||||
│ ├── subscription.service.ts # Suscripciones
|
||||
│ ├── coach.service.ts # Coaches
|
||||
│ ├── class.service.ts # Clases
|
||||
│ └── classEnrollment.service.ts # Inscripciones
|
||||
├── controllers/
|
||||
│ ├── payment.controller.ts
|
||||
│ ├── bonusPack.controller.ts
|
||||
│ ├── userBonus.controller.ts
|
||||
│ ├── subscriptionPlan.controller.ts
|
||||
│ ├── subscription.controller.ts
|
||||
│ ├── coach.controller.ts
|
||||
│ ├── class.controller.ts
|
||||
│ └── classEnrollment.controller.ts
|
||||
├── routes/
|
||||
│ ├── payment.routes.ts
|
||||
│ ├── bonus.routes.ts
|
||||
│ ├── subscription.routes.ts
|
||||
│ ├── coach.routes.ts
|
||||
│ ├── class.routes.ts
|
||||
│ └── classEnrollment.routes.ts
|
||||
└── validators/
|
||||
├── payment.validator.ts
|
||||
├── bonus.validator.ts
|
||||
├── subscription.validator.ts
|
||||
└── class.validator.ts
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 🎯 Datos de prueba
|
||||
|
||||
| Entidad | Datos |
|
||||
|---------|-------|
|
||||
| Bonus Packs | Pack 5, Pack 10, Pack Mensual |
|
||||
| Planes | Básico ($150), Premium ($250), Anual VIP ($25000) |
|
||||
| Coach | Admin verificado como coach |
|
||||
| Clases | Individual, Pareja, Clínica de Volea |
|
||||
|
||||
---
|
||||
|
||||
## 📝 Notas
|
||||
|
||||
- MercadoPago en modo sandbox para desarrollo
|
||||
- Webhooks configurables en dashboard de MP
|
||||
- Requiere cuenta de MP para producción
|
||||
- Beneficios de suscripción aplicados automáticamente
|
||||
|
||||
---
|
||||
|
||||
*Completada el: 2026-01-31*
|
||||
|
||||
Reference in New Issue
Block a user