From 1b4a6f1e5be6b6b25acde47fae2b304465178ddf Mon Sep 17 00:00:00 2001
From: bucsybeni <bucsy.beni@gmail.com>
Date: Tue, 21 Apr 2020 23:04:32 +0200
Subject: [PATCH] hf5 started

---
 config/db.js                       |  2 +-
 config/globalConfig.js             | 10 ++++
 date.js                            |  8 +++
 middleware/bunker/getBunker.js     | 44 +++++++++++++---
 middleware/bunker/getBunkerList.js | 82 ++++++++++++++++--------------
 middleware/common/auth.js          |  4 +-
 middleware/common/inverseAuth.js   |  4 +-
 middleware/common/requireOption.js | 14 +++++
 models/bunker.js                   |  1 +
 mongo.js                           | 59 +++++++++++++++++++++
 package-lock.json                  |  5 ++
 package.json                       |  1 +
 routes/bunker.js                   |  6 +--
 routes/common.js                   |  6 +--
 routes/foods.js                    |  6 +--
 routes/index.js                    | 17 +++++--
 routes/storage.js                  |  4 +-
 17 files changed, 203 insertions(+), 70 deletions(-)
 create mode 100644 config/globalConfig.js
 create mode 100644 date.js
 create mode 100644 middleware/common/requireOption.js
 create mode 100644 mongo.js

diff --git a/config/db.js b/config/db.js
index b85e1a5..6cf5bef 100644
--- a/config/db.js
+++ b/config/db.js
@@ -1,3 +1,3 @@
 const mongoose = require('mongoose');
-mongoose.connect('mongodb://localhost/EQN34F', { useNewUrlParser: true });
+mongoose.connect('mongodb://localhost/EQN34F', { useNewUrlParser: true ,useUnifiedTopology: true});
 module.exports = mongoose;
\ No newline at end of file
diff --git a/config/globalConfig.js b/config/globalConfig.js
new file mode 100644
index 0000000..542814c
--- /dev/null
+++ b/config/globalConfig.js
@@ -0,0 +1,10 @@
+
+const config = {
+
+    useAuthentication: false
+
+};
+
+
+
+module.exports = config;
\ No newline at end of file
diff --git a/date.js b/date.js
new file mode 100644
index 0000000..f94ec94
--- /dev/null
+++ b/date.js
@@ -0,0 +1,8 @@
+const moment =  require('moment');
+
+
+var datetime = '2020-04-19T09:29:05.000Z';
+var otherTime = moment(datetime);
+let today = moment();
+
+console.log(today.diff(otherTime,"day"));
diff --git a/middleware/bunker/getBunker.js b/middleware/bunker/getBunker.js
index 55e6417..4c221a6 100644
--- a/middleware/bunker/getBunker.js
+++ b/middleware/bunker/getBunker.js
@@ -1,14 +1,44 @@
-
-
+const moment = require('moment');
+const requireOption = require('../common/requireOption');
 /**
  * Gets bunker information from bunkerid param, puts info in res.locals.bunker
  *  -- if no bunker found, redirects to /bunkers 
  */
 module.exports = function (objectrepository) {
 
+
+    const BunkerModel = requireOption(objectrepository, 'BunkerModel');
+
+
     return function (req, res, next) {
-        
-        res.locals.bunker = {
+
+        console.log(req.params.bunkerid);
+        BunkerModel.findOne({_id: req.params.bunkerid})
+            .populate('stock')
+            .exec()
+            .then(bunker => {
+                console.log(bunker);
+                for(let item of bunker.stock)
+                    item.style = getStockStyle(item.lasts);
+                res.locals.bunker = bunker;
+            })
+            .then(next)
+            .catch(err => next(err));
+
+    }
+}
+
+function getStockStyle (lasts) {
+    const today = moment();
+    let diff = today.diff(lasts,'days');
+
+    console.log(diff);
+
+    return 'text-danger';
+
+}
+
+       /* res.locals.bunker = {
             _id: 'bnkr2',
             name: 'Bunker2',
             adress: 'Teszt utca 2',
@@ -40,7 +70,5 @@ module.exports = function (objectrepository) {
         };
         
         
-        return next();
-    };
-  
-  };
\ No newline at end of file
+
+  };*/
\ No newline at end of file
diff --git a/middleware/bunker/getBunkerList.js b/middleware/bunker/getBunkerList.js
index 2594743..896030a 100644
--- a/middleware/bunker/getBunkerList.js
+++ b/middleware/bunker/getBunkerList.js
@@ -1,46 +1,54 @@
+const moment = require('moment');
+const requireOption = require('../common/requireOption');
+
 
 /**
  *Gets list of bunkers, puts list on res.locals.bunkers
  */
-
 module.exports = function (objectrepository) {
 
+    const BunkerModel = requireOption(objectrepository, 'BunkerModel');
+
     return function (req, res, next) {
 
-        res.locals.bunkers = [
-        {
-            _id: 'bnkr1',
-            name: 'Bunker1',
-            stock_dur: 365,
-            warning: {
-                level: 0,
-                message: '-',
-                class: 'text-secondary'
-            }
-        },
-        {
-            _id: 'bnkr2',
-            name: 'Bunker2',
-            stock_dur: 400,
-            warning: {
-                level: 1,
-                message: 'Fél éven belűl romlandó étel',
-                class: 'text-warning'
-            }
-        },
-        {
-            _id: 'bnkr3',
-            name: 'Bunker3',
-            stock_dur: 150,
-            warning: {
-                level: 2,
-                message: 'Romlott étel ',
-                class: 'text-danger'
-            }
-        },
-        ];
-
-        return next();
+        BunkerModel.find({}).exec()
+            .then(bunkers =>{
+                for(let bunker of bunkers)
+                    bunker.warning = GetWarningLabel(bunker.nextExpDate);
+                res.locals.bunkers = bunkers;
+            })
+            .then(next)
+            .catch(err => next(err))
     };
-  
-  };
\ No newline at end of file
+
+}
+
+
+//TODO: Ezt szebben meg kéne oldani
+function GetWarningLabel(nextExpireDate) {
+    const today = new moment();
+    console.log(nextExpireDate);
+    let diff = -today.diff(nextExpireDate,'days');
+
+    console.log(diff);
+
+    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/common/auth.js b/middleware/common/auth.js
index e92696c..20ec9f6 100644
--- a/middleware/common/auth.js
+++ b/middleware/common/auth.js
@@ -1,4 +1,6 @@
 
+const global = require('../../config/globalConfig');
+
 /**
  * If the user is not logged in, redirects to '/'
  */
@@ -6,7 +8,7 @@ module.exports = function (objectrepository) {
 
     return function (req, res, next) {
     
-        if(! req.session.user) 
+        if(global.UseAuthentication && ! req.session.user)
             return res.redirect('/');
 
         next();
diff --git a/middleware/common/inverseAuth.js b/middleware/common/inverseAuth.js
index a14d6c8..46e6685 100644
--- a/middleware/common/inverseAuth.js
+++ b/middleware/common/inverseAuth.js
@@ -1,4 +1,6 @@
 
+const globalConfig = require('../../config/globalConfig');
+
 /**
  * If the user is logged in, redirects to '/bunkers'
  */
@@ -6,7 +8,7 @@
 module.exports = function (objectrepository) {
 
     return function (req, res, next) {
-        if(typeof req.session.user != 'undefined'){
+        if(!globalConfig.useAuthentication || typeof req.session.user != 'undefined'){
             return res.redirect('/bunkers');
         }
         return next();
diff --git a/middleware/common/requireOption.js b/middleware/common/requireOption.js
new file mode 100644
index 0000000..eef3542
--- /dev/null
+++ b/middleware/common/requireOption.js
@@ -0,0 +1,14 @@
+/**
+ * Load a dependency from an object repository
+ * @param objectRepository object repository
+ * @param propertyName dependency name
+ * @returns {*}
+ */
+function requireOption(objectRepository, propertyName) {
+    if (objectRepository && objectRepository[propertyName]) {
+        return objectRepository[propertyName];
+    }
+    throw new TypeError(`${propertyName} required`);
+}
+
+module.exports = requireOption;
\ No newline at end of file
diff --git a/models/bunker.js b/models/bunker.js
index d0646f8..d76b9f1 100644
--- a/models/bunker.js
+++ b/models/bunker.js
@@ -6,6 +6,7 @@ const Bunker = db.model('Bunker', {
     adress: String,
     capacity: Number,
     stock_dur: Number,
+    nextExpDate: Date,
     stock:[{
             type: Schema.Types.ObjectId,
             ref: 'StorageItem'
diff --git a/mongo.js b/mongo.js
new file mode 100644
index 0000000..af57478
--- /dev/null
+++ b/mongo.js
@@ -0,0 +1,59 @@
+
+
+const FoodModel = require('./models/food');
+const BunkerModel = require('./models/bunker');
+const StorageItemModel = require('./models/storageItem');
+
+let dF = FoodModel.deleteMany({}).exec();
+let dB = BunkerModel.deleteMany({}).exec();
+let dS = StorageItemModel.deleteMany().exec();
+
+Promise.all([dF,dB,dS]).then(fillDB).catch(err => console.log(err)).then(res=>{
+  console.log('done');
+  return process.exit()
+});
+
+async function fillDB(){
+
+    let food1 = new FoodModel();
+
+
+    food1.name = "Sajtos csirkefarhát";
+    food1.kcal = 100;
+    food1.lasts = 500;
+
+    await food1.save();
+
+    let storage1 = new StorageItemModel({
+        type: food1.name,
+        quantity: 50,
+        dop: new Date(),
+        lasts: new Date(2020,8,16)
+    });
+
+    await storage1.save();
+
+    let storage2 = new StorageItemModel({
+        type: food1.name,
+        quantity: 500,
+        dop: new Date(2019,10,23),
+        lasts: new Date(2020,8,16)
+    });
+
+    await storage2.save();
+
+    let Bunker = new BunkerModel({
+        name: "SCH",
+        adress: "Next to BME",
+        capacity: 1000,
+        stock_dur: 10000,
+        stock:[storage1._id,storage2._id],
+        nextExpDate: new Date(2020,4,20)
+    });
+
+    await  Bunker.save();
+
+}
+
+
+
diff --git a/package-lock.json b/package-lock.json
index 9543acd..3e161a2 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -786,6 +786,11 @@
       "integrity": "sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==",
       "dev": true
     },
+    "moment": {
+      "version": "2.24.0",
+      "resolved": "https://registry.npmjs.org/moment/-/moment-2.24.0.tgz",
+      "integrity": "sha512-bV7f+6l2QigeBBZSM/6yTNq4P2fNpSWj/0e7jQcy87A8e7o2nAfP/34/2ky5Vw4B9S446EtIhodAzkFCcR4dQg=="
+    },
     "mongodb": {
       "version": "3.5.6",
       "resolved": "https://registry.npmjs.org/mongodb/-/mongodb-3.5.6.tgz",
diff --git a/package.json b/package.json
index b7955d7..81404fc 100644
--- a/package.json
+++ b/package.json
@@ -13,6 +13,7 @@
     "ejs": "^3.0.1",
     "express": "^4.17.1",
     "express-session": "^1.17.0",
+    "moment": "^2.24.0",
     "mongoose": "^5.9.10"
   },
   "devDependencies": {
diff --git a/routes/bunker.js b/routes/bunker.js
index 89572c7..499e40e 100644
--- a/routes/bunker.js
+++ b/routes/bunker.js
@@ -8,11 +8,7 @@ var getBunkerMW = require('../middleware/bunker/getBunker');
 var deleteBunkerMW = require('..//middleware/bunker/deleteBunker');
 
 
-module.exports = function (app) {
-    var objectRepository = {
-      
-    };
-  
+module.exports = function (app, objectRepository) {
 
     app.get('/bunkers',
         authMW(objectRepository),
diff --git a/routes/common.js b/routes/common.js
index aca914c..4eca464 100644
--- a/routes/common.js
+++ b/routes/common.js
@@ -6,10 +6,8 @@ var loginMW = require('../middleware/common/login');
 var inversAuthMW = require('../middleware/common/inverseAuth');
 var logoutMW = require('..//middleware/common/logout');
 
-module.exports = function (app) {
-    var objectRepository = {
-      
-    };
+module.exports = function (app, objectRepository) {
+
   
 
     app.get('/',
diff --git a/routes/foods.js b/routes/foods.js
index 9d2098d..49ea60f 100644
--- a/routes/foods.js
+++ b/routes/foods.js
@@ -8,11 +8,7 @@ var saveFoodMW = require('../middleware/food/saveFood');
 var getFoodMW = require('../middleware/food/getFood');
 var deleteFoodMW = require('../middleware/food/deleteFood');
 
-module.exports = function (app) {
-    var objectRepository = {
-      
-    };
-  
+module.exports = function (app, objectRepository) {
 
     app.get('/foods',
         authMW(objectRepository),
diff --git a/routes/index.js b/routes/index.js
index e15dae9..95d50f9 100644
--- a/routes/index.js
+++ b/routes/index.js
@@ -1,15 +1,22 @@
 
+const BunkerModel = require('../models/bunker');
+const StorageItemModel = require('../models/storageItem')
+const FoodModel = require('../models/food');
 
 //szimplán összefogja a többi routot, hogy az express applikációban szépen egy sorba be lehessen importálni
 module.exports = function (app) {
 
 
-    //u
+    var objectRepository = {
+        BunkerModel: BunkerModel,
+        StorageItemModel: StorageItemModel,
+        FoodModel: FoodModel
+    };
 
-    require('./common')(app);
-    require('./bunker')(app);
-    require('./storage')(app);
-    require('./foods')(app);
+    require('./common')(app,objectRepository);
+    require('./bunker')(app,objectRepository);
+    require('./storage')(app,objectRepository);
+    require('./foods')(app,objectRepository);
 
 
 
diff --git a/routes/storage.js b/routes/storage.js
index a7c1370..c402f9f 100644
--- a/routes/storage.js
+++ b/routes/storage.js
@@ -9,10 +9,8 @@ var addStorageItemMW = require('../middleware/storage/addStorageItem');
 var deletStorageItemMW = require('../middleware/storage/deleteStorageItem');
 
 
-module.exports = function (app) {
-    var objectRepository = {
+module.exports = function (app,objectRepository) {
 
-    };
 
     app.use('/bunkers/storage/add/:bunkerid',
         authMW(objectRepository),
-- 
GitLab