Book Management API es una aplicación backend desarrollada en Node.js con el framework Nest.js, diseñada para gestionar una colección de libros digital. Esta API permite a los usuarios registrarse, iniciar sesión y administrar libros mediante roles específicos, así como subir archivos relacionados con los libros.
Puedes interactuar con la API utilizando la siguiente URL:
Ir a probar la API -> Para ingresar como admin puedes usar estas credenciales:
{
"email": "prueba@prueba.pru",
"password": "C0ntr4S3gu++r4"
}Este despliegue refleja el estado más reciente del código en la rama main.
- Autenticación de Usuarios: Gestiona el acceso a través de un sistema robusto de autenticación JWT.
- Validación de Datos: Asegura la integridad de los datos con validaciones completas en todas las entradas.
- Gestión de Roles: Controla el acceso a diferentes partes de la API basándose en roles de usuario (admin, user).
- Subida de Archivos: Permite a los usuarios subir archivos, como imágenes de portadas y documentos PDF.
- Optimización de Consultas: Mejora el rendimiento mediante consultas optimizadas a la base de datos.
- Nest.js: Un framework progresivo de Node.js para construir aplicaciones de servidor eficientes y escalables.
- TypeORM para PostgreSQL: Sistema de gestión de bases de datos relacional para almacenar todos los datos de libros y usuarios.
- JWT: Para la autenticación y gestión de sesiones.
- Swagger: Para la documentación de la API.
- Gitflow: Estrategia de manejo de ramas que mantiene el desarrollo organizado y eficiente.
Este proyecto utiliza las siguientes librerías y frameworks:
- Nest.js:
@nestjs/common,@nestjs/core,@nestjs/config,@nestjs/platform-express(versión 10.0.0) - Autenticación:
@nestjs/jwt(versión 10.2.0),@nestjs/passport(versión 10.0.3),passport(versión 0.7.0),passport-jwt(versión 4.0.1) - Documentación de la API:
@nestjs/swagger(versión 7.3.1) - ORM y Bases de Datos:
@nestjs/typeorm(versión 10.0.2),typeorm(versión 0.3.20),pg(versión 8.11.5) - Herramientas de Seguridad:
bcrypt(versión 5.1.1) - Manejo de Metadatos:
reflect-metadata(versión 0.2.0) - Validación de Datos:
class-validator(versión 0.14.1),class-transformer(versión 0.5.1) - Programación Reactiva:
rxjs(versión 7.8.1) - AWS SDK:
aws-sdk(versión 2.1286.0)
Para ejecutar el proyecto localmente, clona el repositorio y configura las variables de entorno necesarias para la base de datos y JWT.
- Clona el repositorio:
git clone https://github.com/tu-usuario/book-management-api.git cd book-management-api - Instala las dependencias necesarias:
npm install
- Copia el archivo .env.example a un nuevo archivo .env y configura las variables de entorno necesarias:
Edita el archivo .env y configura los siguientes valores:
cp .env.example .env
Estos pasos garantizan que tengas toda la configuración necesaria para ejecutar el proyecto localmente, ajustando las variables de entorno según las necesidades de tu entorno de desarrollo.PORT=3000 DB_NAME=tu_nombre_de_base_de_datos DB_USER=tu_usuario_de_base_de_datos DB_PASS=tu_contraseña_de_base_de_datos DB_HOST=tu_host_de_base_de_datos DB_PORT=tu_puerto_de_base_de_datos JWT_DURATION=12h JWT_SECRET=m54543bxmgx4xSecr37Key USER_ROLE=user ADMIN_ROLE=admin LIMIT=20 BUCKET_S3=tu_bucket_de_s3 AWS_ACCESS_KEY_ID=tu_id_de_acceso_aws AWS_SECRET_ACCESS_KEY=tu_clave_secreta_aws
Para iniciar el servidor en modo de desarrollo, usa:
npm run start:devPara iniciar el servidor en modo de desarrollo, usa:
npm run build
npm startLa organización del código fuente dentro de la carpeta src incluye:
-
/auth: Contiene los componentes relacionados con la autenticación, como los controladores, servicios, estrategias y guards./decorators: Funciones personalizadas que añaden funcionalidades adicionales a las rutas o métodos de los controladores./dto: Data Transfer Objects que definen la estructura de los datos para las operaciones de autenticación./guards: Clases que implementan la lógica de autorización./interfaces: Define las interfaces para tipar los objetos dentro del módulo de autenticación./strategies: Estrategias de Passport para la autenticación JWT.auth.controller.ts: Controlador que maneja las solicitudes HTTP relacionadas con la autenticación.auth.module.ts: Módulo que agrupa todos los elementos relacionados con la autenticación.auth.service.ts: Servicio que contiene la lógica de negocio relacionada con la autenticación.
-
/books: Módulos para la gestión de libros./dto: Objetos de Transferencia de Datos para la manipulación de libros./entities: Entidades que representan la tabla de libros en la base de datos.books.controller.ts: Controlador para las operaciones de libros.books.module.ts: Módulo que encapsula todos los componentes del dominio de libros.books.service.ts: Servicio que contiene la lógica de negocio para libros.
-
/common: Contiene elementos comunes que pueden ser utilizados en toda la aplicación./dto: Data Transfer Objects comunes para la aplicación.common.module.ts: Módulo que proporciona elementos comunes a otros módulos.
-
/users: Módulos relacionados con la gestión de usuarios./dto: Data Transfer Objects para el manejo de la información de los usuarios./entities: Entidades que representan la tabla de usuarios en la base de datos.users.controller.ts: Controlador para las operaciones relacionadas con los usuarios.users.module.ts: Módulo que agrupa todos los elementos relacionados con los usuarios.users.service.ts: Servicio que contiene la lógica de negocio para usuarios.
-
app.controller.ts: Controlador principal de la aplicación. -
app.module.ts: Módulo principal que importa y organiza todos los módulos de la aplicación. -
main.ts: Punto de entrada de la aplicación que inicia el servidor NestJS.
Esta estructura de carpetas está diseñada para mantener el proyecto ordenado y modular, haciendo que el código sea más fácil de mantener y escalar.
Este proyecto implementa la estrategia de ramificación Gitflow, que es un modelo escalable y robusto para manejar el desarrollo de software. Aquí hay una descripción breve de cómo se organizan las ramas y su propósito dentro del flujo de trabajo del proyecto:
main: La rama principal que contiene el código de producción, donde el código alcanza el estado más estable después de ser probado en otras ramas.dev: La rama de desarrollo donde todas las características, arreglos y mejoras se fusionan antes de ser desplegadas a producción. Esta rama contiene el estado más reciente del próximo lanzamiento.feat/x: Ramas de características donde se desarrollan nuevas funcionalidades. Cada característica tiene su propia rama (por ejemplo,feat/new-loginpara una nueva funcionalidad de inicio de sesión).fix/x: Ramas de correcciones donde se arreglan bugs. Al igual que con las características, cada corrección tiene su propia rama (por ejemplo,fix/login-error).
El trabajo se combina en dev para pruebas de integración. Una vez que dev es estable y está listo para un lanzamiento, se fusiona en main.
Para contribuir al proyecto, crea una rama a partir de dev siguiendo el prefijo correspondiente (feat/ o fix/) dependiendo del tipo de trabajo. Después de completar el trabajo y las pruebas, crea un Pull Request hacia dev.
La adopción de Gitflow permite una gestión organizada de las versiones, proporcionando claridad y un proceso establecido para la colaboración y el despliegue de software.
¡Espero que disfrutes utilizando Book Manager tanto como yo disfrute desarrollándolo!
Cordialmente,
Milton Loaiza
Este proyecto está licenciado bajo Creative Commons CC BY 4.0.
Puedes usar y redistribuir este trabajo para cualquier propósito, siempre y cuando se otorgue el crédito apropiado.
