diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..d802c4a --- /dev/null +++ b/.env.example @@ -0,0 +1,9 @@ +# Application configuration +NODE_ENV=development + +# Database configuration +DB_HOST=db +DB_USER=postgres +DB_PASSWORD=secret +DB_NAME=hr_platform +DB_PORT=5432 diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..3c7d009 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,21 @@ +# Usar una imagen base oficial de Node.js +ARG NODE_VERSION=18 +FROM node:${NODE_VERSION}-alpine + +# Establecer el directorio de trabajo en el contenedor +WORKDIR /usr/src/app + +# Copiar package.json y package-lock.json (si existe) +COPY package*.json ./ + +# Instalar las dependencias del proyecto +RUN npm install + +# Copiar el resto del código de la aplicación +COPY . . + +# Exponer el puerto en el que la aplicación se ejecutará +EXPOSE 3011 + +# Comando para iniciar la aplicación +CMD [ "node", "src/index.js" ] diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..757a83a --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,34 @@ +version: '3.8' + +services: + api: + build: . + ports: + - "3011:3011" + volumes: + - .:/usr/src/app + networks: + - app-network + env_file: + - .env + + db: + image: postgres:13 + restart: always + environment: + POSTGRES_USER: ${DB_USER} + POSTGRES_PASSWORD: ${DB_PASSWORD} + POSTGRES_DB: ${DB_NAME} + ports: + - "5432:5432" + volumes: + - postgres-data:/var/lib/postgresql/data + networks: + - app-network + +networks: + app-network: + driver: bridge + +volumes: + postgres-data: diff --git a/docs/agents/agent-01-infraestructura.md b/docs/agents/agent-01-infraestructura.md index 3578677..ceb84ee 100644 --- a/docs/agents/agent-01-infraestructura.md +++ b/docs/agents/agent-01-infraestructura.md @@ -1,18 +1,19 @@ # Bitácora del Agente 1 – Infraestructura & DevOps -Este documento registra las decisiones, cambios y observaciones del **Agente 1**. +## Fecha: 2023-10-27 -Su propósito es mantener un historial claro y auditable de las tareas y soluciones implementadas. +### Cambios Realizados ---- +* **Creación de `Dockerfile`:** + * Se ha añadido un `Dockerfile` para construir la imagen del servicio de Node.js. + * La imagen se basa in `node:18-alpine` para mantenerla ligera. + * Se exponen el puerto 3011 y se define el comando de inicio `node src/index.js`. -## Entradas de Bitácora +* **Creación de `docker-compose.yml`:** + * Se ha creado un archivo `docker-compose.yml` para orquestar los servicios de la aplicación. + * Define dos servicios: `api` (el backend de Node.js) y `db` (una base de datos PostgreSQL). + * Configura una red `app-network` para la comunicación entre servicios. + * Se define un volumen `postgres-data` para la persistencia de los datos de la base de datos. -### [Fecha] - Tarea/Decisión - -* **Contexto:** [Descripción del requerimiento o problema] -* **Acción/Implementación:** [Qué se hizo o cómo se implementó] -* **Resultado:** [Cuál fue el resultado, ej. endpoint creado, test pasado] -* **Observaciones:** [Notas adicionales, dependencias, problemas encontrados] - ---- +* **Creación de `.env.example`:** + * Se ha añadido un archivo `.env.example` con las variables de entorno necesarias para la configuración de la base de datos y la aplicación. diff --git a/docs/agents/agent-2-backend-core.md b/docs/agents/agent-2-backend-core.md new file mode 100644 index 0000000..ed04b30 --- /dev/null +++ b/docs/agents/agent-2-backend-core.md @@ -0,0 +1,20 @@ +# Bitácora del Agente 2 – Backend Core (Node.js) + +Este documento registra las decisiones técnicas, cambios en la estructura y endpoints creados o modificados por el Agente 2. + +## Decisiones Técnicas + +* **Framework:** Se eligió `express` por su flexibilidad y amplio soporte de la comunidad, ideal para construir el core de la API de manera rápida y escalable. +* **Gestor de Paquetes:** Se utiliza `npm` para la gestión de dependencias, siguiendo el estándar de Node.js. +* **Estructura de Carpetas:** Se ha definido una estructura modular (`modules`, `routes`, `services`, `config`, `webhooks`) para organizar el código de forma clara y mantenible a medida que el proyecto crezca. + +## Cambios en Estructura + +* **`package.json`:** Creado para inicializar el proyecto Node.js y gestionar las dependencias. +* **`.gitignore`:** Añadido para excluir `node_modules` del control de versiones. +* **`src/index.js`:** Creado como punto de entrada principal de la aplicación. +* **Directorios:** Se ha creado la estructura de carpetas base dentro de `src/` para albergar los diferentes componentes del backend. + +## Endpoints Creados o Modificados + +* **`GET /health`:** Endpoint inicial implementado para verificar el estado del servidor. Devuelve un `200 OK`. diff --git a/src/index.js b/src/index.js new file mode 100644 index 0000000..7abb937 --- /dev/null +++ b/src/index.js @@ -0,0 +1,18 @@ +const express = require('express'); + +const app = express(); +const PORT = process.env.PORT || 3011; + +app.get('/health', (req, res) => { + res.status(200).send('OK'); +}); + +// Centralized error handling +app.use((err, req, res, next) => { + console.error(err.stack); + res.status(500).send('Something broke!'); +}); + +app.listen(PORT, () => { + console.log(`Server is running on http://localhost:${PORT}`); +});