Plataforma educativa en línea con sistema de roles, cursos, pagos y certificados
- Características
- Arquitectura
- Inicio Rápido con Docker
- Instalación Manual
- Estructura del Proyecto
- Documentación
- API Endpoints
- Sistema de Roles
- Desarrollo
- Despliegue
- ✅ Registro e inicio de sesión seguro
- ✅ Explorar catálogo de cursos
- ✅ Ver precios en moneda local (detección automática por país)
- ✅ Comprar cursos con tarjetas reales (Mercado Pago)
- ✅ Inscribirse automáticamente después del pago
- ✅ Acceder a contenido educativo
- ✅ Seguir progreso de aprendizaje
- ✅ Obtener certificados al completar cursos
- ✅ Solicitar ser instructor
- ✅ Sistema de solicitud y aprobación
- ✅ Crear y gestionar cursos propios
- ✅ Dashboard con estadísticas
- ✅ Ver estudiantes e inscripciones
- ✅ Rutas específicas para gestión
- ✅ Panel de control completo
- ✅ Gestionar solicitudes de instructores
- ✅ Crear y editar cursos
- ✅ Gestionar usuarios y permisos
- ✅ Estadísticas del sistema
- ✅ Ver historial de pagos
- ✅ Integración con Mercado Pago (CardPayment Brick)
- ✅ Pagos con tarjetas reales (Visa, Mastercard, Amex)
- ✅ Tokenización client-side (PCI DSS compliant)
- ✅ Webhooks automáticos para confirmación de pagos
- ✅ Enrollments automáticos después del pago
- ✅ Emails de confirmación de pago
- ✅ Detección automática de país por IP
- ✅ Precios en moneda local (COP, MXN, BRL, CLP, ARS, etc.)
- ✅ Conversión automática desde USD
- ✅ Precios fijos en PEN (base del negocio)
- ✅ Modelo híbrido: PEN como base + USD fijo para internacional
- Framework: Django 5.0
- Arquitectura: Clean Architecture
- API: Django REST Framework + Swagger
- Base de Datos: PostgreSQL 15
- Autenticación: JWT con refresh tokens
- Seguridad: Django AXES, rate limiting, validaciones
- Framework: Next.js 14 + TypeScript
- Arquitectura: Feature-based
- Estilos: Tailwind CSS
- Data Fetching: SWR
- Autenticación: JWT en sessionStorage
- Containerización: Docker + Docker Compose
- Base de Datos: PostgreSQL
- Caché: Redis
- Tareas Asíncronas: Celery
- Procesador de Pagos: Mercado Pago
- Tokenización: CardPayment Brick (client-side)
- Monedas Soportadas: PEN, USD, COP, MXN, BRL, CLP, ARS, BOB
- Detección de País: ipapi.co
- Tasas de Cambio: ExchangeRate API
- Docker Desktop (Windows/Mac) o Docker Engine + Docker Compose (Linux)
- Git
# 1. Clonar repositorio
git clone <url-del-repositorio>
cd fagsol
# 2. Configurar variables de entorno
cp .env.example .env
# Editar .env si es necesario (valores por defecto funcionan para desarrollo)
# 3. Levantar todos los servicios
docker-compose up -d
# 4. Ver logs
docker-compose logs -f
# 5. Crear superusuario (primera vez)
docker-compose exec backend python manage.py createsuperuser
# 6. Acceder a la aplicación
# Frontend: http://localhost:3000
# Backend API: http://localhost:8000
# Swagger: http://localhost:8000/swagger/
# Admin: http://localhost:8000/admin/📖 Ver DOCKER_SETUP.md para documentación completa de Docker
cd backend
# Crear entorno virtual
python -m venv venv
source venv/bin/activate # Windows: venv\Scripts\activate
# Instalar dependencias
pip install -r requirements.txt
# Configurar variables de entorno
cp .env.example .env
# Editar .env con tus configuraciones
# Aplicar migraciones
python manage.py migrate
# Crear superusuario
python manage.py createsuperuser
# Iniciar servidor
python manage.py runservercd frontend
# Instalar dependencias
npm install
# Configurar variables de entorno
cp .env.example .env.local
# Editar .env.local con NEXT_PUBLIC_API_URL
# Iniciar servidor de desarrollo
npm run devfagsol/
├── backend/ # Django Backend
│ ├── apps/ # Aplicaciones Django
│ │ ├── core/ # Modelos base (UserProfile, InstructorApplication)
│ │ ├── users/ # Usuarios y permisos
│ │ ├── courses/ # Cursos, módulos, lecciones
│ │ └── payments/ # Pagos y transacciones
│ ├── config/ # Configuración Django
│ ├── domain/ # Entidades y reglas de negocio
│ ├── application/ # Casos de uso
│ ├── infrastructure/ # Servicios y repositorios
│ └── presentation/ # Views, serializers, URLs
│
├── frontend/ # Next.js Frontend
│ ├── src/
│ │ ├── app/ # Rutas de Next.js
│ │ ├── features/ # Módulos por funcionalidad
│ │ │ ├── auth/ # Autenticación
│ │ │ ├── dashboard/ # Dashboards
│ │ │ ├── academy/ # Cursos y catálogo
│ │ │ ├── admin/ # Panel admin
│ │ │ └── instructor/ # Panel instructor
│ │ └── shared/ # Componentes y servicios compartidos
│ └── public/ # Archivos estáticos
│
├── docker-compose.yml # Orquestación Docker
├── .env.example # Variables de entorno de ejemplo
└── README.md # Este archivo
- QUICK_START.md - Inicio rápido
- CHANGELOG.md - Registro de cambios
- CHECKLIST_PRODUCCION.md - Checklist para producción
- docs/README.md - Índice completo de documentación
- docs/setup/ - Guías de configuración
- docs/guides/ - Guías de uso
- docs/payments/ - Documentación de pagos
- docs/production/ - Producción y despliegue
- Swagger UI: http://localhost:8000/swagger/
- ReDoc: http://localhost:8000/redoc/
POST /api/v1/auth/register/- Registro de estudiantesPOST /api/v1/auth/login/- Inicio de sesiónPOST /api/v1/auth/logout/- Cerrar sesiónGET /api/v1/auth/me/- Usuario actualPOST /api/v1/auth/apply-instructor/- Solicitar ser instructor
GET /api/v1/dashboard/stats/- Estadísticas según rolGET /api/v1/dashboard/student/stats/- Estadísticas de estudianteGET /api/v1/dashboard/instructor/stats/- Estadísticas de instructorGET /api/v1/dashboard/admin/stats/- Estadísticas de admin
GET /api/v1/admin/instructor-applications/- Listar solicitudesPOST /api/v1/admin/instructor-applications/{id}/approve/- AprobarPOST /api/v1/admin/instructor-applications/{id}/reject/- Rechazar
GET /api/v1/courses/- Listar cursosGET /api/v1/courses/slug/{slug}/- Obtener curso por slugPOST /api/v1/courses/- Crear curso (instructor/admin)GET /api/v1/courses/{id}/- Detalle de cursoPUT /api/v1/courses/{id}/update/- Actualizar curso
POST /api/v1/payments/intent/- Crear payment intentPOST /api/v1/payments/process/- Procesar pagoGET /api/v1/payments/intent/{id}/- Obtener payment intentGET /api/v1/payments/history/- Historial de pagosPOST /api/v1/payments/webhook/- Webhook de Mercado Pago
GET /api/v1/currency/detect/- Detectar país y monedaGET /api/v1/currency/convert/- Convertir precio USD a moneda local
Ver Swagger para documentación completa: http://localhost:8000/swagger/
- Ver cursos publicados
- Inscribirse en cursos
- Acceder a contenido
- Solicitar ser instructor
- Requiere aprobación de admin
- Crear cursos (draft)
- Gestionar sus cursos
- Ver estadísticas
- PoW
- Acceso completo
- Aprobar/rechazar instructores
- Aprobar/rechazar cursos
- Gestionar usuarios
# Migraciones
python manage.py makemigrations
python manage.py migrate
# Crear superusuario
python manage.py createsuperuser
# Shell de Django
python manage.py shell
# Tests
python manage.py test
# Comandos personalizados
python manage.py fix_user_auth email@example.com
python manage.py unlock_all_users# Desarrollo
npm run dev
# Build
npm run build
# Producción
npm start
# Tests
npm test
npm run test:e2e- ✅ Frontend: Automático con Next.js
- ✅ Backend: Auto-reload con
runserver
# Build para producción
docker-compose -f docker-compose.prod.yml build
# Levantar en producción
docker-compose -f docker-compose.prod.yml up -dDEBUG=Falseen producciónSECRET_KEYúnico y seguroALLOWED_HOSTScon tu dominioDB_PASSWORDfuerte- Configurar HTTPS
Ver DOCKER_SETUP.md para más detalles
- ✅ JWT con refresh tokens
- ✅ Rate limiting (Django AXES)
- ✅ Validación de permisos en backend
- ✅ Sanitización de inputs
- ✅ CORS configurado
- ✅ Tokens en sessionStorage (no localStorage)
- ✅ Sistema de autenticación completo (JWT)
- ✅ Sistema de roles y permisos
- ✅ Flujo de solicitud de instructor
- ✅ Panel admin completo
- ✅ Dashboard para todos los roles
- ✅ CRUD completo de cursos
- ✅ Sistema de pagos con Mercado Pago
- ✅ Pagos con tarjetas reales funcionando
- ✅ Webhooks de Mercado Pago
- ✅ Sistema multi-moneda (detección automática)
- ✅ Precios internacionales (Opción C: Híbrido)
- ✅ Enrollments automáticos después del pago
- ✅ Emails de confirmación de pago
- ✅ Historial de pagos
- ✅ UI moderna y responsive
- ✅ Pagos funcionando con tarjetas reales
- ✅ Webhooks configurados y funcionando
- ✅ Sistema multi-moneda probado
- ✅ Seguridad implementada (PCI DSS compliant)
⚠️ Pendiente: Configurar credenciales de producción
- Fork el proyecto
- Crea una rama (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request