- Requerimientos
- Configuracion base de datos
- Ejecucion del Proyecto
- Documentacion de la API de la libreria
1. node v20.10.0
2. npm v10.2.3
3. PostgreSQL 14.12
Para ejecutar correctamente las pruebas y la API, es necesario crear dos bases de datos: una para el entorno de ejecución y otra para las pruebas. Las bases de datos necesarias son:
- Una base de datos llamada
libreria
que contiene las tablasusers
ylibros
. - Otra base de datos llamada
libreriatest
que contiene las mismas tablas.
Para crear estas bases de datos, puedes ejecutar los siguientes comandos desde la consola de psql:
CREATE DATABASE libreria;
CREATE DATABASE libreriatest;
\c libreria
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS libros (
id SERIAL PRIMARY KEY,
titulo VARCHAR(255) NOT NULL,
autor VARCHAR(255) NOT NULL,
publicacion INT NOT NULL
);
\c libreriatest
CREATE TABLE IF NOT EXISTS users (
id SERIAL PRIMARY KEY,
username VARCHAR(255) NOT NULL UNIQUE,
password VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS libros (
id SERIAL PRIMARY KEY,
titulo VARCHAR(255) NOT NULL,
autor VARCHAR(255) NOT NULL,
publicacion INT NOT NULL
);
Además, es necesario configurar los archivos .env
y .env.test
para apuntar a las bases de datos libreria
y libreriatest
correspondientemente.
El archivo .env
debe contener la configuración para la base de datos del entorno de ejecución:
DB_HOST=localhost
DB_PORT=5432
DB_USER=tu_usuario
DB_PASSWORD=tu_contraseña
DB_NAME=libreria
El archivo .env.test
debe contener la configuración para la base de datos de pruebas:
DB_HOST=localhost
DB_PORT=5432
DB_USER=tu_usuario
DB_PASSWORD=tu_contraseña
DB_NAME=libreriatest
1. npm install
2. npm run start:dev
3. npm run test:e2e
Esta documentación describe los endpoints de la API para la gestión de usuarios y libros en tu aplicación. Se detallan los formatos de solicitud y respuesta, así como cualquier información adicional necesaria para su uso.
Para ver la informacion generada con swagger puedes ejecutar el proyecto y luego ir a la documentacion usando la siguiente ruta:
Endpoint: POST /users
Descripción: Crea un nuevo usuario en la base de datos.
Solicitud:
- URL: http://localhost:3000/users
- Método: POST
- Encabezados:
- Content-Type: application/json
- Cuerpo:
{ "username": "testuser", "password": "password" }
Respuesta:
- Código de estado: 201 Created
- Cuerpo:
{ "id": 1, "username": "testuser" }
Endpoint: GET /users/:username
Descripción: Obtiene un usuario por su nombre de usuario.
Solicitud:
- URL: http://localhost:3000/users/:username
- Método: GET
- Encabezados: Ninguno
- Parámetros de ruta:
- username: El nombre de usuario del usuario a obtener.
Respuesta:
- Código de estado: 200 OK
- Cuerpo:
{ "id": 1, "username": "testuser", "password": "$2b$10$..." }
Endpoint: POST /auth/login
Descripción: Autentica a un usuario y devuelve un token JWT.
Solicitud:
- URL: http://localhost:3000/auth/login
- Método: POST
- Encabezados:
- Content-Type: application/json
- Cuerpo:
{ "username": "testuser", "password": "password" }
Respuesta:
- Código de estado: 201 Created
- Cuerpo:
{ "access_token": "jwt_token" }
Endpoint: GET /libros
Descripción: Obtiene una lista de todos los libros.
Solicitud:
- URL: http://localhost:3000/libros
- Método: GET
- Encabezados:
- Authorization: Bearer {jwt_token}
Respuesta:
- Código de estado: 200 OK
- Cuerpo:
[ { "id": 1, "titulo": "Libro de Prueba 1", "autor": "Autor de Prueba 1", "publicacion": 2021 }, { "id": 2, "titulo": "Libro de Prueba 2", "autor": "Autor de Prueba 2", "publicacion": 2022 } ]
Endpoint: GET /libros/:id
Descripción: Obtiene un libro por su ID.
Solicitud:
- URL: http://localhost:3000/libros/:id
- Método: GET
- Encabezados:
- Authorization: Bearer {jwt_token}
- Parámetros de ruta:
- id: El ID del libro a obtener.
Respuesta:
- Código de estado: 200 OK
- Cuerpo:
{ "id": 1, "titulo": "Libro de Prueba 1", "autor": "Autor de Prueba 1", "publicacion": 2021 }
Endpoint: POST /libros
Descripción: Crea un nuevo libro.
Solicitud:
- URL: http://localhost:3000/libros
- Método: POST
- Encabezados:
- Content-Type: application/json
- Authorization: Bearer {jwt_token}
- Cuerpo:
{ "titulo": "Nuevo Libro", "autor": "Nuevo Autor", "publicacion": 2023 }
Respuesta:
- Código de estado: 201 Created
- Cuerpo:
{ "id": 3, "titulo": "Nuevo Libro", "autor": "Nuevo Autor", "publicacion": 2023 }
Endpoint: PUT /libros/:id
Descripción: Actualiza un libro existente por su ID.
Solicitud:
- URL: http://localhost:3000/libros/:id
- Método: PUT
- Encabezados:
- Content-Type: application/json
- Authorization: Bearer {jwt_token}
- Cuerpo:
{ "titulo": "Libro Actualizado", "autor": "Autor Actualizado", "publicacion": 2024 }
Respuesta:
- Código de estado: 200 OK
- Cuerpo:
{ "id": 1, "titulo": "Libro Actualizado", "autor": "Autor Actualizado", "publicacion": 2024 }
Endpoint: DELETE /libros/:id
Descripción: Elimina un libro por su ID.
Solicitud:
- URL: http://localhost:3000/libros/:id
- Método: DELETE
- Encabezados:
- Authorization: Bearer {jwt_token}
- Parámetros de ruta:
- id: El ID del libro a eliminar.
Respuesta:
- Código de estado: 200 OK
- Cuerpo:
{}
- Autenticación: Todos los endpoints de libros requieren un token JWT para la autenticación. El token se obtiene al hacer login y debe ser enviado en el encabezado Authorization de cada solicitud.