From 8a4d8407173f6d3da3989da240f7b124d8c52c2a Mon Sep 17 00:00:00 2001 From: Scott Tolksdorf Date: Sun, 20 Dec 2015 14:21:25 -0500 Subject: [PATCH] Edit and sharing should be working, deploying for testing --- client/homebrew/editPage/editPage.jsx | 51 +++++++++++--- client/homebrew/homebrew.jsx | 13 +++- client/homebrew/sharePage/sharePage.jsx | 18 ++++- package.json | 1 + server.js | 13 +++- server/homebrew.api.js | 94 +++++++++++++++++++------ server/homebrew.model.js | 24 ++++++- 7 files changed, 175 insertions(+), 39 deletions(-) diff --git a/client/homebrew/editPage/editPage.jsx b/client/homebrew/editPage/editPage.jsx index 9ab38ee..3cc542e 100644 --- a/client/homebrew/editPage/editPage.jsx +++ b/client/homebrew/editPage/editPage.jsx @@ -10,14 +10,22 @@ var request = require("superagent"); var EditPage = React.createClass({ getDefaultProps: function() { return { - text : "", - id : null + //text : "", + pending : false, + id : null, + entry : { + text : "", + shareId : null, + editId : null, + createdAt : null, + updatedAt : null, + } }; }, getInitialState: function() { return { - text: this.props.text + text: this.props.entry.text }; }, @@ -29,14 +37,37 @@ var EditPage = React.createClass({ //Ajax time }, + handleSave : function(){ + this.setState({ + pending : true + }) + request + .put('/homebrew/update/' + this.props.id) + .send({text : this.state.text}) + .end((err, res) => { + + console.log('err', err); + this.setState({ + pending : false + }) + }) + }, + render : function(){ - var self = this; - return( -
- - -
- ); + + console.log(this.props.entry); + + var temp; + if(this.state.pending){ + temp =
processing
+ } + + + return
+ {temp} + + +
} }); diff --git a/client/homebrew/homebrew.jsx b/client/homebrew/homebrew.jsx index 79d71e2..e5dc4ff 100644 --- a/client/homebrew/homebrew.jsx +++ b/client/homebrew/homebrew.jsx @@ -13,16 +13,23 @@ var Homebrew = React.createClass({ getDefaultProps: function() { return { url : "", - text : "" + text : "", + entry : { + text : "", + shareId : null, + editId : null, + createdAt : null, + updatedAt : null, + } }; }, componentWillMount: function() { Router = CreateRouter({ '/homebrew/edit/:id' : (args) => { - return + return }, '/homebrew/share/:id' : (args) => { - return + return }, '/homebrew*' : , }); diff --git a/client/homebrew/sharePage/sharePage.jsx b/client/homebrew/sharePage/sharePage.jsx index 3e58037..396da1e 100644 --- a/client/homebrew/sharePage/sharePage.jsx +++ b/client/homebrew/sharePage/sharePage.jsx @@ -2,13 +2,27 @@ var React = require('react'); var _ = require('lodash'); var cx = require('classnames'); +var PHB = require('../phb/phb.jsx'); + var SharePage = React.createClass({ + getDefaultProps: function() { + return { + id : null, + entry : { + text : "", + shareId : null, + editId : null, + createdAt : null, + updatedAt : null, + } + }; + }, render : function(){ - var self = this; + console.log(this.props.entry); return(
- SharePage Ready! +
); } diff --git a/package.json b/package.json index 5fa5234..816dcf1 100644 --- a/package.json +++ b/package.json @@ -10,6 +10,7 @@ "license": "BSD-2-Clause", "dependencies": { "app-module-path": "^1.0.4", + "body-parser": "^1.14.2", "classnames": "^2.2.0", "express": "^4.13.3", "gulp": "^3.9.0", diff --git a/server.js b/server.js index 415867c..c6c53c4 100644 --- a/server.js +++ b/server.js @@ -1,16 +1,27 @@ 'use strict'; require('app-module-path').addPath('./shared'); var vitreumRender = require('vitreum/render'); +var bodyParser = require('body-parser') var express = require("express"); var app = express(); app.use(express.static(__dirname + '/build')); +app.use(bodyParser.json()); + +//Mongoose +var mongoose = require('mongoose'); +var mongoUri = process.env.MONGOLAB_URI || process.env.MONGOHQ_URL || 'mongodb://localhost/naturalcrit'; +mongoose.connect(mongoUri); +mongoose.connection.on('error', function(){ + console.log(">>>ERROR: Run Mongodb.exe ya goof!"); +}); + + app = require('./server/homebrew.api.js')(app); - app.get('*', function (req, res) { vitreumRender({ page: './build/naturalCrit/bundle.dot', diff --git a/server/homebrew.api.js b/server/homebrew.api.js index 23b1909..010c03e 100644 --- a/server/homebrew.api.js +++ b/server/homebrew.api.js @@ -2,31 +2,92 @@ var vitreumRender = require('vitreum/render'); +var HomebrewModel = require('./homebrew.model.js').model; + + + + module.exports = function(app){ + app.get('/homebrew/new', function(req, res){ + var newHomebrew = new HomebrewModel(); + newHomebrew.save(function(err, obj){ + return res.redirect('/homebrew/edit/' + obj.editId); + }) + }) - + //Edit Page app.get('/homebrew/edit/:id', function(req, res){ + HomebrewModel.find({editId : req.params.id}, function(err, objs){ + var resObj = null; + var errObj = {text: "# oops\nCould not find the homebrew."} + if(objs.length){ + resObj = objs[0]; + } - console.log(req.params.id); + vitreumRender({ + page: './build/homebrew/bundle.dot', + globals:{}, + prerenderWith : './client/homebrew/homebrew.jsx', + initialProps: { + url: req.originalUrl, + entry : resObj || errObj + }, + clearRequireCache : true, + }, function (err, page) { + return res.send(page) + }); + }) + }); - vitreumRender({ - page: './build/homebrew/bundle.dot', - globals:{}, - prerenderWith : './client/homebrew/homebrew.jsx', - initialProps: { - url: req.originalUrl, - }, - clearRequireCache : true, - }, function (err, page) { - return res.send(page) + //Updating + app.put('/homebrew/update/:id', function(req, res){ + HomebrewModel.find({editId : req.params.id}, function(err, objs){ + if(!objs.length || err) return res.send(400); + var resEntry = objs[0]; + resEntry.text = req.body.text; + resEntry.save(function(err, obj){ + if(!err) return res.sendStatus(500); + return res.send(200); + }) }); }); + + //Share Page + app.get('/homebrew/share/:id', function(req, res){ + HomebrewModel.find({shareId : req.params.id}, function(err, objs){ + var resObj = null; + var errObj = {text: "# oops\nCould not find the homebrew."} + if(objs.length){ + resObj = objs[0]; + } + + resObj.editId = null; + + vitreumRender({ + page: './build/homebrew/bundle.dot', + globals:{}, + prerenderWith : './client/homebrew/homebrew.jsx', + initialProps: { + url: req.originalUrl, + entry : resObj || errObj + }, + clearRequireCache : true, + }, function (err, page) { + return res.send(page) + }); + }) + }); + + + + + //Home and 404, etc. app.get('/homebrew*', function (req, res) { vitreumRender({ page: './build/homebrew/bundle.dot', @@ -41,14 +102,5 @@ module.exports = function(app){ }); }); - - - - - - - - - return app; } \ No newline at end of file diff --git a/server/homebrew.model.js b/server/homebrew.model.js index f88b73e..460c5fa 100644 --- a/server/homebrew.model.js +++ b/server/homebrew.model.js @@ -6,13 +6,33 @@ var HomebrewSchema = mongoose.Schema({ editId : {type : String, default: shortid.generate}, text : {type : String, default : ""}, - created : { type: Date, default: Date.now }, + createdAt : { type: Date, default: Date.now }, + updatedAt : { type: Date} }); +//Schema Options +HomebrewSchema.pre('save', function(done) { + this.updatedAt = new Date(); + done(); +}); + +/* +HomebrewSchema.options.toJSON.transform = function (doc, ret, options) { + delete ret._id; + delete ret.__t; + delete ret.__v; +} +HomebrewSchema.options.toObject.transform = function (doc, ret, options) { + delete ret._id; + delete ret.__t; + delete ret.__v; +} +*/ + var Homebrew = mongoose.model('Homebrew', HomebrewSchema); module.exports = { schema : HomebrewSchema, model : Homebrew, -} +} \ No newline at end of file