Refactor utils and organize routes/schema

This commit is contained in:
Johnathon Slightham
2021-05-19 20:08:04 -04:00
parent ac404a0ac5
commit cafb324ddb
15 changed files with 128 additions and 115 deletions

View File

@@ -4,12 +4,12 @@ const app = express();
const PORT = 4000;
const cors = require('cors');
const mongoose = require('mongoose');
const utils = require ('./utils');
const utils = require ('./utils/utils');
const CronJob = require('cron').CronJob;
const config = require('./DB.js');
const userRoutes = require('./user.route');
const postRoutes = require('./post.route');
const categoryRoutes = require('./category.route');
const userRoutes = require('./routes/user.route');
const postRoutes = require('./routes/post.route');
const categoryRoutes = require('./routes/category.route');
const mongoSanitize = require('express-mongo-sanitize');
console.log("Starting Kno-Logic Backend Server");
@@ -19,12 +19,12 @@ mongoose.Promise = global.Promise;
mongoose.connect(config.DB, { useNewUrlParser: true, useUnifiedTopology: true }).then(
() => {
console.log('Connected to dabase');
utils.loadDefaultTemplates();
utils.purgeSessions();
utils.mail.loadDefaultTemplates();
utils.cron.purgeSessions();
},
err => {
console.log('Could not connect to database: ');
console.log(err);
console.error('Could not connect to database: ');
console.error(err);
}
);
@@ -46,5 +46,5 @@ app.listen(PORT, () => {
});
// Cron jobs
var purge = new CronJob('*/5 * * * *', utils.purgeSessions);
var purge = new CronJob('*/5 * * * *', utils.cron.purgeSessions);
purge.start();

View File

@@ -1,11 +1,11 @@
const utils = require('./utils');
const utils = require('../utils/utils');
const express = require('express');
const categoryRoutes = express.Router();
let Post = require('./post.model');
let Category = require('./category.model');
let Session = require('./session.model');
let User = require('./user.model');
let Post = require('../schema/post.model');
let Category = require('../schema/category.model');
let Session = require('../schema/session.model');
let User = require('../schema/user.model');
/*
POST - /category/create
@@ -18,8 +18,8 @@ categoryRoutes.route('/create').post((req, res) => {
res.status(401).send("Missing body");
return;
}
utils.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.isAdmin(req.body.userId, (isAdmin) => {
utils.account.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.account.isAdmin(req.body.userId, (isAdmin) => {
if (isValidId && isAdmin) {
let c = new Category(req.body);
c.save()

View File

@@ -1,11 +1,11 @@
const utils = require('./utils');
const utils = require('../utils/utils');
const express = require('express');
const postRoutes = express.Router();
let Post = require('./post.model');
let Category = require('./category.model');
let Session = require('./session.model');
let User = require('./user.model');
let Post = require('../schema/post.model');
let Category = require('../schema/category.model');
let Session = require('../schema/session.model');
let User = require('../schema/user.model');
/*
POST - /post/create
@@ -18,17 +18,17 @@ postRoutes.route('/create').post((req, res) => {
res.status(401).send("Missing body");
return;
}
utils.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.isAdmin(req.body.userId, (isAdmin) => {
utils.account.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.account.isAdmin(req.body.userId, (isAdmin) => {
if (isValidId && isAdmin) {
let p = new Post(req.body);
p.date = utils.dateToEpoch(p.date);
p.date = utils.date.dateToEpoch(p.date);
p.save()
.then(() => {
res.json(p);
})
.catch((e) => {
console.log(e);
console.error(e);
res.status(500).send("Error creating post");
});
} else {
@@ -50,8 +50,8 @@ postRoutes.route('/delete').post((req, res) => {
res.status(401).send("Missing body");
return;
}
utils.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.isAdmin(req.body.userId, (isAdmin) => {
utils.account.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.account.isAdmin(req.body.userId, (isAdmin) => {
if (isValidId && isAdmin) {
Post.findByIdAndDelete(req.body._id, (err, r) => {
if (err) {
@@ -79,8 +79,8 @@ postRoutes.route('/edit').post((req, res) => {
res.status(401).send("Missing body");
return;
}
utils.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.isAdmin(req.body.userId, (isAdmin) => {
utils.account.checkSession(req.body.userId, req.body.sessionId, (isValidId) => {
utils.account.isAdmin(req.body.userId, (isAdmin) => {
if (isValidId && isAdmin) {
Post.findById(req.body._id, (err, r) => {
if (err) {
@@ -92,7 +92,7 @@ postRoutes.route('/edit').post((req, res) => {
res.json(r);
})
.catch((e) => {
console.log(e);
console.error(e);
res.status(500).send("Error creating post");
});
res.status(200).send("Edited post");
@@ -114,7 +114,7 @@ postRoutes.route('/edit').post((req, res) => {
postRoutes.route('/id').post((req, res) => {
Post.findById(req.body._id, (err, post) => {
if (err) {
console.log(err);
console.error(err);
res.status(500).send("Error getting posts");
return;
}
@@ -129,10 +129,10 @@ postRoutes.route('/id').post((req, res) => {
*/
postRoutes.route('/date').post((req, res) => {
let d = new Date(req.body.date);
d = utils.dateToEpoch(d);
d = utils.date.dateToEpoch(d);
Post.find({ date: d}, (err, post) => {
if (err) {
console.log(err);
console.error(err);
res.status(500).send("Error getting posts");
return;
}
@@ -149,7 +149,7 @@ postRoutes.route('/date').post((req, res) => {
postRoutes.route('/all').get((req, res) => {
Post.find({}, (err, postArr) => {
if (err) {
console.log(err);
console.error(err);
res.status(500).send("Error getting posts");
return;
}
@@ -165,10 +165,10 @@ postRoutes.route('/all').get((req, res) => {
*/
postRoutes.route('/today').get((req, res) => {
let date = new Date();
date = utils.dateToEpoch(date);
date = utils.date.dateToEpoch(date);
Post.find({ date: date }, (err, postArr) => {
if (err) {
console.log(err);
console.error(err);
res.status(500).send("Error getting posts");
return;
}

View File

@@ -1,4 +1,4 @@
const utils = require('./utils');
const utils = require('../utils/utils');
const express = require('express');
const bcrypt = require('bcrypt');
const userRoutes = express.Router();
@@ -6,9 +6,9 @@ const userRoutes = express.Router();
const saltRounds = 10;
const sessionLength = 25;
let Session = require('./session.model');
let User = require('./user.model');
let Post = require('./post.model');
let Session = require('../schema/session.model');
let User = require('../schema/user.model');
let Post = require('../schema/post.model');
/*
POST - /user/create
@@ -155,7 +155,7 @@ userRoutes.route('/logout').post((req, res) => {
401 - Unauthorized
*/
userRoutes.route('/favorite/add').post((req, res) => {
utils.checkSession(req.body.userId, req.body.sessionId, valid => {
utils.account.checkSession(req.body.userId, req.body.sessionId, valid => {
if (valid) {
User.findById(req.body.userId, (err, user) => {
if (err) {
@@ -186,7 +186,7 @@ userRoutes.route('/favorite/add').post((req, res) => {
401 - Unauthorized
*/
userRoutes.route('/favorite/remove').post((req, res) => {
utils.checkSession(req.body.userId, req.body.sessionId, valid => {
utils.account.checkSession(req.body.userId, req.body.sessionId, valid => {
if (valid) {
User.findById(req.body.userId, (err, user) => {
if (err) {
@@ -194,7 +194,7 @@ userRoutes.route('/favorite/remove').post((req, res) => {
res.status(500).send("Error removing article");
return;
}
user.favorites = utils.removeValue(user.favorites, req.body.articleId);
user.favorites = utils.array.removeValue(user.favorites, req.body.articleId);
user.save()
.then(() => {
res.status(201).send("Success removing article");
@@ -217,7 +217,7 @@ userRoutes.route('/favorite/remove').post((req, res) => {
401 - Unauthorized
*/
userRoutes.route('/favorite/get').post((req, res) => {
utils.checkSession(req.body.userId, req.body.sessionId, valid => {
utils.account.checkSession(req.body.userId, req.body.sessionId, valid => {
if (valid) {
User.findById(req.body.userId, (err, user) => {
if (err) {
@@ -225,7 +225,6 @@ userRoutes.route('/favorite/get').post((req, res) => {
res.status(500).send("Error removing article");
return;
}
console.log(user.favorites);
Post.find({ '_id': { $in: user.favorites } }, (err, postArray) => {
res.json(postArray);
})

27
utils/account.js Normal file
View File

@@ -0,0 +1,27 @@
let User = require('../schema/user.model');
let Session = require('../schema/session.model');
// checkSession(userId, sessionId) checks if the sessionId is valid for the user
const checkSession = (userId, sessionId, f) => {
Session.find({ userId: userId, sessionId: sessionId }, (err, res) => {
if (res) {
f(true);
return;
}
f(false);
});
}
// isAdmin(userId) checks if the user with userId is an administrator
const isAdmin = (userId, f) => {
User.findById(userId, (err, res) => {
if (res.permission == 1) {
f(true);
return;
}
f(false);
})
}
module.exports.checkSession = checkSession;
module.exports.isAdmin = isAdmin;

9
utils/array.js Normal file
View File

@@ -0,0 +1,9 @@
// removeValue(array, item) remove item from the array
function removeValue(array, item) {
var index = array.indexOf(item);
if (index !== -1) {
array.splice(index, 1);
}
}
module.exports.removeValue = removeValue;

21
utils/cron.js Normal file
View File

@@ -0,0 +1,21 @@
const config = require('../config');
let Session = require('../schema/session.model');
const maxSessionLength = config.maxSessionLength;
// purgeSessions() purge sessions that have existed for longer than maxSessionLength
const purgeSessions = () => {
console.log("Purging old sessions...");
Session.find({}, (err, arr) => {
for (let i = 0; i < arr.length; i++) {
let timeDifference = new Date().getTime() - arr[i].date;
let dayDifference = timeDifference / (1000 * 3600 * 24);
if (dayDifference > maxSessionLength) {
arr[i].delete().catch(e => {
console.log(e);
});
}
}
});
}
module.exports.purgeSessions = purgeSessions;

13
utils/date.js Normal file
View File

@@ -0,0 +1,13 @@
// dateToEpoch(date) change the time of the date object to epoch
function dateToEpoch(d) {
console.log(d);
if (d) {
// When comparing js dates, the timezone does not matter
// ex. May 17 EDT == May 17 GMT, May 17 EDT != May 18 GMT
return d.setHours(0, 0, 0, 0);
} else {
return null;
}
}
module.exports.dateToEpoch = dateToEpoch;

View File

@@ -1,26 +1,7 @@
const fs = require('fs');
const nodemailer = require("nodemailer");
var config = require('./config');
let User = require('./user.model');
let Session = require('./session.model');
let Message = require('./message.model');
var maxSessionLength = config.maxSessionLength;
// purgeSessions() purge sessions that have existed for longer than maxSessionLength
const purgeSessions = () => {
console.log("Purging old sessions...");
Session.find({}, (err, arr) => {
for (let i = 0; i < arr.length; i++) {
let timeDifference = new Date().getTime() - arr[i].date;
let dayDifference = timeDifference / (1000 * 3600 * 24);
if (dayDifference > maxSessionLength) {
arr[i].delete().catch(e => {
console.log(e);
});
}
}
});
}
const config = require('../config');
let Message = require('../schema/message.model');
// loadDefaultTemplates() load the default email templates into the database
// if no template exists for that name
@@ -98,53 +79,5 @@ const sendMail = async (user, message, replacements) => {
})
}
// checkSession(userId, sessionId) checks if the sessionId is valid for the user
const checkSession = (userId, sessionId, f) => {
Session.find({ userId: userId, sessionId: sessionId }, (err, res) => {
if (res) {
f(true);
return;
}
f(false);
});
}
// isAdmin(userId) checks if the user with userId is an administrator
const isAdmin = (userId, f) => {
User.findById(userId, (err, res) => {
if (res.permission == 1) {
f(true);
return;
}
f(false);
})
}
// dateToEpoch(date) change the time of the date object to epoch
function dateToEpoch(d) {
console.log(d);
if (d) {
// When comparing js dates, the timezone does not matter
// ex. May 17 EDT == May 17 GMT, May 17 EDT != May 18 GMT
return d.setHours(0, 0, 0, 0);
} else {
return null;
}
}
// removeValue(array, item) remove item from the array
function removeValue(array, item) {
var index = array.indexOf(item);
if (index !== -1) {
array.splice(index, 1);
}
}
module.exports.purgeSessions = purgeSessions;
module.exports.loadDefaultTemplates = loadDefaultTemplates;
module.exports.sendMail = sendMail;
module.exports.checkSession = checkSession;
module.exports.isAdmin = isAdmin;
module.exports.dateToEpoch = dateToEpoch;
module.exports.removeValue = removeValue;
module.exports.sendMail = sendMail;

11
utils/utils.js Normal file
View File

@@ -0,0 +1,11 @@
const account = require('./account');
const array = require('./array');
const cron = require('./cron');
const date = require('./date');
const mail = require('./mail');
module.exports.account = account;
module.exports.array = array;
module.exports.cron = cron;
module.exports.date = date;
module.exports.mail = mail;