northwind-rest-api
Version:
Local REST API Exposing Northwind Database.
75 lines (67 loc) • 2.72 kB
JavaScript
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
};