const checkValidations = validationResult => { return (req, res, next) => { const errors = validationResult(req) if (!errors.isEmpty()) { const msg = {} errors.errors.forEach(err => { msg[err.path] = err.msg }); res.status(422).json(msg) } else next() } } function filterDatesWithinDays(data, days, status) { const currentDate = new Date(); const sevenDaysAgo = new Date(currentDate.getTime() - days * 24 * 60 * 60 * 1000); if (status) { return data.orders.filter(item => { const itemDate = new Date(item.orderDate); return itemDate >= sevenDaysAgo && itemDate <= currentDate && item.status == status; }); } else { return data.orders.filter(item => { const itemDate = new Date(item.orderDate); return itemDate >= sevenDaysAgo && itemDate <= currentDate; }); } } function filterWithStatus(data, status) { return data.orders.filter(item => { return item.status == status; }); } const sumProductsById = (data) => { const sumArray = []; const map = {}; data.forEach(item => { item.products.forEach(pd=>{ const productId = pd.product.uid; const product = pd.product; const price = pd.price; if (!map[productId]) { map[productId] = { product, total: 0, quantity: 0 }; sumArray.push(map[productId]); } map[productId].total += price; map[productId].quantity = product.stockQuantity; }) }); return (sumArray.sort((a, b) => a - b)).slice(0, 5); }; function filterQuantityHigh3(data) { return data.products.filter(item => { return item.stockQuantity > 0 }); } function filterQuantityLow3(data) { return data.products.filter(item => { return item.stockQuantity <= 3 }); } function filterZeroStock(data) { return data.products.filter(item => { return item.stockQuantity == 0 }); } module.exports = { filterDatesWithinDays, sumProductsById, filterWithStatus, filterQuantityHigh3, filterQuantityLow3, filterZeroStock, checkValidations }