Para ejecutar la aplicación habrá que tener instalado Node JS e instalar las dependencias usando el siguiente comando:
npm install
.env
es el archivo que se utiliza para almacenar las variables de entorno, que son las que se utilizan para configurar el comportamiento de la aplicación. Como se suelen utilizar para almacenar información confidencial, como contraseñas de bbdd o claves de API, este fichero se encuentra includo en el .gitignore
y puedes utilizar uno propio.
Para arrancar la base de datos con los anuncios iniciales, simplemente se ha de usar el comando
node init-db.js
Y se responderá a la pregunta de si se desea eliminar la base de datos existente.
Para inicializar el proyecto se debe utilizar el comando
npm run start:dev
Para acceder a un listado completo de los anuncios sin paginar se puede utilizar
http://localhost:3000/ads
Finalmente, para recibir una lista de anuncios filtrada, la llamada debe realizarse de la siguiente manera:
http://localhost:3000/ads/search?[...]
Algunos ejemplos de filtros solicitados:
-
Para filtrar productos cuya etiqueta sea "fantasy"
http://localhost:3000/ads/search?tags=fantasy
(2), o cuyo género sea "ensayo"http://localhost:3000/ads/search?tags=essay
(2), o sean una trilogíahttp://localhost:3000/ads/search?tags=trilogy
(1). -
Para buscar los productos que están en venta
http://localhost:3000/ads/search?sale=true
(3) o se buscanhttp://localhost:3000/ads/search?sale=false
(2). -
Para filtrar productos que incluyan la palabra "la" en su nombre
http://localhost:3000/ads/search?name=la
(3) o "house"http://localhost:3000/ads/search?name=house
(1). -
Para buscar productos cuyo precio sea inferior a 100
http://localhost:3000/ads/search?price=-100
(4) o exactamente 35http://localhost:3000/ads/search?price=35
(1). -
O combinarlos juntos, por ejemplo para encontrar un producto de fantasía con el artículo "la" en su nombre, que se busque en un rango de precio inferior a 100
http://localhost:3000/ads/search?tags=fantasy&sale=false&name=la&price=-100&start=0&limit=2&sort=price
.
-
Las búsquedas de cualquier tipo en /ads/search están paginadas a 15 resultados por página, por lo que para obtener otras páginas que no sean la primera se utiliza, por ejemplo, la llamada
http://localhost:3000/ads/search?skip=3
(para ir a la tercera página). También es posible cambiar el tamaño de página utilizandohttp://localhost:3000/ads/search?limit=10
para reducir el número de resultados a diez. -
Además, es posible acceder a un listado de las tags existentes en este momento en los anuncios de la base de datos:
http://localhost:3000/ads/tags
. -
Y para añadir un anuncio a la base de datos a través de la API se puede utilizar
http://localhost:3000/ads
con un método POST en cuyo body vaya un JSON con las propiedades "name" (string), "sale" (boolean), "price" (number), "pic" (string) y "tags" (array de strings).
Imaginemos que un cliente nos pasa el siguiente briefing para que le hagamos este trabajo:
Desarrollar el API que se ejecutará en el servidor de un servicio de venta de artículos de segunda mano llamado Nodepop. Hazte a la idea que esta API que vas a construir sería utilizado por otros desarrolladores de iOS o Android.
El servicio mantiene anuncios de compra o venta de artículos y permite buscar como poner filtros por varios criterios, por tanto la API a desarrollar deberá proveer los métodos necesarios para esto.
Cada anuncio tiene los siguientes datos:
- Nombre del artículo. Un anuncio siempre tendrá un solo artículo.
- Si el artículo se vende o se busca.
- Precio. Será el precio del artículo en caso de ser una oferta de venta. En caso de que sea un anuncio de se busca será el precio que el solicitante estaría dispuesto a pagar.
- Foto del artículo. Cada anuncio tendrá solo una foto.
- Tags del anuncio. Podrá contener uno o varios de estos cuatro: work, lifestyle, motor y mobile.
- Lista de anuncios con posibilidad de paginación. Con filtros por tag, tipo de anuncio (venta o búsqueda), rango de precio (precio min. y precio max.) y nombre de artículo (que empiece por el dato buscado).
- Lista de tags existentes.
- Creación de anuncios (este requisito es opcional).
Los sistemas donde se desplegará el API utilizan bases de datos MongoDB.
Se solicita que el entregable venga acompañado de una mínima documentación y el código del API esté bien formateado para facilitar su mantenimiento. En esta fase, ya que se desea probar si el modelo de negocio va a funcionar, no serán necesarios ni tests unitarios ni de integración.
Gracias a Rodrigo por la paciencia, la ayuda y la base de datos.