From 2e104e0b4d63616b7ab5e2c48342489775ff8cba Mon Sep 17 00:00:00 2001 From: Beni <bucsy.beni@gmail.com> Date: Thu, 23 Apr 2020 15:41:49 +0200 Subject: [PATCH] HF5 nearly done --- config/globalConfig.js | 38 +++++++++++++++++++++++-- middleware/bunker/getBunker.js | 16 ++--------- middleware/bunker/getBunkerList.js | 38 ++----------------------- middleware/bunker/saveBunker.js | 15 ++-------- middleware/common/TextClass.js | 25 ++++++++++++++++ middleware/common/hasAllOptions.js | 16 +++++++++++ middleware/food/getFood.js | 3 +- middleware/food/saveFood.js | 29 +++++++------------ middleware/storage/addStorageItem.js | 9 +++--- middleware/storage/deleteStorageItem.js | 1 + middleware/storage/updateBunkerStats.js | 9 ++---- 11 files changed, 105 insertions(+), 94 deletions(-) create mode 100644 middleware/common/TextClass.js create mode 100644 middleware/common/hasAllOptions.js diff --git a/config/globalConfig.js b/config/globalConfig.js index 2799a38..08dc9f6 100644 --- a/config/globalConfig.js +++ b/config/globalConfig.js @@ -1,9 +1,41 @@ +/** + * Contans some of the constants, and settings of the whole webapp + */ const config = { - useAuthentication: false, - avarageCalorieIntake: 2000 //Kcal -}; + useAuthentication: false, //for debug purpose, if set to false authentication wont be used + + avarageCalorieIntake: 2000, // Avarage calorie intake of a human adult, given in kcal + + FoodWarningTime: 180, // sets how many days before the expiration of a storage item should a warning text be visible + + WarningClasses: { + none: { + + message: 'Nincs étel a raktárban', + class: 'text-secondary' + + }, + + good: { + message: '-', + class: 'text-secondary' + }, + + warning: { + message: 'Fél éven belűl romlandó étel', + class: 'text-warning' + }, + + danger: { + message: 'Romlott étel ', + class: 'text-danger' + } + + } + +} diff --git a/middleware/bunker/getBunker.js b/middleware/bunker/getBunker.js index 0e40dc0..7429841 100644 --- a/middleware/bunker/getBunker.js +++ b/middleware/bunker/getBunker.js @@ -1,5 +1,5 @@ -const moment = require('moment'); const requireOption = require('../common/requireOption'); +const getTextClassFromDate = require('../common/TextClass') /** * Gets bunker information from bunkerid param, puts info in res.locals.bunker * -- if no bunker found, redirects to /bunkers @@ -17,7 +17,7 @@ module.exports = function (objectrepository) { if (!bunker) return res.redirect('/bunkers'); for (let item of bunker.stock) - item.style = getStockStyle(item.expirationDate); + item.style = getTextClassFromDate(item.expirationDate).class; res.locals.bunker = bunker; @@ -28,15 +28,3 @@ module.exports = function (objectrepository) { }; } - -function getStockStyle (lasts) { - const today = moment(); - let diff = -today.diff(lasts,'days'); - - console.log('ITEM:',diff); - - if(diff > 180) return 'text-success'; - else if(diff <=180 && diff > 0) return 'text-warning'; - else return 'text-danger'; - -} diff --git a/middleware/bunker/getBunkerList.js b/middleware/bunker/getBunkerList.js index a706a60..9c834eb 100644 --- a/middleware/bunker/getBunkerList.js +++ b/middleware/bunker/getBunkerList.js @@ -1,6 +1,6 @@ -const moment = require('moment'); -const requireOption = require('../common/requireOption'); +const requireOption = require('../common/requireOption'); +const getTextClassFromDate = require('../common/TextClass') /** *Gets list of bunkers, puts list on res.locals.bunkers @@ -14,7 +14,7 @@ module.exports = function (objectrepository) { BunkerModel.find({}).exec() .then(bunkers =>{ for(let bunker of bunkers) - bunker.warning = GetWarningLabel(bunker.nextExpDate); + bunker.warning = getTextClassFromDate(bunker.nextExpDate); res.locals.bunkers = bunkers; return next(); }) @@ -22,35 +22,3 @@ module.exports = function (objectrepository) { }; } - - -//TODO: Ezt szebben meg kéne oldani -function GetWarningLabel(nextExpireDate) { - - if(!nextExpireDate) return { - message: 'Nincs étel a raktárban', - class: 'text-secondary' - }; - - const today = new moment(); - let diff = -today.diff(nextExpireDate,'days'); - if( diff > 180){ - return { - message: '-', - class: 'text-secondary' - } - } - else if (diff <= 180 && diff > 0){ - return { - message: 'Fél éven belűl romlandó étel', - class: 'text-warning' - } - } - else{ - return { - message: 'Romlott étel ', - class: 'text-danger' - } - } - -} \ No newline at end of file diff --git a/middleware/bunker/saveBunker.js b/middleware/bunker/saveBunker.js index 1b37ff2..5531964 100644 --- a/middleware/bunker/saveBunker.js +++ b/middleware/bunker/saveBunker.js @@ -1,4 +1,4 @@ - +const hasAllOptions = require('../common/hasAllOptions'); const requireOption = require('../common/requireOption'); /** @@ -14,20 +14,12 @@ module.exports = function (objectrepository) { return function (req, res, next) { - if (typeof req.body.name === 'undefined' || - typeof req.body.adress === 'undefined' || - typeof req.body.capacity === 'undefined'){ - - return next(); - } - - + if(!hasAllOptions(req.body,['name','adress','capacity']) ) return next(); + if (req.body.name === '' || req.body.adress === '' || req.body.capacity === '' ){ - res.locals.warning = 'Töltsd ki az összes mezőt'; - return next(); } @@ -43,7 +35,6 @@ module.exports = function (objectrepository) { res.locals.bunker.adress = req.body.adress res.locals.bunker.capacity = req.body.capacity - res.locals.bunker.save(err =>{ if(err) return next(err); diff --git a/middleware/common/TextClass.js b/middleware/common/TextClass.js new file mode 100644 index 0000000..3a97db8 --- /dev/null +++ b/middleware/common/TextClass.js @@ -0,0 +1,25 @@ + +const moment = require('moment'); +const config = require('../../config/globalConfig'); + + +/** + * Calculates how many days are between the actual date, and the given date in param, + * and assigns a warning class based on the date. + * @param {Date to check} date + */ +function getTextClassFromDate(date) { + if(!date) return config.WarningClasses.none; + + const today = moment(); + const Expirationday = moment(date); + let diff = Expirationday.diff(today,'days'); + + + if(diff < 0 ) return config.WarningClasses.danger; + else if (diff >= 0 && diff <= 180) return config.WarningClasses.warning; + else return config.WarningClasses.good; + +} + +module.exports = getTextClassFromDate; \ No newline at end of file diff --git a/middleware/common/hasAllOptions.js b/middleware/common/hasAllOptions.js new file mode 100644 index 0000000..cca2f60 --- /dev/null +++ b/middleware/common/hasAllOptions.js @@ -0,0 +1,16 @@ +/** + * + * @param {Object to check} object + * @param {List of properties} propertyArray + */ +function hasAllOptions(object, propertyArray) { + if(typeof object === 'undefined' || !Array.isArray(propertyArray)) return false; + + for(property of propertyArray){ + if(typeof object[property] === 'undefined') return false; + } + + return true; +} + +module.exports = hasAllOptions; \ No newline at end of file diff --git a/middleware/food/getFood.js b/middleware/food/getFood.js index c677887..d07d091 100644 --- a/middleware/food/getFood.js +++ b/middleware/food/getFood.js @@ -1,4 +1,5 @@ const requireOption = require('../common/requireOption'); + /** * Get food from database, using foodid param * -- if no food found, redirects to '/foods' @@ -10,7 +11,7 @@ module.exports = function (objectrepository) { FoodModel.findOne({_id:req.params.foodid},(err,food)=>{ if(err) return next(err); - if(!food) return res.redirect('foods'); + if(!food) return res.redirect('/foods'); res.locals.food = food; return next(); diff --git a/middleware/food/saveFood.js b/middleware/food/saveFood.js index 160f647..76befcc 100644 --- a/middleware/food/saveFood.js +++ b/middleware/food/saveFood.js @@ -1,4 +1,7 @@ const requireOption = require('../common/requireOption'); +const hasAllOptions = require('../common/hasAllOptions'); + + /** * Creates/Updates food entry in database using foodid param */ @@ -8,23 +11,16 @@ module.exports = function (objectrepository) { return function (req, res, next) { - if (typeof req.body.name === 'undefined' || - typeof req.body.kcal === 'undefined' || - typeof req.body.lasts === 'undefined'){ - return next(); - } + if (!hasAllOptions(req.body, ['name', 'kcal', 'lasts'])) return next(); - if (req.body.name === '' || + if (req.body.name === '' || req.body.kcal === '' || - req.body.lasts === '' ){ - + req.body.lasts === '') { res.locals.warning = 'Töltsd ki az összes mezőt'; - return next(); } - - if(typeof res.locals.food === 'undefined'){ + if (typeof res.locals.food === 'undefined') { res.locals.food = new FoodModel(); } @@ -32,13 +28,10 @@ module.exports = function (objectrepository) { res.locals.food.kcal = req.body.kcal; res.locals.food.lasts = req.body.lasts; + res.locals.food.save(err => { + if (err) return next(err); - res.locals.food.save(err=>{ - if(err) return next(err); - - return res.redirect('/foods'); + return res.redirect('/foods'); }) - }; - - }; \ No newline at end of file +}; \ No newline at end of file diff --git a/middleware/storage/addStorageItem.js b/middleware/storage/addStorageItem.js index e7c6a95..bc8969a 100644 --- a/middleware/storage/addStorageItem.js +++ b/middleware/storage/addStorageItem.js @@ -1,8 +1,10 @@ const requireOption = require('../common/requireOption'); +const hasAllOptions = require('../common/hasAllOptions'); const moment = require('moment'); /** * Ads item to a storage of a bunker + * IMPORTANT: It only saves tthe storage item to database, saving the bunker model needs to be called in next middleware, after updateting the statisticks */ module.exports = function (objectrepository) { @@ -12,12 +14,9 @@ module.exports = function (objectrepository) { return function (req, res, next) { - if (typeof req.body.type === 'undefined' || - typeof req.body.dop === 'undefined' || - typeof req.body.quantity === 'undefined'){ - return next(); - } + if(!hasAllOptions(req.body,['type','dop','quantity'])) return next(); + if (req.body.type === '' || req.body.dop === '' || req.body.quantity === '' ){ diff --git a/middleware/storage/deleteStorageItem.js b/middleware/storage/deleteStorageItem.js index 626a5c2..5746fe0 100644 --- a/middleware/storage/deleteStorageItem.js +++ b/middleware/storage/deleteStorageItem.js @@ -1,6 +1,7 @@ const requireOption = require('../common/requireOption'); /** * Deletes item from the storage of a bunker using itemid param + * IMPORTANT: It only deletes storage item to database, saving the bunker model needs to be called in next middleware, after updateting the statisticks */ module.exports = function (objectrepository) { const StorageItemModel = requireOption(objectrepository, 'StorageItemModel'); diff --git a/middleware/storage/updateBunkerStats.js b/middleware/storage/updateBunkerStats.js index 4b04c2b..086db7f 100644 --- a/middleware/storage/updateBunkerStats.js +++ b/middleware/storage/updateBunkerStats.js @@ -1,18 +1,15 @@ const moment = require('moment'); -const requireOption = require('../common/requireOption'); const globalConfig = require('../../config/globalConfig'); +const requireOption = require('../common/requireOption'); + /** - * Deletes item from the storage of a bunker using itemid param + * Updates the bunkers statistics, like estimated days or next expiration date */ module.exports = function (objectrepository) { const BunkerModel = requireOption(objectrepository, 'BunkerModel'); return function (req, res, next) { - - if(typeof res.locals.bunker === 'undefined') return next('Wrong usage of updateBunkerStatsMW'); - - let sumCalories = 0; let expDates = []; -- GitLab