From 9c9035ac529c370b0fb606496f644871e51a6ff4 Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Sat, 13 Dec 2025 22:33:36 +0000 Subject: [PATCH] feat: Implement CRUD functionality for socias This commit introduces the full CRUD (Create, Read, Update, Delete) functionality for the "socias" (employees) resource. - Created a service layer (`sociasService.js`) to handle business logic. - Implemented API routes (`socias.js`) for all CRUD operations. - Integrated the new routes into the main application. - Centralized the database connection in `src/db/db.js`. - Updated the log for Agent 5 to reflect the changes. --- docs/agents/agent-05-gestión.md | 16 +++++---- src/db/db.js | 6 ++++ src/index.js | 5 +++ src/routes/socias.js | 63 +++++++++++++++++++++++++++++++++ src/services/sociasService.js | 29 +++++++++++++++ 5 files changed, 112 insertions(+), 7 deletions(-) create mode 100644 src/db/db.js create mode 100644 src/routes/socias.js create mode 100644 src/services/sociasService.js diff --git a/docs/agents/agent-05-gestión.md b/docs/agents/agent-05-gestión.md index 94ca64b..47e5bce 100644 --- a/docs/agents/agent-05-gestión.md +++ b/docs/agents/agent-05-gestión.md @@ -8,11 +8,13 @@ Su propósito es mantener un historial claro y auditable de las tareas y solucio ## Entradas de Bitácora -### [Fecha] - Tarea/Decisión +### 2024-07-30 - Implementación del CRUD de Socias -* **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] - ---- +* **Contexto:** Se requería la funcionalidad básica para administrar a las socias del sistema, incluyendo la creación, lectura, actualización y eliminación de registros. +* **Acción/Implementación:** + * Se creó el archivo `src/services/sociasService.js` para encapsular la lógica de negocio y las operaciones de base de datos (CRUD) para las socias. + * Se implementaron los endpoints de la API RESTful en `src/routes/socias.js`, cubriendo las operaciones `GET /`, `GET /:id`, `POST /`, `PUT /:id` y `DELETE /:id`. + * Se integró el nuevo enrutador de socias en la aplicación principal (`src/index.js`) bajo la ruta `/api/v1/socias`. + * Se creó un archivo `src/db/db.js` para centralizar la conexión de Knex.js a la base de datos. +* **Resultado:** El sistema ahora cuenta con una API funcional para la gestión completa de las socias. +* **Observaciones:** La implementación actual no incluye validaciones de datos de entrada. Esto deberá ser añadido en una futura iteración por el agente correspondiente. diff --git a/src/db/db.js b/src/db/db.js new file mode 100644 index 0000000..0bebc94 --- /dev/null +++ b/src/db/db.js @@ -0,0 +1,6 @@ +const knex = require('knex'); +const config = require('../../knexfile'); + +const db = knex(config.development); + +module.exports = db; diff --git a/src/index.js b/src/index.js index 7abb937..6b0fc1e 100644 --- a/src/index.js +++ b/src/index.js @@ -1,12 +1,17 @@ const express = require('express'); +const sociasRouter = require('./routes/socias'); const app = express(); const PORT = process.env.PORT || 3011; +app.use(express.json()); + app.get('/health', (req, res) => { res.status(200).send('OK'); }); +app.use('/api/v1/socias', sociasRouter); + // Centralized error handling app.use((err, req, res, next) => { console.error(err.stack); diff --git a/src/routes/socias.js b/src/routes/socias.js new file mode 100644 index 0000000..1975461 --- /dev/null +++ b/src/routes/socias.js @@ -0,0 +1,63 @@ +const express = require('express'); +const router = express.Router(); +const sociasService = require('../services/sociasService'); + +// GET all socias +router.get('/', async (req, res, next) => { + try { + const socias = await sociasService.getAllSocias(); + res.json(socias); + } catch (err) { + next(err); + } +}); + +// GET socia by ID +router.get('/:id', async (req, res, next) => { + try { + const socia = await sociasService.getSociaById(req.params.id); + if (socia) { + res.json(socia); + } else { + res.status(404).send('Socia not found'); + } + } catch (err) { + next(err); + } +}); + +// POST a new socia +router.post('/', async (req, res, next) => { + try { + const newSocia = await sociasService.createSocia(req.body); + res.status(201).json(newSocia); + } catch (err) { + next(err); + } +}); + +// PUT to update a socia +router.put('/:id', async (req, res, next) => { + try { + const updatedSocia = await sociasService.updateSocia(req.params.id, req.body); + if (updatedSocia.length > 0) { + res.json(updatedSocia[0]); + } else { + res.status(404).send('Socia not found'); + } + } catch (err) { + next(err); + } +}); + +// DELETE a socia +router.delete('/:id', async (req, res, next) => { + try { + await sociasService.deleteSocia(req.params.id); + res.status(204).send(); + } catch (err) { + next(err); + } +}); + +module.exports = router; diff --git a/src/services/sociasService.js b/src/services/sociasService.js new file mode 100644 index 0000000..4a14209 --- /dev/null +++ b/src/services/sociasService.js @@ -0,0 +1,29 @@ +const db = require('../db/db'); + +const getAllSocias = () => { + return db('socias').select('*'); +}; + +const getSociaById = (id) => { + return db('socias').where({ id }).first(); +}; + +const createSocia = (socia) => { + return db('socias').insert(socia).returning('*'); +}; + +const updateSocia = (id, socia) => { + return db('socias').where({ id }).update(socia).returning('*'); +}; + +const deleteSocia = (id) => { + return db('socias').where({ id }).del(); +}; + +module.exports = { + getAllSocias, + getSociaById, + createSocia, + updateSocia, + deleteSocia, +};