UNPKG

northwind-rest-api

Version:

Local REST API Exposing 'Northwind Traders' Database.

86 lines (78 loc) 3.24 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 now = new Date(); const base1 = now.getDate(); const base2 = base1 + 1; const base3 = base1 + 2; const knuthMultiplicativeHashConstant = 2654435761; const index1 = (base1 * knuthMultiplicativeHashConstant) % products.length; const index2 = (base2 * knuthMultiplicativeHashConstant) % products.length; const index3 = (base3 * knuthMultiplicativeHashConstant) % products.length; const product1 = products[index1]; const product2 = products[index2]; const product3 = products[index3]; const topProducts = [product1, product2, product3]; 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 };