Backend base en Node.js + Express con estructura modular (estilo Nest), PostgreSQL y Docker Compose.
La descripcion funcional y la logica general del sistema estan en CONSIDERACIONES.md.
Necesitas tener instalado:
- Node.js (recomendado >= 20)
- npm
- Docker
- Docker Compose
Validacion rapida:
node -v
npm -v
docker -v
docker compose versionjudge-back/
.env
.env.example
docker-compose.yml
package.json
src/
main.js
app.module.js
config/
env.js
database/
postgres.js
modules/
auth/
auth.module.js
auth.controller.js
auth.service.js
auth.repository.js
auth.middleware.js
health/
health.module.js
health.controller.js
health.service.js
Archivo .env actual:
PORT=3000
DB_HOST=localhost
DB_PORT=5434
DB_USER=postgres
DB_PASSWORD=postgres
DB_NAME=judge_back
REDIS_HOST=localhost
REDIS_PORT=6378
BULLBOARD_PORT=7307
BULLMQ_HEALTH_QUEUE=health-check-queue
GOOGLE_CLIENT_ID=your-google-client-id.apps.googleusercontent.com
JWT_SECRET=replace-with-a-strong-secret
JWT_EXPIRES_IN=7dNotas de autenticacion:
- Este backend usa login solo con Google (sin correo/contrasena local).
GOOGLE_CLIENT_IDdebe ser el mismo client ID configurado en tu frontend.JWT_SECRETse usa para firmar el token propio del backend.
Notas de infraestructura local:
REDIS_PORTexpone Redis en tu maquina local.BULLBOARD_PORTexpone la UI de Bull Board.
- Instalar dependencias
npm install- Levantar infraestructura local (PostgreSQL + Redis + Bull Board)
docker compose up -dEste comando levanta:
- PostgreSQL
- Redis
- Bull Board
- Verificar que los contenedores estan arriba
docker psDeberias ver al menos estos contenedores:
judge-back-postgresjudge-back-redisjudge-back-bullboard
- Iniciar backend
npm run start:dev- Probar endpoint de salud
curl http://localhost:3000/healthRespuesta esperada (ejemplo):
{
"message": "OK",
"databaseTime": "2026-04-18T12:00:00.000Z",
"bullmq": {
"queue": "health-check-queue",
"jobId": "1",
"name": "health-check-job"
}
}Cada vez que llamas GET /health, el backend crea un job nuevo en BullMQ.
Luego lo puedes ver en Bull Board.
Si aun no tienes frontend, puedes generar un idToken desde OAuth Playground y probar este endpoint con curl.
Endpoint de login:
POST /auth/googleBody esperado:
{
"idToken": "token_devuelto_por_google"
}Respuesta exitosa (ejemplo):
{
"accessToken": "jwt_del_backend",
"user": {
"id": 1,
"email": "estudiante@correo.com",
"full_name": "Nombre Apellido",
"avatar_url": "https://...",
"created_at": "2026-04-18T12:00:00.000Z",
"updated_at": "2026-04-18T12:00:00.000Z"
}
}Endpoint para usuario autenticado:
GET /auth/me
Authorization: Bearer <accessToken>Importante:
- La tabla
usersse crea automaticamente al arrancar la app. - No existe login con password en este backend.
- El
idTokendebe tener comoaudel mismoGOOGLE_CLIENT_IDque configuraste en.env.
Arrancar API en modo desarrollo:
npm run start:devArrancar API en modo normal:
npm startVer logs de contenedores:
docker compose logs -fAbrir Bull Board en local:
http://localhost:7307Prueba rapida de BullMQ:
- Ejecuta
curl http://localhost:3000/healthvarias veces. - Abre Bull Board en
http://localhost:7307. - Valida que existe actividad en la cola
health-check-queue.
Detener infraestructura local:
docker compose downPuerto ocupado al levantar PostgreSQL:
- Cambia
DB_PORTen.env. - Vuelve a ejecutar
docker compose up -d.
Error de conexion a DB:
- Verifica que el contenedor exista en
docker ps. - Revisa que
.envcoincida condocker-compose.yml.
- Leer
CONSIDERACIONES.mdpara entender la arquitectura completa (API + cola BullMQ + microservicio de ejecucion + veredictos).