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