Plataforma colaborativa desarrollada con arquitectura MVC profesional que permite a estudiantes universitarios compartir y descubrir recursos académicos de manera eficiente y organizada.
|
|
|
|
- Node.js v14+ instalado ✅
- MySQL Server 5.7+ corriendo ✅
- Git (opcional)
# 1. Clonar el repositorio (o descargar ZIP)
git clone https://github.com/FISI-2025-II/FisiCollab.git
cd FisiCollab
# 2. Configuración automática (instala dependencias + crea BD)
npm run setup
# 3. Iniciar servidor
npm start¡Listo! Abre http://localhost:3000 en tu navegador 🎉
📦 FisiCollab/
├── 📂 config/ # Configuración de base de datos
│ └── database.js # Pool de conexiones MySQL
├── 📂 models/ # Capa de datos (ORM manual)
│ ├── Usuario.js # Modelo de usuarios
│ └── Recurso.js # Modelo de recursos
├── 📂 controllers/ # Lógica de negocio
│ ├── usuarioController.js # Autenticación y usuarios
│ └── recursoController.js # CRUD de recursos
├── 📂 routes/ # Rutas de la API
│ ├── usuarios.js # Endpoints de usuarios
│ └── recursos.js # Endpoints de recursos
├── 📂 middleware/ # Middlewares personalizados
│ └── auth.js # Verificación de autenticación
├── 📂 views/ # Vistas HTML
│ ├── login.html
│ ├── registro.html
│ ├── dashboard.html
│ └── agregar.html
├── 📂 public/ # Archivos estáticos
│ ├── css/styles.css # 650+ líneas de estilos
│ └── js/ # JavaScript del cliente
├── 📂 database/
│ └── schema.sql # Script de creación de BD
├── 📄 server.js # Servidor Express principal
├── 📄 configurar.js # Setup automático
├── 📄 verificar-instalacion.js # Verificador de requisitos
├── 📄 package.json # Dependencias
├── 📄 .env # Variables de entorno
└── 📄 README.md # Este archivo
✓ Hash de contraseñas con bcrypt (salt rounds: 10)
✓ Sesiones seguras con express-session
✓ Middleware de autenticación
✓ Protección CSRF (sameSite: 'strict')
✓ Validación de email con regex
✓ Mensajes de error informativos✓ CRUD completo de recursos académicos
✓ Tipos: Video, Documento, Código, Curso Online, Presentación
✓ Validación de URLs con regex
✓ Filtrado dinámico por curso
✓ Búsqueda por usuario
✓ Lista de cursos únicos
✓ Verificación de propiedad (editar/eliminar)✓ Diseño responsive (mobile-first)
✓ Gradientes dinámicos con animaciones
✓ Cards con hover effects
✓ Grid system adaptativo
✓ Formularios con validación visual
✓ Mensajes de feedback al usuario
✓ Carga asíncrona con Fetch API# Configuración automática (primera vez)
npm run setup # Configura MySQL y crea BD
# Verificar instalación
npm run verify # Verifica requisitos del sistema
# Desarrollo
npm run dev # Inicia con nodemon (auto-reload)
# Producción
npm start # Inicia servidor en modo producciónPOST /api/usuarios/registro # Registrar nuevo usuario
POST /api/usuarios/login # Iniciar sesión
POST /api/usuarios/logout # Cerrar sesión
GET /api/usuarios/me # Usuario actual
GET /api/usuarios # Listar todosGET /api/recursos # Obtener todos los recursos
GET /api/recursos?curso=X # Filtrar por curso
GET /api/recursos/:id # Obtener recurso por ID
GET /api/recursos/mis-recursos # Recursos del usuario actual
POST /api/recursos # Crear nuevo recurso
PUT /api/recursos/:id # Actualizar recurso
DELETE /api/recursos/:id # Eliminar recurso
GET /api/recursos/cursos/lista # Obtener cursos únicosGET /api/health # Estado del servidor y BD# Health check
curl http://localhost:3000/api/health
# Login
curl -X POST http://localhost:3000/api/usuarios/login \
-H "Content-Type: application/json" \
-d '{"email":"usuario@fisi.edu.pe","password":"password123"}'
# Obtener recursos
curl http://localhost:3000/api/recursos# Servidor
PORT=3000
NODE_ENV=development
# Base de Datos
DB_HOST=localhost
DB_USER=root
DB_PASSWORD=tu_contraseña
DB_NAME=recursos_academicos
DB_PORT=3306
# Sesión
SESSION_SECRET=tu_secreto_super_seguro┌─────────────┐
│ Cliente │ (Views HTML + Public JS/CSS)
└──────┬──────┘
│ HTTP Request
▼
┌─────────────┐
│ Routes │ (usuarios.js, recursos.js)
└──────┬──────┘
│ req, res
▼
┌─────────────┐
│ Controllers │ (usuarioController, recursoController)
└──────┬──────┘
│ Business Logic
▼
┌─────────────┐
│ Models │ (Usuario.js, Recurso.js)
└──────┬──────┘
│ SQL Queries
▼
┌─────────────┐
│ Database │ (MySQL)
└─────────────┘
Usuario → /login → POST /api/usuarios/login
↓
Verificar credenciales
↓
Crear sesión (express-session)
↓
Redirect a /dashboard
↓
Middleware verifica sesión
↓
Acceso permitido ✓
- ✅ Contraseñas hasheadas con bcrypt (salt rounds: 10)
- ✅ Sessions seguras con
httpOnly,sameSite: 'strict' - ✅ Validación de inputs en frontend y backend
- ✅ Protección SQL Injection con prepared statements
- ✅ CORS configurado según entorno
- ✅ Variables de entorno para datos sensibles
// Email
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/;
// URL de recursos
const URL_REGEX = /^(https?:\/\/)?([\w\d-]+\.)+[\w\d]{2,}.*$/;
// Constraints
const MIN_PASSWORD_LENGTH = 6;
const MAX_TITULO_LENGTH = 200;
const MAX_DESCRIPCION_LENGTH = 1000;
const BCRYPT_SALT_ROUNDS = 10;Si ejecutaste el script completo schema.sql:
| Contraseña | Recursos | |
|---|---|---|
| juan@fisi.edu.pe | password123 | 2 |
| maria@fisi.edu.pe | password123 | 2 |
| carlos@fisi.edu.pe | password123 | 1 |
# Verificar que MySQL esté corriendo
netstat -ano | findstr :3306
# Verificar credenciales
mysql -u root -p
# Ver logs del servidor
npm start# Cambiar puerto en .env
PORT=3001
# O detener proceso
netstat -ano | findstr :3000
taskkill /PID [numero] /F# Reinstalar dependencias
rm -rf node_modules package-lock.json
npm install- 📖 DESPLIEGUE-LOCAL.md - Guía completa de despliegue
- 🐙 GitHub Repository - Código fuente
- Fork el proyecto
- Crea una rama (
git checkout -b feature/mejora) - Commit tus cambios (
git commit -m 'Agregar nueva feature') - Push a la rama (
git push origin feature/mejora) - Abre un Pull Request
Proyecto académico para Facultad de Ingeniería de Sistemas - FISI
Universidad Nacional Mayor de San Marcos (UNMSM)
Promoción 2025 - FISI
Desarrollado con ❤️ para facilitar el aprendizaje colaborativo