Loading repository data…
Loading repository data…
Venganza-de-Python-II / repository
SkillsForge es una plataforma integral para la gestión y participación en talleres de formación profesional. Desarrollado con Next.js (frontend) y Flask (backend) con MongoDB como base de datos.
SkillsForge es una plataforma integral para la gestión y participación en talleres de formación profesional. Desarrollado con Next.js (frontend) y Flask (backend) con MongoDB como base de datos.
🎯 Prototipo de Prueba
| Requisito | Estado | Implementación | Código |
|---|---|---|---|
| Ver lista de talleres | ✅ Completo | Lista con nombre, fecha, hora, lugar y tipo | app/estudiantes/talleres/page.tsx |
| Registrar un taller (admin) | ✅ Completo | Formulario con todos los campos requeridos | components/formulario-taller.tsx |
| Modificar un taller (admin) | ✅ Completo | Edición completa con validaciones | app/admin/page.tsx |
| Cancelar un taller (admin) | ✅ Completo | Eliminación con confirmación | app/admin/page.tsx |
| Registrarse a un taller (estudiante) | ✅ Completo | Inscripción con control de cupos | components/boton-inscripcion.tsx |
| Endpoint | Método | Estado | Implementación | Código |
|---|---|---|---|---|
/workshops | GET | ✅ Completo | Obtener todos los talleres | backend/app.py |
/workshops/{id} | GET | ✅ Completo | Obtener taller específico | backend/app.py |
/workshops | POST | ✅ Completo | Crear nuevo taller (admin) | backend/app.py |
/workshops/{id} | PUT | ✅ Completo | Modificar taller (admin) | backend/app.py |
/workshops/{id} | DELETE | ✅ Completo | Eliminar taller (admin) | backend/app.py |
/workshops/{id}/register | POST | ✅ Completo | Registrar estudiante | backend/app.py |
| Componente | Estado | Descripción | Código |
|---|---|---|---|
| Portal Estudiantes | ✅ Completo | Ver talleres y registrarse | app/estudiantes/talleres/page.tsx |
| Panel Administradores | ✅ Completo | Gestión completa de talleres | app/admin/page.tsx |
| Formularios React | ✅ Completo | Crear/editar talleres | components/formulario-taller.tsx |
| Tablas React | ✅ Completo | Listado de talleres | components/tabla-talleres.tsx |
| Tecnología | Estado | Versión | Implementación |
|---|---|---|---|
| Backend: Flask | ✅ Completo | 3.0.3 | backend/app.py |
| Frontend: React | ✅ Completo | Next.js 15 | app/ |
| Base de datos: MongoDB | ✅ Completo | 6.0 | docker-compose.yml |
| Autenticación: JWT | ✅ Completo | PyJWT 2.9.0 | backend/app.py |
| Docker | ✅ Completo | Docker Compose | docker-compose.yml |
| PyMongo | ✅ Completo | 4.8.0 | backend/requirements.txt |
| Extra | Estado | Descripción | Código | Comando |
|---|---|---|---|---|
| Documentación Técnica | ✅ Completo | Arquitectura, BD y despliegue | docs/documentacion-tecnica.md | - |
| Rate Limiting | ✅ Completo | Protección anti-spam | backend/app.py:35-55 | - |
| Refresh Tokens | ✅ Completo | Renovación automática de tokens | backend/app.py:470-550 | - |
backend/app.py:604backend/app.py:659backend/app.py:625backend/app.py:210backend/app.py:215backend/app.py:880backend/app.py:740backend/app.py:860Todas las respuestas de la API están en formato JSON - backend/app.py:15
backend/app.py:200-230backend/app.py:232-280backend/app.py:470-550backend/app.py:470-550lib/api.ts:80-120backend/app.py:35-55backend/app.py:543+backend/app.py:860-870backend/app.py:850-860backend/app.py:620-640lib/api.ts:45-80lib/api.ts:120-150lib/api.ts:25-45GET /workshops → Obtener todos los talleres disponiblesGET /workshops/{id} → Obtener detalles de un taller específicoPOST /workshops → Crear un nuevo taller (solo administradores)PUT /workshops/{id} → Modificar un taller existente (solo administradores)DELETE /workshops/{id} → Eliminar un taller (solo administradores)POST /workshops/{id}/register → Registrar a un estudiante en un tallererDiagram
TALLERES {
ObjectId _id PK "Clave primaria"
string nombre "Nombre del taller"
string descripcion "Descripción detallada"
string fecha "Fecha en formato YYYY-MM-DD"
string hora "Hora en formato HH:MM"
string lugar "Ubicación física"
string categoria "Categoría del taller"
string tipo "Tipo de actividad"
string instructor "Nombre del instructor"
float rating "Calificación 0.0-5.0"
int cupo "Capacidad máxima"
string creado_en "Timestamp ISO 8601"
string actualizado_en "Timestamp ISO 8601"
array inscripciones "Subdocumentos embebidos"
}
ESTUDIANTES {
ObjectId _id PK "Clave primaria"
string nombre "Nombre completo"
string email UK "Email único"
string hash "Hash bcrypt contraseña"
string creado_en "Timestamp ISO 8601"
}
INSCRIPCIONES {
string estudiante_id FK "Referencia a ESTUDIANTES._id"
string nombre "Nombre del estudiante (desnormalizado)"
string email "Email del estudiante (desnormalizado)"
string registrado_en "Timestamp de inscripción"
}
TALLERES ||--o{ INSCRIPCIONES : "contiene"
ESTUDIANTES ||--o{ INSCRIPCIONES : "se_inscribe_en"
talleres| Campo | Tipo | Restricciones | Descripción |
|---|---|---|---|
_id | ObjectId | PK, Auto-generado | Identificador único del taller |
nombre | String | Requerido, 1-200 chars | Nombre descriptivo del taller |
descripcion | String | Requerido, 1-1000 chars | Descripción detallada del contenido |
fecha | String | Requerido, formato YYYY-MM-DD | Fecha |