Prueba Tecnica para Backend Engineer
Node.js, Express, PostgreSQL, Sequelize, Claudinary, jsonwebtoken.
## La API contempla lo siguiente:
1 - Se guarda la informacion sensible en varibles de entorno
2 - Se realiza el hashing de las contraseñas de usuarios mediante la libreria bcrypt
3 - Se trabaja con autenticación de usuarios mediante TOKENS, utilizando la libreria jsonwebtoken
## Propuesta de seguridad que no ha sido implementada
1 - Validaciones de los datos recibidos en cada EndPoint para asegurar su formato y tipo
1 - Application Layer
2 - Business Layer
3 - Data Access Layer
1 - Clonar el Repositorio
2 - ejecutar npm install
3 - Configurar variables de entorno
4 - ejecutar npm start
PORT=3001
URL_ALLOW_ORIGIN=http:https://localhost:3000
PGUSER=postgres
PGPASSWORD=
PGHOST=localhost
PGPORT=5432
PGDATABASE=aidforaids
SECRETJWT=aidforaids
CLAUDINARY_CLOUD_NAME=aidforaids
CLAUDINARY_API_KEY=
CLAUDINARY_API_SECRET=
Deberá suministrar una API_KEY y API_SECRET de Claudinary
- Metodo: POST
- Endpoint: /users/register
- En body: name, email, password
- Responde: id, name, email
- Metodo: POST
- Endpoint: /users/login
- En body: email, password
- Responde: id, name, email, token
- Metodo: PUT
- Endpoint: /users/perfil
- Se debe enviar los siguientes field names y correspondiente contenido
field name: image (file, type: jpeg, png)
field name: direccion (string)
- Responde: id, name, email, imageUrl, direccion
- La imagen se guarda en Claudinary.
- Metodo: GET
- Endpoint: /book
- Enviar por query: page y limit
- Responde: Array donde en cada elemento se especifica id, isnb, title, autor, stock
- Metodo: POST
- Endpoint: /book/create
- Enviar por body los siguiente atributos unisbn, title, price, autor, editorial, quantity
- Responde id, isbn, title, autor, stock
- Metodo: PUT
- Endpoint: /book/stock
- Enviar por params el id del libro
- Enviar por body quantity
- Responde id, isnb, title, autor, stock
- Metodo: POST
- Endpoint: /book/distributor
- Enviar por body name
- Responde: id, name
- Metodo: POST
- Endpoint: /book/compra
- Enviar por params distributorId
- En body se debe enviar un Array, donde cada elemento debe especificar: { bookId, quantity }
- Responde: Array con los registros realizados
- Se define el atributo data del tipo DataTypes.JSONB
- Metodo: POST
- Endpoint: /sales/addcart
- En Body se debe especificar el bookId
- Responde un Array con todos los books en el carrito del usuario
- Metodo: POST
- Endpoint: /sales/buy
- En body se debe especificar el bookId y quantity