Skip to content

Antonela89/book-api-ADA

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

77 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API de Gestión de Biblioteca (Trabajo Práctico Integrador)

Este proyecto es una aplicación de consola completa para la gestión de una biblioteca, desarrollada en Node.js. Consiste en un servidor TCP que maneja la lógica de negocio y la persistencia de datos, y un cliente de terminal interactivo que permite a los usuarios interactuar con la API de una manera intuitiva y guiada.

La aplicación sigue el patrón de diseño Modelo-Vista-Controlador (MVC) para una clara separación de responsabilidades y un código mantenible.

✨ Características Principales

  • Gestión CRUD Completa: Soporte para Crear, Leer (listar y ver por ID), Actualizar y Eliminar para tres categorías: Autores, Libros y Editoriales.
  • Cliente de Consola Interactivo: Interfaz de usuario amigable con menús numéricos que guía al usuario a través de todas las operaciones, eliminando la necesidad de escribir comandos complejos o JSON.
  • Persistencia de Datos: La información se almacena en archivos .json locales.
  • Búsqueda Inteligente: Búsqueda parcial e insensible a mayúsculas y minúsculas.
  • Reglas de Negocio Robustas:
    • Prevención de Duplicados: No permite agregar autores, libros o editoriales con nombres/títulos idénticos.
    • Restricción de Eliminación: Protege la integridad de los datos impidiendo que se elimine un autor o editorial si tienen libros asociados.
  • Script de Pruebas Automatizado: Incluye un script (test.js) que ejecuta una secuencia de pruebas para verificar la funcionalidad completa del CRUD y las reglas de negocio.

🏛️ Arquitectura del Proyecto

El proyecto está estructurado siguiendo el patrón Modelo-Vista-Controlador (MVC).

  • models/ (Modelo): La capa de datos, responsable de interactuar directamente con los archivos json.
  • views/ (Vista): La capa de presentación (responseFormatter.js), responsable de formatear los datos para la terminal.
  • controllers/ (Controlador): El "cerebro" de la aplicación. Contiene la lógica de negocio y orquesta el flujo entre el Modelo y la Vista.
  • server.js: Actúa como el enrutador. Escucha las conexiones TCP y delega las peticiones al controlador adecuado.
  • client.js: La interfaz de usuario. Mantiene una conexión persistente y proporciona un menú interactivo.

Principio DRY y Reutilización de Código

La solución implementada se adhiere estrictamente al principio DRY (Don't Repeat Yourself) mediante el uso extensivo de la carpeta src/utils/:

  1. Para los Modelos: Se utiliza una "fábrica" (src/models/createDataModel.js) que centraliza toda la lógica de acceso a archivos, haciendo que los modelos individuales sean simples y declarativos.

  2. Para los Controladores: Se extrajo la lógica común de manipulación de datos (como el formateo de texto y el parseo de objetos de entrada) a módulos como formatters.js y objectUtils.js. Esto limpia los controladores, permitiéndoles centrarse exclusivamente en las reglas de negocio.


📂 Estructura de Archivos

API-ADA/
├── .gitignore
├── client.js               # Interfaz de usuario interactiva
├── package-lock.json
├── package.json
├── README.md               # Documentación principal
├── server.js               # Punto de entrada del servidor TCP
├── test.js                 # Script de pruebas automatizadas
├── docs/
│   ├── img/                # Carpeta para imágenes de la documentación
│   └── documentacion.md    # Documentación técnica detallada
└── src/
    ├── controllers/
    │   ├── authorsController.js
    │   ├── booksController.js
    │   └── publishersController.js
    ├── data/
    │   ├── authors.json
    │   ├── books.json
    │   └── publishers.json
    ├── models/
    │   ├── authorsModel.js
    │   ├── booksModel.js
    │   ├── createDataModel.js
    │   └── publishersModel.js
    ├── utils/
    │   ├── formatters.js
    │   ├── objectUtils.js
    │   └── utils.js
    └── views/
        └── responseFormatter.js

🚀 Instalación y Configuración

Sigue estos pasos para poner en marcha el proyecto.

Prerrequisitos

  • Node.js (versión 18 o superior recomendada)
  • npm (incluido con Node.js)

Pasos

  1. Clona el repositorio:
    git clone https://github.com/Antonela89/book-api-ADA
  2. Navega a la carpeta del proyecto:
    cd book-api-ADA
  3. Instala las dependencias: Este proyecto solo requiere la librería uuid.
    npm install

🏃 Modo de Uso

La aplicación requiere dos terminales: una para el servidor y otra para el cliente.

1. Iniciar el Servidor

En tu primera terminal, ejecuta el siguiente comando.

npm start

o alternativamente:

node server.js

Verás un mensaje de confirmación: Servidor TCP escuchando en el puerto 8080.

2. Iniciar el Cliente Interactivo

En una segunda terminal, ejecuta el siguiente comando para conectarte al servidor.

node client.js

Aparecerá el menú principal para empezar a interactuar con la aplicación.


🚀 Prueba Interactiva Online (Replit)

Si no quieres clonar el repositorio, puedes probar la aplicación directamente en tu navegador:

  1. Entra a este enlace: https://replit.com/@AntonelaBorgogn/book-api-ADA (Nota: Replit puede requerir iniciar sesión para ejecutar la consola interactiva).
  2. Haz clic en el botón verde "Run" en la parte superior.
  3. El servidor se iniciará automáticamente y, tras un par de segundos, aparecerá el menú interactivo en la consola de la derecha.
  4. ¡Interactúa con el menú usando los números de tu teclado!

Demo

funcionamiento de api


🧪 Pruebas Automatizadas

El proyecto incluye un script que prueba automáticamente el ciclo CRUD y las reglas de negocio.

Cómo ejecutar las pruebas:

  1. Asegúrate de que el servidor esté corriendo en una terminal.
  2. En una segunda terminal, ejecuta:
    node test.js
  3. La terminal mostrará el progreso y el resultado de cada prueba.

Captura

tests


🛠️ Tecnologías Usadas

JavaScript Node.js Módulo Net Módulo Readline JSON UUID Git GitHub


🧑‍💻 Autoras

Nombre LinkedIn GitHub
BORGOGNO, Antonela antonela-borgogno Antonela89
MARTINEZ, Gabriela magamahe magamahe

📄 Institución Académica

Logo ADA

Programa de formación en desarrollo web, Cohorte intro-js-202504
Proyecto educativo sin fines comerciales. Todos los derechos reservados © 2025.

About

Sistema interactivo de gestión de biblioteca desarrollado en Node.js mediante un servidor TCP y arquitectura MVC. Incluye persistencia de datos en JSON, lógica de negocio robusta y un cliente de consola guiado para una experiencia de usuario fluida.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors