Skip to content

Latest commit

 

History

History
executable file
·
180 lines (149 loc) · 4.33 KB

ejecrcicio-15.md

File metadata and controls

executable file
·
180 lines (149 loc) · 4.33 KB

CRUD DE PRODUCTOS

ROUTE: /api/products

Method: GET Endpoint: / Accion: obtenerProductos Buscar en products.json el array de productos con active = true y devolverlo

Response: { ok: true, status: 200, message: 'Productos Obtenidos' payload: { products: [Lista De Productos] } }

Method: GET Endpoint: /:product_id obtenerProductoPorId Buscar en products.json el producto con id igual al id recibido por parametro de busqueda y devolverlo

Response: { ok: true, status: 200, message: 'Producto Obtenido', payload: { product: {producto} } }

Sino lo encuentra:

Response: { ok: true, status: 404, message: 'No se encontro el producto', payload: { product: null } }

Method: POST Endpoint: / crearProducto Van a recibir por body: { title: 'nuevo tv', price: 3000, categoria: 'TECNOLOGIA', stock: 2 } y deberar agregarlo a products.json y devolver la lista de productos actualizada Si todo esta bien responder: Response: { ok: true, status: 201, message: 'Producto Creado', payload: { products: [nueva lista con el producto agregado] } }

posibles errores:

  • El producto ya existe, ya existe un producto con el mismo title STATUS: 400
  • El enviado no tiene los campos necesarios STATUS: 400 (opcional: especificar los campos faltantes)
  • El stock es negativo STATUS: 400
  • El stock no es un numero STATUS: 400
  • El precio no es un numero STATUS: 400
  • El precio es negativo STATUS: 400
  • El title no es un string STATUS: 400
  • El title es vacio STATUS: 400
  • La categoria no es un string valido o no es una de las categorias existentes STATUS: 400 (OPCIONAL categorias_existentes: 'ropa', 'electrodomestico', 'jugueteria')
  • Error de lectura de archivo STATUS: 500

Method: PUT

Endpoint: /:product_id actualizarProductoPorId

Van a recibir por body: { title: 'nuevo nombre tv', price: 2000, stock: 2, propiedad_falsa: true, nombre: 'pepe' }

//SOLO PUEDEN ACTUALIZARSE las propiedades: title, price, stock y categoria

y deberemos modificarlo al producto por id en products.json y devolver la lista de productos actualizada

POSIBLES ERRORES:

  • Las propiedades recibidas deben ser validas, significa que no podemos recibir una propiedad que no existe Status: 400 (opcional: especificar las propiedades validas y la que esta/an mal) Ejemplo:

{ status: 400, message: 'Las propiedades no son validas' payload: { message: 'Las propiedades no son validas. Propiedades validas: title, price, stock, categoria, invalidas: propiedad_falsa, nombre' } },

  • El producto ya existe, ya existe un producto con el mismo title en la lista (excepcion: se vale si el producto quiere mantener el titulo anterior) STATUS: 400 Ejemplo: si mi lista tiene 'Tv Samsung' y quiero actualizar a 'Tv Samsung' al valor 'Tv Samsung' me va a dejar hacerlo

  • El producto enviado debe tener almenos una propiedad (valida) STATUS: 400

  • Si hay stock, y el stock es negativo o no es un numero STATUS: 400

  • Si hay precio y no es un numero o es negativo STATUS: 400

  • Si hay title y no es un string o es vacio STATUS: 400

  • La categoria no es un string valido o no es una de las categorias existentes STATUS: 400 (OPCIONAL categorias_existentes: 'ropa', 'electrodomestico', 'jugueteria')

  • Error de lectura de archivo STATUS: 500

COMO SABER SI HAY PROPIEDADES INVALIDAS?

const producto = { title: 'nuevo nombre tv', price: 2000, stock: 2, propiedad_falsa: true, nombre: 'pepe', teclado: true }

const PROPIEDADES_VALIDAS = ['title', 'price', 'stock'] const propiedades_invalidas = []

for(let propiedad in producto){ if(!PROPIEDADES_VALIDAS.includes(propiedad)){ propiedades_invalidas.push(propiedad) } }

console.log(propiedades_invalidas)

Response: { ok: true, status: 201, payload: { product: {producto modificado} } }

Method: DELETE Endpoint: /:product_id eliminarProducto Cambiar el active del producto a false en products.json y devolver la lista de productos actualizada Response: { ok: true, status: 200, message: 'Producto eliminado', payload: { message: 'Producto eliminado' } } Si no encuentra el producto: Response: { ok: true, status: 404, message: 'No se encontro el producto', payload: { message: 'No se encontro el producto' } }