Giter Site home page Giter Site logo

calmarti / nodepop-backend-avanzado Goto Github PK

View Code? Open in Web Editor NEW
1.0 1.0 0.0 6 MB

Práctica del módulo de Backend Avanzado (Node-Express-MongoDB) del Bootcamp Web de Keep Coding

Shell 0.34% JavaScript 71.47% CSS 1.15% HTML 27.03%
bootcamp keepcoding nodejs express mongodb mongoose api-restful multer cote microservices

nodepop-backend-avanzado's Introduction

Nodepop - Documentación del API


Requisitos de software

Se asume la previa instalación de:

  1. Node 10.19.0 o superior
  2. MongoDB 1.3.6 o superior

Instalación

Clonar el repo:

git clone https://github.com/calmarti/NodepopAvanzado.git

Instalar las dependencias:

npm install

Inicialización de la base de datos

Los ficheros initdb.js y advertSample.json (muestra de 6 anuncios) permiten incializar la base de datos:

npm run initdb

Schemas del modelo

Colección de anuncios:

    name: { type: String, required: true }, 
    sale: { type: Boolean, required: true },
    price:  {type: Number, required:true },
    tags: { type: [String] },   
    picture: { type: String }

Colección de usuarios:

  email: { type: String, unique: true },
  password: { type: String },

La colección de usuarios tiene un único usuario registrado:

email: [email protected]
password: 1234

Ejecución

Se asume que el servidor de MongoDB ha sido arrancado.

Para establecer la conexión a MongoDB (a través de mongoose) e iniciar la aplicación de Express:

npm start

ó en modo desarrollo:

npm run dev

Como usar la API de Nodepop


Autenticación

El endpoint de autenticación devuelve un JWT token de 2 horas de duración

http://127.0.0.1:3000/apiv1/auth

Para acceder a cualquier endpoint es necesario enviar el token JWT en la cabecera 'Authentication' o en el body de la peticion POST.


GET /apiv1/adverts

Devuelve todos los anuncios:

http://127.0.0.1:3000/apiv1/adverts

Campos

Name: nombre del producto

Price: precio del producto

Sale = true si es un anuncio de venta / false si es un anuncio de compra

Tags: array de tags o categorías a las que pertenece el producto

Picture: Cadena con la ruta de la foto del producto


Filtros:

Par clave-valor:

http://127.0.0.1:3000/apiv1/adverts?campo=valor

Por campo seleccionado

http://127.0.0.1:3000/apiv1/adverts/?select=campo

Paginación

  • skip=n: ignora los primeros n anuncios

  • limit=n: muestra solo n anuncios

Ordenación

  • sort = campo

Ordenación descendente: sort = -campo

Por rango de precio están disponibles estas opciones:

  • Rango cerrado:
http://127.0.0.1:3000/apiv1/adverts/?price=min-max
  • Rango abierto superior a un mínimo:
http://127.0.0.1:3000/apiv1/adverts/?price=min-
  • Rango abierto inferior a un máximo:
http://127.0.0.1:3000/apiv1/adverts/?price=-max

POST /apiv1/adverts

Para crear un nuevo anuncio (formato multipart/form-data)

http://127.0.0.1:3000/apiv1/adverts

Campos del anuncio:

name, price, sale, tags, picture

(los types deben coincidir con los definidos en el schema)

Nota: el campo picture debe ser de tipo file


Microservicio de redimensionamiento de imagen

El redimensionamiento del fichero de imagen (en caso de haberlo) se realiza con un microservicio, gracias a las librerías: code y jimp

El servicio se activa y permanece en modo 'listening' al arrancar la aplicación.

La ejecución del servicio se produce al subir una foto como parte de la creación de un anuncio.


GET /apiv1/adverts/tags

Para obtener la lista de tags o categorías:

http://127.0.0.1:3000/apiv1/adverts/tags

Test de integración

Test del endpoint GET /apiv1/auth con Supertest y Jest.

npm run test:inv

El test pasa los dos casos de prueba implementados (estatus 401 y estatus 200), pero no fue posible lograr que Jest cerrara correctamente.


Frontend de nodepop (internacionalizado)

La aplicación cuenta con una interfaz de frontend internacionaliada en: inglés, español y francés

La ruta index renderiza esta documentación gracias a la librería strapdown.js

http://127.0.0.1:3000/

La ruta demo (accesible desde index), renderiza en el frontend algunas de las peticiones GET indicadas arriba

http://127.0.0.1:3000/demo

nodepop-backend-avanzado's People

Contributors

calmarti avatar

Stargazers

 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.