UNPKG

northwind-rest-api

Version:

Local REST API Exposing Northwind Database.

75 lines (67 loc) 2.72 kB
const dal = require("../data-access-layer/dal"); const imageHelper = require("../helpers/image-helper"); async function getAllProducts() { const products = await dal.getAllProducts(); return products; }; async function getOneProduct(id) { const products = await dal.getAllProducts(); const product = products.find(p => p.id === id); return product; }; async function addProduct(product, image) { const products = await dal.getAllProducts(); const maxId = products.reduce((maxId, p) => p.id > maxId ? p.id : maxId, 0); product.id = maxId + 1; const fileName = await imageHelper.saveProductImage(image); product.imageUrl = fileName ? "http://localhost:3030/api/products/images/" + fileName : null; products.push(product); await dal.saveAllProducts(products); return product; }; async function updateProduct(newProduct, image) { const products = await dal.getAllProducts(); const existingProduct = products.find(p => p.id === newProduct.id); if (!existingProduct) return null; for (const prop in newProduct) { if (newProduct[prop] !== undefined) { existingProduct[prop] = newProduct[prop]; } } const currentFileName = existingProduct.imageUrl ? existingProduct.imageUrl.substring(existingProduct.imageUrl.lastIndexOf("/") + 1) : null; const newFileName = await imageHelper.updateProductImage(currentFileName, image); if(newFileName) { existingProduct.imageUrl = "http://localhost:3030/api/products/images/" + newFileName; } await dal.saveAllProducts(products); return existingProduct; }; async function deleteProduct(id) { const products = await dal.getAllProducts(); const index = products.findIndex(p => p.id === id); if (index === -1) return; const existingProduct = products[index]; const currentFileName = existingProduct.imageUrl ? existingProduct.imageUrl.substring(existingProduct.imageUrl.lastIndexOf("/") + 1) : null; await imageHelper.deleteProductImage(currentFileName) products.splice(index, 1); await dal.saveAllProducts(products); }; async function getTopProducts() { const products = await dal.getAllProducts(); const topProducts = products.sort(() => Math.random() - 0.5).slice(0, 3); return topProducts; }; async function getOutOfStockProducts() { const products = await dal.getAllProducts(); const outOfStock = products.filter(p => p.stock === 0); return outOfStock; }; module.exports = { getAllProducts, getOneProduct, addProduct, updateProduct, deleteProduct, getTopProducts, getOutOfStockProducts };