From 8b3f9ac76ae5c26f8b81913529351103c2b35780 Mon Sep 17 00:00:00 2001 From: Scott Tolksdorf Date: Mon, 14 Nov 2016 22:30:28 -0500 Subject: [PATCH] Cleaned up the server file and added methodfs and statics to the model --- client/homebrew/homebrew.jsx | 24 ++-- client/homebrew/pages/printPage/printPage.jsx | 5 +- server.js | 125 ++++++++---------- server/homebrew.api.js | 22 +-- server/homebrew.model.js | 35 +++++ 5 files changed, 113 insertions(+), 98 deletions(-) diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 05a31c6..6d45aac 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -1,18 +1,18 @@ -var React = require('react'); -var _ = require('lodash'); -var cx = require('classnames'); +const React = require('react'); +const _ = require('lodash'); +const cx = require('classnames'); -var CreateRouter = require('pico-router').createRouter; +const CreateRouter = require('pico-router').createRouter; -var HomePage = require('./pages/homePage/homePage.jsx'); -var EditPage = require('./pages/editPage/editPage.jsx'); -var SharePage = require('./pages/sharePage/sharePage.jsx'); -var NewPage = require('./pages/newPage/newPage.jsx'); -var ErrorPage = require('./pages/errorPage/errorPage.jsx'); -var PrintPage = require('./pages/printPage/printPage.jsx'); +const HomePage = require('./pages/homePage/homePage.jsx'); +const EditPage = require('./pages/editPage/editPage.jsx'); +const SharePage = require('./pages/sharePage/sharePage.jsx'); +const NewPage = require('./pages/newPage/newPage.jsx'); +const ErrorPage = require('./pages/errorPage/errorPage.jsx'); +const PrintPage = require('./pages/printPage/printPage.jsx'); -var Router; -var Homebrew = React.createClass({ +let Router; +const Homebrew = React.createClass({ getDefaultProps: function() { return { url : '', diff --git a/client/homebrew/pages/printPage/printPage.jsx b/client/homebrew/pages/printPage/printPage.jsx index 6aa2922..b6ecfd8 100644 --- a/client/homebrew/pages/printPage/printPage.jsx +++ b/client/homebrew/pages/printPage/printPage.jsx @@ -1,10 +1,7 @@ const React = require('react'); const _ = require('lodash'); const cx = require('classnames'); - -//const BrewRenderer = require('../../brewRenderer/brewRenderer.jsx'); - -var Markdown = require('naturalcrit/markdown.js'); +const Markdown = require('naturalcrit/markdown.js'); const PrintPage = React.createClass({ getDefaultProps: function() { diff --git a/server.js b/server.js index 514a836..fb11c0c 100644 --- a/server.js +++ b/server.js @@ -35,85 +35,66 @@ var sanitizeBrew = function(brew){ }; -app.get('/edit/:id', (req, res, next)=>{ - HomebrewModel.find({editId : req.params.id}, (err, brews)=>{ - if(err || !brews.length){ - return res.status(400).send(`Can't get that`); - } - req.brew = brews[0].toJSON(); - return next(); - }) -}); - - -//Share Page -app.get('/share/:id', (req, res, next)=>{ - HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{ - if(err || !brews.length){ - return res.status(400).send(`Can't get that`); - } - const brew = brews[0]; - brew.lastViewed = new Date(); - brew.views = brew.views + 1; - brew.save(); - - req.brew = sanitizeBrew(brew.toJSON()); - return next(); - }) -}); - -//Share Page -app.get('/print/:id', (req, res, next)=>{ - HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{ - if(err || !brews.length){ - return res.status(400).send(`Can't get that`); - } - req.brew = sanitizeBrew(brews[0].toJSON()); - return next(); - }) -}); - -/* -//Print Page -var Markdown = require('naturalcrit/markdown.js'); -var PHBStyle = '' -app.get('/print/:id', function(req, res){ - HomebrewModel.find({shareId : req.params.id}, function(err, objs){ - var brew = {}; - if(objs.length){ - brew = objs[0]; - } - - if(err || !objs.length){ - brew.text = '# Oops \n We could not find a brew with that id. **Sorry!**'; - } - - var content = _.map(brew.text.split('\\page'), function(pageText, index){ - return `
` + Markdown.render(pageText) + '
'; - }).join('\n'); - - var dialog = ''; - if(req.query && req.query.dialog) dialog = 'onload="window.print()"'; - - var title = '' + brew.title + ''; - var page = `${title} ${PHBStyle}${content}` - - return res.send(page) - }); -}); -*/ //Source page String.prototype.replaceAll = function(s,r){return this.split(s).join(r)} app.get('/source/:id', (req, res)=>{ - HomebrewModel.find({shareId : req.params.id}, (err, brews)=>{ - if(err || !brews.length) return res.status(404).send('Could not find Homebrew with that id'); - const text = brews[0].text.replaceAll('<', '<').replaceAll('>', '>'); - return res.send(`
${text}
`); - }); + HomebrewModel.get({shareId : req.params.id}) + .then((brew)=>{ + const text = brew.text.replaceAll('<', '<').replaceAll('>', '>'); + return res.send(`
${text}
`); + }) + .catch((err)=>{ + console.log(err); + return res.status(404).send('Could not find Homebrew with that id'); + }) }); +app.get('/edit/:id', (req, res, next)=>{ + HomebrewModel.get({editId : req.params.id}) + .then((brew)=>{ + req.brew = brew.sanatize(); + return next(); + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send(`Can't get that`); + }); +}); + +//Share Page +app.get('/share/:id', (req, res, next)=>{ + HomebrewModel.get({shareId : req.params.id}) + .then((brew)=>{ + return brew.increaseView(); + }) + .then((brew)=>{ + req.brew = brew.sanatize(true); + return next(); + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send(`Can't get that`); + }); +}); + +//Print Page +app.get('/print/:id', (req, res, next)=>{ + HomebrewModel.get({shareId : req.params.id}) + .then((brew)=>{ + req.brew = brew.sanatize(true); + return next(); + }) + .catch((err)=>{ + console.log(err); + return res.status(400).send(`Can't get that`); + }); +}); + + + + //Render Page app.use((req, res) => { vitreumRender({ diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 84cf06c..9322327 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -53,17 +53,19 @@ router.post('/api', (req, res)=>{ }); router.put('/api/update/:id', (req, res)=>{ - HomebrewModel.find({editId : req.params.id}, (err, objs)=>{ - if(!objs.length || err) return res.status(404).send("Can not find homebrew with that id"); - var resEntry = objs[0]; - resEntry.text = req.body.text; - resEntry.title = req.body.title; - resEntry.updatedAt = new Date(); - resEntry.save((err, obj)=>{ - if(err) return res.status(500).send("Error while saving"); - return res.status(200).send(obj); + HomebrewModel.get({editId : req.params.id}) + .then((brew)=>{ + brew = _.merge(brew, req.body); + brew.updatedAt = new Date(); + brew.save((err, obj)=>{ + if(err) throw err; + return res.status(200).send(obj); + }) }) - }); + .catch((err)=>{ + console.log(err); + return res.status(500).send("Error while saving"); + }); }); router.get('/api/remove/:id', (req, res)=>{ diff --git a/server/homebrew.model.js b/server/homebrew.model.js index 7dcd582..abb9bf1 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -7,6 +7,7 @@ var HomebrewSchema = mongoose.Schema({ editId : {type : String, default: shortid.generate, index: { unique: true }}, title : {type : String, default : ""}, text : {type : String, default : ""}, + authors : [String], createdAt : { type: Date, default: Date.now }, updatedAt : { type: Date, default: Date.now}, @@ -16,6 +17,40 @@ var HomebrewSchema = mongoose.Schema({ +HomebrewSchema.methods.sanatize = function(full=false){ + const brew = this.toJSON(); + delete brew._id; + delete brew.__v; + if(full){ + delete brew.editId; + } + return brew; +}; + + +HomebrewSchema.methods.increaseView = function(){ + return new Promise((resolve, reject) => { + this.lastViewed = new Date(); + this.views = this.views + 1; + this.save((err) => { + if(err) return reject(err); + return resolve(this); + }); + }); +}; + + + +HomebrewSchema.statics.get = function(query){ + return new Promise((resolve, reject) => { + Homebrew.find(query, (err, brews)=>{ + if(err || !brews.length) return reject('Can not find brew'); + return resolve(brews[0]); + }); + }); +}; + + var Homebrew = mongoose.model('Homebrew', HomebrewSchema); module.exports = {