API REST para conectar estudiantes con skills digitales con ONGs que necesitan apoyo tecnologico. Sistema de matching basado en competencias y niveles de habilidad.
- Runtime: Node.js (ES Modules)
- Framework: Express 5
- Base de datos: PostgreSQL (raw SQL, sin ORM)
- Auth: argon2 + JWT (cookies httpOnly)
- Docs: swagger-jsdoc + Scalar
- Testing: Vitest
npm installCrear un archivo .env en la raiz del proyecto:
PORT=3000
DB_HOST=localhost
DB_PORT=5432
DB_NAME=skillmatch
DB_USER=postgres
DB_PASSWORD=
JWT_SECRET=change_me_in_production
JWT_EXPIRES_IN=7d
DOCS_ENABLED=true# Crear la base de datos
psql -U postgres -d postgres -c "CREATE DATABASE skillmatch;"Opción A — DB nueva desde cero (snapshot)
psql -U postgres -d skillmatch -f database/tables.sqlOpción B — DB nueva con historial de migraciones
npm run migrateDB ya existente — aplicar cambios pendientes
npm run migrateSi tu DB ya fue creada con tables.sql y es la primera vez que usas migraciones, marca la migración inicial como aplicada sin ejecutarla:
npx node-pg-migrate -f database.json up --fake# Cargar datos de desarrollo (opcional)
psql -U postgres -d skillmatch -f database/seed.sqlEl seed incluye: 1 admin, 2 ONGs, 2 estudiantes, 10 skills y 2 proyectos.
Todos los usuarios usan la contraseña Test1234.
- Crear el archivo de migración:
npm run migrate create nombre-del-cambio
- Escribir el SQL en el archivo generado (
database/migrations/TIMESTAMP_nombre-del-cambio.sql) - Actualizar
database/tables.sqlpara reflejar el nuevo estado del schema - Aplicar la migración:
npm run migrate
- Hacer commit con ambos archivos: la migración nueva y
tables.sqlactualizado
| Comando | Descripcion |
|---|---|
npm run dev |
Servidor con nodemon (recarga automatica) |
npm start |
Servidor en modo produccion |
npm test |
Ejecutar todos los tests |
npm run test:watch |
Tests en modo watch |
npm run migrate |
Aplicar migraciones de schema pendientes |
| Modulo | Base | Descripcion |
|---|---|---|
| Auth | /auth |
Registro y login |
| Users | /users |
Perfil generico (GET/PUT /me) |
| Students | /students |
Perfil y skills del estudiante |
| NGOs | /ngos |
Perfil de la ONG |
| Projects | /projects |
CRUD de proyectos y skills requeridas |
| Applications | /applications |
Postulaciones a proyectos |
| Admin | /admin |
Gestion de skills (solo admin) |
Documentacion interactiva disponible en http://localhost:3000/api-docs (Scalar).
src/
├── app.js # Express setup, middleware, rutas
├── server.js # Entry point
├── config/
│ ├── db.js # Pool de PostgreSQL
│ └── swagger.js # Configuracion OpenAPI
├── controllers/ # Parseo HTTP, delegacion al service
├── services/ # Logica de negocio, validaciones
├── repositories/ # Queries SQL parametrizadas
├── routes/ # Definicion de rutas + JSDoc OpenAPI
├── middlewares/
│ └── auth.middleware.js # verifyToken, requireRole
├── utils/
│ └── errors.js # HttpError
└── tests/ # Tests unitarios (Vitest)
database/
├── migrations/ # Migraciones incrementales de schema
├── tables.sql # Snapshot autoritativo del schema
└── seed.sql # Datos de desarrollo