From 8c07def786adf7efb4338b6797f98f0cf6318179 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Tue, 24 May 2016 09:27:01 -0700 Subject: [PATCH 01/65] finished setting up --- lib/server.js | 0 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 lib/server.js diff --git a/lib/server.js b/lib/server.js new file mode 100644 index 0000000..e69de29 From 879b5388dbb53553bc7c2d32fa22293f5c189864 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Tue, 24 May 2016 09:58:26 -0700 Subject: [PATCH 02/65] finished making CRUD operations --- lib/server.js | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/lib/server.js b/lib/server.js index e69de29..b9961a5 100644 --- a/lib/server.js +++ b/lib/server.js @@ -0,0 +1,47 @@ +'use strict'; + +const express = require('express'); +const app = express(); +const bodyParser = require('body-parser'); +const jsonParser = bodyParser.json(); +const rooneyRouter = express.Router(); + +rooneyRouter.use(jsonParser); + +app.use('/rooney', rooneyRouter); + +rooneyRouter.get('/', (req, res) => { + res.send('GLORY MAN UNITED') +}) + +rooneyRouter.get('/:id', (req,res) => { + let id = req.params.id; + console.log('hello from id get route'); + res.json({message: id.toUpperCase()}) +}) + +rooneyRouter.post('/', (req, res) => { + console.log('rooneyRouter post hit'); + console.log('request body', req.body); + res.json({message:'hello from rooneyRouter post'}); +}) + +rooneyRouter.put('/', (req, res) => { + console.log('rooneyRouter put hit'); + res.writeHead(200, {'Content-Type': 'application/json'}); + res.write(JSON.stringify({message: 'Hello from rooneyRouter put'})); + res.end(); +}) + +rooneyRouter.delete('/:id', (req, res) => { + let message = `Poor ${req.params.id} is scheit.`; + res.send(message); +}) + +app.get('/*', (req, res) => { + res.status(404).json({msg: 'not found'}) +}) + + + +app.listen(3000, () => console.log('up on 3000')); From d1fc5e7e805feaf0a4899a55a02e4cc36ecd5c62 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Tue, 24 May 2016 11:43:57 -0700 Subject: [PATCH 03/65] finished making CRUD operations --- lib/server.js | 47 ++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 40 insertions(+), 7 deletions(-) diff --git a/lib/server.js b/lib/server.js index b9961a5..16e5a0f 100644 --- a/lib/server.js +++ b/lib/server.js @@ -5,6 +5,13 @@ const app = express(); const bodyParser = require('body-parser'); const jsonParser = bodyParser.json(); const rooneyRouter = express.Router(); +const fs = require('fs'); +const stream = require('stream'); + +const dir = __dirname + '/../data'; +if (!fs.existsSync(dir)) { + fs.mkdirSync(dir); +} rooneyRouter.use(jsonParser); @@ -21,16 +28,42 @@ rooneyRouter.get('/:id', (req,res) => { }) rooneyRouter.post('/', (req, res) => { - console.log('rooneyRouter post hit'); - console.log('request body', req.body); - res.json({message:'hello from rooneyRouter post'}); + // let nextFile = fs.readdirSync(dir).length + 1; + // const writeToFile = fs.createWriteStream(dir + '/' + nextFile + '.json'); + // req.pipe(writeToFile); + // res.writeHead(200, { 'Content-Type': 'text/plain' }); + // res.write('saved file ' + nextFile + '.json' + '\n'); + // console.log(nextFile); + // return res.end(); + + let bufferString = ''; + req.on('data', (data) => { + bufferString += data.toString(); + }); + req.on('end', () => { + var nextFile = (fs.readdirSync(__dirname + '/data/')).length +1 + let file = fs.createWriteStream(__dirname + '/data/test' + nextFile + '.json') + var bufferStream = new stream.PassThrough(); + let inBuf = new Buffer(bufferString); + bufferStream.end(inBuf); + bufferStream.pipe(file); + res.statusCode = 200; + return res.end('wrote to new file' + '\n'); + + }) + }) -rooneyRouter.put('/', (req, res) => { +rooneyRouter.put('/:rooney_id', (req, res) => { console.log('rooneyRouter put hit'); - res.writeHead(200, {'Content-Type': 'application/json'}); - res.write(JSON.stringify({message: 'Hello from rooneyRouter put'})); - res.end(); + let id = req.params.rooney_id; + var stream = fs.createWriteStream(__dirname + '/data/' + id + '.json'); + req.pipe(stream); + res.send('Updated Rooney' + '\n'); + + // res.writeHead(200, {'Content-Type': 'application/json'}); + // res.write(JSON.stringify({message: 'Hello from rooneyRouter put'})); + // res.end(); }) rooneyRouter.delete('/:id', (req, res) => { From dc74c44134b3ec2ede8725ca982da4489c0e409a Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Tue, 24 May 2016 20:30:00 -0700 Subject: [PATCH 04/65] made the final tests work --- .gitignore | 2 + gulpfile.js | 30 +++++++++++++ lib/server.js | 40 +++++++----------- package.json | 40 ++++++++++++++++++ test/rest_api_test.js | 97 +++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 183 insertions(+), 26 deletions(-) create mode 100644 .gitignore create mode 100644 gulpfile.js create mode 100644 package.json create mode 100644 test/rest_api_test.js diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..15de390 --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +node_modules +data diff --git a/gulpfile.js b/gulpfile.js new file mode 100644 index 0000000..fdcf6b9 --- /dev/null +++ b/gulpfile.js @@ -0,0 +1,30 @@ +const gulp = require('gulp'); +const eslint = require('gulp-eslint'); +const mocha = require('gulp-mocha'); +const watch = require('gulp-watch'); + +gulp.task('lint', () => { + gulp.src(['./*.js', './test/*.js']) + .pipe(eslint({ + env: [ + 'mocha', + 'es6' + ] + })) + .pipe(eslint.format()); +}); + +gulp.task('mocha', () => { + return gulp.src('./test/*.js', { + read: false + }) + .pipe(mocha({ + reporter: 'nyan' + })); +}); + +gulp.task('watch', () => { + gulp.watch(['./*.js', './test/*.js' ], ['mocha', 'lint']); +}); + +gulp.task('default', ['mocha', 'lint', 'watch']); diff --git a/lib/server.js b/lib/server.js index 16e5a0f..711f39e 100644 --- a/lib/server.js +++ b/lib/server.js @@ -28,47 +28,35 @@ rooneyRouter.get('/:id', (req,res) => { }) rooneyRouter.post('/', (req, res) => { - // let nextFile = fs.readdirSync(dir).length + 1; - // const writeToFile = fs.createWriteStream(dir + '/' + nextFile + '.json'); - // req.pipe(writeToFile); - // res.writeHead(200, { 'Content-Type': 'text/plain' }); - // res.write('saved file ' + nextFile + '.json' + '\n'); - // console.log(nextFile); - // return res.end(); - - let bufferString = ''; + console.log('hit post route'); + let rooney = ''; req.on('data', (data) => { - bufferString += data.toString(); + rooney += data.toString(); }); req.on('end', () => { - var nextFile = (fs.readdirSync(__dirname + '/data/')).length +1 - let file = fs.createWriteStream(__dirname + '/data/test' + nextFile + '.json') + let nextFile = (fs.readdirSync(dir)).length +1 + let file = fs.createWriteStream(dir + '/' + nextFile + '.json') var bufferStream = new stream.PassThrough(); - let inBuf = new Buffer(bufferString); + let inBuf = new Buffer(rooney); bufferStream.end(inBuf); bufferStream.pipe(file); - res.statusCode = 200; - return res.end('wrote to new file' + '\n'); - + res.json({message: 'Wrote a new file'}); }) - }) -rooneyRouter.put('/:rooney_id', (req, res) => { +rooneyRouter.put('/:id', (req, res) => { console.log('rooneyRouter put hit'); - let id = req.params.rooney_id; - var stream = fs.createWriteStream(__dirname + '/data/' + id + '.json'); + let id = req.params.id; + var stream = fs.createWriteStream(dir + '/' + id + '.json'); req.pipe(stream); res.send('Updated Rooney' + '\n'); - - // res.writeHead(200, {'Content-Type': 'application/json'}); - // res.write(JSON.stringify({message: 'Hello from rooneyRouter put'})); - // res.end(); }) rooneyRouter.delete('/:id', (req, res) => { - let message = `Poor ${req.params.id} is scheit.`; - res.send(message); + console.log('delete route hit'); + let id = req.params.id; + fs.unlinkSync(__dirname + `/../data/${id}.json`) + res.send(`File ${id}.json successfully deleted`) }) app.get('/*', (req, res) => { diff --git a/package.json b/package.json new file mode 100644 index 0000000..d0747cf --- /dev/null +++ b/package.json @@ -0,0 +1,40 @@ +{ + "name": "man-united", + "version": "1.0.0", + "description": "Class Projest- Router", + "main": "index.js", + "directories": { + "test": "mocha" + }, + "scripts": { + "test": "mocha", + "start": "node index.js" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/drewferris/man-united-router.git" + }, + "keywords": [ + "router", + "server" + ], + "author": "Drew Ferris", + "license": "ISC", + "bugs": { + "url": "https://github.com/drewferris/man-united-router/issues" + }, + "homepage": "https://github.com/drewferris/man-united-router#readme", + "devDependencies": { + "chai": "^3.5.0", + "chai-http": "^2.0.1", + "gulp": "^3.9.1", + "gulp-eslint": "^2.0.0", + "gulp-mocha": "^2.2.0", + "gulp-watch": "^4.3.5", + "mocha": "^2.4.5" + }, + "dependencies": { + "body-parser": "^1.15.1", + "express": "^4.13.4" + } +} diff --git a/test/rest_api_test.js b/test/rest_api_test.js new file mode 100644 index 0000000..4b4f1fd --- /dev/null +++ b/test/rest_api_test.js @@ -0,0 +1,97 @@ +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const expect = chai.expect; +chai.use(chaiHTTP); +const request = chai.request; +const fs = require('fs'); + +let fileArr = []; +let newFileArr = []; +let newDeletedFileArr = []; +let newFileOne; +let fileOne; + + + +require(__dirname + '/../lib/server'); + +describe('rest api tests', () => { + before('read files in data', (done) => { + fileArr = fs.readdirSync(__dirname + '/../data'); + done(); + }); + it('should post correctly', (done) => { + request('localhost:3000') + .post('/rooney') + .send('{"test": "test"}') + .end((err, res) => { + newDeletedFileArr = fs.readdirSync(__dirname + '/../data'); + expect(err).to.eql(null); + expect(newDeletedFileArr).to.eql(fileArr); + expect(res).to.have.status(200); + done(); + }); + }); + it('should delete correctly', (done) => { + request('localhost:3000') + .delete('/rooney/8') + .end((err, res) => { + newFileArr = fs.readdirSync(__dirname + '/../data'); + expect(err).to.eql(null); + expect(newFileArr).to.not.eql(fileArr); + expect(res).to.have.status(200); + done(); + }); + }); + it('should respond to a failed test', (done) => { + request('localhost:3000') + .get('/fail') + .end((err, res) => { + expect(err).to.not.eql(null); + expect(res).to.have.status(404); + done(); + }); + }); + it('should process get request correctly', (done) => { + request('localhost:3000') + .get('/rooney') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.text).to.eql('GLORY MAN UNITED'); + done(); + }); + }); + + it('should turn special id get request to uppercase', (done) => { + request('localhost:3000') + .get('/rooney/wayne') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.text).to.eql('{"message":"WAYNE"}'); + done(); + }); + }); + +describe('put tests', () => { + before('read file', () => { + fileOne = fs.readFileSync(__dirname + '/../data/1.json').toString(); + }) + it('should put properly', (done) => + { + request('localhost:3000') + .put('/rooney/1') + .send('{"test": "test"}') + .end((err, res) => { + newFileOne = fs.readFileSync(__dirname + '/../data/1.json').toString(); + expect(err).to.eql(null); + expect(newFileOne).to.not.eql(fileOne); + expect(res).to.have.status(200); + done(); + }); + }); +}) +}) From cf34eb0be2a11683ed120765e55ace7839753660 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 09:49:13 -0700 Subject: [PATCH 05/65] setup almost done --- .gitignore | 1 + package.json | 4 +++- schema/rooney.js | 0 lib/server.js => server.js | 6 ++++++ test/rest_api_test.js | 2 +- 5 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 schema/rooney.js rename lib/server.js => server.js (92%) diff --git a/.gitignore b/.gitignore index 15de390..a833cdc 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ node_modules data +db diff --git a/package.json b/package.json index d0747cf..fb446a0 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,9 @@ "gulp-eslint": "^2.0.0", "gulp-mocha": "^2.2.0", "gulp-watch": "^4.3.5", - "mocha": "^2.4.5" + "mocha": "^2.4.5", + "mongoose": "^4.4.19", + "morgan": "^1.7.0" }, "dependencies": { "body-parser": "^1.15.1", diff --git a/schema/rooney.js b/schema/rooney.js new file mode 100644 index 0000000..e69de29 diff --git a/lib/server.js b/server.js similarity index 92% rename from lib/server.js rename to server.js index 711f39e..dc74e72 100644 --- a/lib/server.js +++ b/server.js @@ -7,6 +7,12 @@ const jsonParser = bodyParser.json(); const rooneyRouter = express.Router(); const fs = require('fs'); const stream = require('stream'); +const mongoose = require('mongoose'); +const morgan = require('morgan'); + +app.use(morgan('dev')); + +mongoose.connect('mongodb://localhost/dev_db'); const dir = __dirname + '/../data'; if (!fs.existsSync(dir)) { diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 4b4f1fd..0da7592 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -15,7 +15,7 @@ let fileOne; -require(__dirname + '/../lib/server'); +require(__dirname + '/../server'); describe('rest api tests', () => { before('read files in data', (done) => { From f181fede63bf04dd3c92d416bac9206be28ac67b Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 09:51:55 -0700 Subject: [PATCH 06/65] made rooney file in schema --- schema/rooney.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/schema/rooney.js b/schema/rooney.js index e69de29..4cc15f9 100644 --- a/schema/rooney.js +++ b/schema/rooney.js @@ -0,0 +1,9 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const Rooney = new mongoose.Schema({ + name: String +}); + +module.exports = mongoose.model('rooney', Rooney); From c59ff6766969c1ff2190982ca1e04fedd9c445aa Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:02:12 -0700 Subject: [PATCH 07/65] made rooney get request --- server.js | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/server.js b/server.js index dc74e72..e319e2c 100644 --- a/server.js +++ b/server.js @@ -4,6 +4,7 @@ const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const jsonParser = bodyParser.json(); +const Rooney = require('./schema/rooney'); const rooneyRouter = express.Router(); const fs = require('fs'); const stream = require('stream'); @@ -24,8 +25,14 @@ rooneyRouter.use(jsonParser); app.use('/rooney', rooneyRouter); rooneyRouter.get('/', (req, res) => { - res.send('GLORY MAN UNITED') -}) + // res.send('GLORY MAN UNITED') + Rooney.find({}, (err,data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); rooneyRouter.get('/:id', (req,res) => { let id = req.params.id; From 09e6a017a28f83fe310645d602644c22919cc4cb Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:12:25 -0700 Subject: [PATCH 08/65] made rooney post --- server.js | 44 +++++++++++++++++++++++--------------------- 1 file changed, 23 insertions(+), 21 deletions(-) diff --git a/server.js b/server.js index e319e2c..0f0f828 100644 --- a/server.js +++ b/server.js @@ -34,28 +34,30 @@ rooneyRouter.get('/', (req, res) => { }); }); -rooneyRouter.get('/:id', (req,res) => { - let id = req.params.id; - console.log('hello from id get route'); - res.json({message: id.toUpperCase()}) -}) - -rooneyRouter.post('/', (req, res) => { - console.log('hit post route'); - let rooney = ''; - req.on('data', (data) => { - rooney += data.toString(); +rooneyRouter.post('/', jsonParser, (req, res) => { + let newRooney = new Rooney(req.body); + newRooney.save((err, data) => { + if(err) return res.json({ + message: err.message }); - req.on('end', () => { - let nextFile = (fs.readdirSync(dir)).length +1 - let file = fs.createWriteStream(dir + '/' + nextFile + '.json') - var bufferStream = new stream.PassThrough(); - let inBuf = new Buffer(rooney); - bufferStream.end(inBuf); - bufferStream.pipe(file); - res.json({message: 'Wrote a new file'}); - }) -}) + res.json(data); + }); + // console.log('hit post route'); + // let rooney = ''; + // req.on('data', (data) => { + // rooney += data.toString(); + // }); + // req.on('end', () => { + // let nextFile = (fs.readdirSync(dir)).length +1 + // let file = fs.createWriteStream(dir + '/' + nextFile + '.json') + // var bufferStream = new stream.PassThrough(); + // let inBuf = new Buffer(rooney); + // bufferStream.end(inBuf); + // bufferStream.pipe(file); + // res.json({message: 'Wrote a new file'}); + // }) + +}); rooneyRouter.put('/:id', (req, res) => { console.log('rooneyRouter put hit'); From 84c3476171885416ec4a10be87d337170793ff09 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:16:28 -0700 Subject: [PATCH 09/65] made rooney put --- server.js | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/server.js b/server.js index 0f0f828..cd3a007 100644 --- a/server.js +++ b/server.js @@ -59,13 +59,17 @@ rooneyRouter.post('/', jsonParser, (req, res) => { }); -rooneyRouter.put('/:id', (req, res) => { - console.log('rooneyRouter put hit'); - let id = req.params.id; - var stream = fs.createWriteStream(dir + '/' + id + '.json'); - req.pipe(stream); - res.send('Updated Rooney' + '\n'); -}) +rooneyRouter.put('/', jsonParser, (req, res) => { + Rooney.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); + // console.log('rooneyRouter put hit'); + // let id = req.params.id; + // var stream = fs.createWriteStream(dir + '/' + id + '.json'); + // req.pipe(stream); + // res.send('Updated Rooney' + '\n'); +}); rooneyRouter.delete('/:id', (req, res) => { console.log('delete route hit'); From b58d92cd0aace14eb6905bcbb39ce63dcb9dfc27 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:21:22 -0700 Subject: [PATCH 10/65] made rooney delete --- server.js | 38 +++++++++++--------------------------- 1 file changed, 11 insertions(+), 27 deletions(-) diff --git a/server.js b/server.js index cd3a007..61a43ee 100644 --- a/server.js +++ b/server.js @@ -25,7 +25,6 @@ rooneyRouter.use(jsonParser); app.use('/rooney', rooneyRouter); rooneyRouter.get('/', (req, res) => { - // res.send('GLORY MAN UNITED') Rooney.find({}, (err,data) => { if(err) return res.json({ message: err.message @@ -42,21 +41,6 @@ rooneyRouter.post('/', jsonParser, (req, res) => { }); res.json(data); }); - // console.log('hit post route'); - // let rooney = ''; - // req.on('data', (data) => { - // rooney += data.toString(); - // }); - // req.on('end', () => { - // let nextFile = (fs.readdirSync(dir)).length +1 - // let file = fs.createWriteStream(dir + '/' + nextFile + '.json') - // var bufferStream = new stream.PassThrough(); - // let inBuf = new Buffer(rooney); - // bufferStream.end(inBuf); - // bufferStream.pipe(file); - // res.json({message: 'Wrote a new file'}); - // }) - }); rooneyRouter.put('/', jsonParser, (req, res) => { @@ -64,19 +48,19 @@ rooneyRouter.put('/', jsonParser, (req, res) => { if(err) return res.json({message: err.message}); res.json(data); }); - // console.log('rooneyRouter put hit'); - // let id = req.params.id; - // var stream = fs.createWriteStream(dir + '/' + id + '.json'); - // req.pipe(stream); - // res.send('Updated Rooney' + '\n'); }); -rooneyRouter.delete('/:id', (req, res) => { - console.log('delete route hit'); - let id = req.params.id; - fs.unlinkSync(__dirname + `/../data/${id}.json`) - res.send(`File ${id}.json successfully deleted`) -}) +rooneyRouter.delete('/:id', jsonParser, (req, res) => { + let _id = req.params.id; + Rooney.findOneAndRemove({_id}, null, (err,data) => { + if(err) return res.json({message: err.message}); + res.send('deleted Rooney with id ' + req.params.id); + }); + // console.log('delete route hit'); + // let id = req.params.id; + // fs.unlinkSync(__dirname + `/../data/${id}.json`) + // res.send(`File ${id}.json successfully deleted`) +}); app.get('/*', (req, res) => { res.status(404).json({msg: 'not found'}) From ebbb76fa1f760ee3b9e50003d2ca3bf383652fef Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:23:18 -0700 Subject: [PATCH 11/65] deleleted consts in server --- server.js | 17 ++--------------- 1 file changed, 2 insertions(+), 15 deletions(-) diff --git a/server.js b/server.js index 61a43ee..b027891 100644 --- a/server.js +++ b/server.js @@ -6,8 +6,6 @@ const bodyParser = require('body-parser'); const jsonParser = bodyParser.json(); const Rooney = require('./schema/rooney'); const rooneyRouter = express.Router(); -const fs = require('fs'); -const stream = require('stream'); const mongoose = require('mongoose'); const morgan = require('morgan'); @@ -15,11 +13,6 @@ app.use(morgan('dev')); mongoose.connect('mongodb://localhost/dev_db'); -const dir = __dirname + '/../data'; -if (!fs.existsSync(dir)) { - fs.mkdirSync(dir); -} - rooneyRouter.use(jsonParser); app.use('/rooney', rooneyRouter); @@ -56,16 +49,10 @@ rooneyRouter.delete('/:id', jsonParser, (req, res) => { if(err) return res.json({message: err.message}); res.send('deleted Rooney with id ' + req.params.id); }); - // console.log('delete route hit'); - // let id = req.params.id; - // fs.unlinkSync(__dirname + `/../data/${id}.json`) - // res.send(`File ${id}.json successfully deleted`) }); app.get('/*', (req, res) => { - res.status(404).json({msg: 'not found'}) -}) - - + res.status(404).json({msg: 'not found'}); +}); app.listen(3000, () => console.log('up on 3000')); From 1a979a9ec4c7cbace57711f2b142f6ff672b56c7 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:33:27 -0700 Subject: [PATCH 12/65] made messi schema --- schema/messi.js | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 schema/messi.js diff --git a/schema/messi.js b/schema/messi.js new file mode 100644 index 0000000..d36f92c --- /dev/null +++ b/schema/messi.js @@ -0,0 +1,9 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const Messi = new mongoose.Schema({ + name: String +}); + +module.exports = mongoose.model('messi', Messi); From 838c1a87fcbd65912572ad2a80a163c4a95f2271 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:39:30 -0700 Subject: [PATCH 13/65] made messi router setup --- server.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/server.js b/server.js index b027891..edf051f 100644 --- a/server.js +++ b/server.js @@ -5,7 +5,9 @@ const app = express(); const bodyParser = require('body-parser'); const jsonParser = bodyParser.json(); const Rooney = require('./schema/rooney'); +const Messi = require('./schema/messi'); const rooneyRouter = express.Router(); +const messiRouter = express.Router(); const mongoose = require('mongoose'); const morgan = require('morgan'); @@ -14,8 +16,10 @@ app.use(morgan('dev')); mongoose.connect('mongodb://localhost/dev_db'); rooneyRouter.use(jsonParser); +messiRouter.use(jsonParser); app.use('/rooney', rooneyRouter); +app.use('/messi', messiRouter); rooneyRouter.get('/', (req, res) => { Rooney.find({}, (err,data) => { From bdc638096304d0590b5eef96fb8d6b5790d00308 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:42:27 -0700 Subject: [PATCH 14/65] made messi router get request --- server.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/server.js b/server.js index edf051f..3b043b5 100644 --- a/server.js +++ b/server.js @@ -55,6 +55,15 @@ rooneyRouter.delete('/:id', jsonParser, (req, res) => { }); }); +messiRouter.get('/', (req, res) => { + Messi.find({}, (err, data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + app.get('/*', (req, res) => { res.status(404).json({msg: 'not found'}); }); From 3e8fd75b81d26a986024fe10a712368f1810947d Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:47:40 -0700 Subject: [PATCH 15/65] made messi router post request --- server.js | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/server.js b/server.js index 3b043b5..3f44efa 100644 --- a/server.js +++ b/server.js @@ -64,6 +64,14 @@ messiRouter.get('/', (req, res) => { }); }); +messiRouter.post('/', (req, res) => { + let newMessi = new Messi(req.body); + newMessi.save((err, data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); +}); + app.get('/*', (req, res) => { res.status(404).json({msg: 'not found'}); }); From 4dd07b1a9cae9e5a0f4c3df2a0a992ef32cb2621 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 10:53:19 -0700 Subject: [PATCH 16/65] made messi router put request --- server.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 3f44efa..ecd7479 100644 --- a/server.js +++ b/server.js @@ -64,7 +64,7 @@ messiRouter.get('/', (req, res) => { }); }); -messiRouter.post('/', (req, res) => { +messiRouter.post('/', jsonParser, (req, res) => { let newMessi = new Messi(req.body); newMessi.save((err, data) => { if(err) return res.json({message: err.message}); @@ -72,6 +72,13 @@ messiRouter.post('/', (req, res) => { }); }); +messiRouter.put('/', jsonParser, (req, res) => { + Messi.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); +}); + app.get('/*', (req, res) => { res.status(404).json({msg: 'not found'}); }); From d8036106f22e5abae493d6902518856d3c58b37c Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 11:13:45 -0700 Subject: [PATCH 17/65] made messi router delete request --- server.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index ecd7479..c9df0ef 100644 --- a/server.js +++ b/server.js @@ -79,8 +79,16 @@ messiRouter.put('/', jsonParser, (req, res) => { }); }); +messiRouter.delete('/:id', jsonParser, (req, res) => { + let _id = req.params.id; + Messi.findOneAndRemove({_id}, null, (err,data) => { + if(err) return res.json({message: err.message}); + res.send('deleted Messi with id ' + req.params.id); + }); +}); + app.get('/*', (req, res) => { res.status(404).json({msg: 'not found'}); }); -app.listen(3000, () => console.log('up on 3000')); +app.listen(6969, () => console.log('up on 6969 baby, server way up')); From 9ff5d1e86695ae131082565cefeced222704f7b6 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 11:22:37 -0700 Subject: [PATCH 18/65] made rooney router now a man united player router --- schema/man_United_Player.js | 9 +++++++++ schema/rooney.js | 9 --------- 2 files changed, 9 insertions(+), 9 deletions(-) create mode 100644 schema/man_United_Player.js delete mode 100644 schema/rooney.js diff --git a/schema/man_United_Player.js b/schema/man_United_Player.js new file mode 100644 index 0000000..252a04b --- /dev/null +++ b/schema/man_United_Player.js @@ -0,0 +1,9 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const ManUnitedPlayer = new mongoose.Schema({ + name: String +}); + +module.exports = mongoose.model('manUnitedPlayer', ManUnitedPlayer); diff --git a/schema/rooney.js b/schema/rooney.js deleted file mode 100644 index 4cc15f9..0000000 --- a/schema/rooney.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const mongoose = require('mongoose'); - -const Rooney = new mongoose.Schema({ - name: String -}); - -module.exports = mongoose.model('rooney', Rooney); From e048b9ca610574732f4851dc2827d7ee9beaee56 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 11:39:54 -0700 Subject: [PATCH 19/65] made messi router a barca player router --- schema/barca_Player.js | 9 +++++++ schema/messi.js | 9 ------- server.js | 56 +++++++++++++++++++++--------------------- 3 files changed, 37 insertions(+), 37 deletions(-) create mode 100644 schema/barca_Player.js delete mode 100644 schema/messi.js diff --git a/schema/barca_Player.js b/schema/barca_Player.js new file mode 100644 index 0000000..4399f33 --- /dev/null +++ b/schema/barca_Player.js @@ -0,0 +1,9 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const BarcaPlayer = new mongoose.Schema({ + name: String +}); + +module.exports = mongoose.model('barca', BarcaPlayer); diff --git a/schema/messi.js b/schema/messi.js deleted file mode 100644 index d36f92c..0000000 --- a/schema/messi.js +++ /dev/null @@ -1,9 +0,0 @@ -'use strict'; - -const mongoose = require('mongoose'); - -const Messi = new mongoose.Schema({ - name: String -}); - -module.exports = mongoose.model('messi', Messi); diff --git a/server.js b/server.js index c9df0ef..7c4f1cb 100644 --- a/server.js +++ b/server.js @@ -4,10 +4,10 @@ const express = require('express'); const app = express(); const bodyParser = require('body-parser'); const jsonParser = bodyParser.json(); -const Rooney = require('./schema/rooney'); -const Messi = require('./schema/messi'); -const rooneyRouter = express.Router(); -const messiRouter = express.Router(); +const ManUnitedPlayer = require('./schema/man_United_Player'); +const BarcaPlayer = require('./schema/barca_Player'); +const manUnitedRouter = express.Router(); +const barcaRouter = express.Router(); const mongoose = require('mongoose'); const morgan = require('morgan'); @@ -15,14 +15,14 @@ app.use(morgan('dev')); mongoose.connect('mongodb://localhost/dev_db'); -rooneyRouter.use(jsonParser); -messiRouter.use(jsonParser); +manUnitedRouter.use(jsonParser); +barcaRouter.use(jsonParser); -app.use('/rooney', rooneyRouter); -app.use('/messi', messiRouter); +app.use('/manUnited', manUnitedRouter); +app.use('/barca', barcaRouter); -rooneyRouter.get('/', (req, res) => { - Rooney.find({}, (err,data) => { +manUnitedRouter.get('/', (req, res) => { + ManUnitedPlayer.find({}, (err,data) => { if(err) return res.json({ message: err.message }); @@ -30,9 +30,9 @@ rooneyRouter.get('/', (req, res) => { }); }); -rooneyRouter.post('/', jsonParser, (req, res) => { - let newRooney = new Rooney(req.body); - newRooney.save((err, data) => { +manUnitedRouter.post('/', jsonParser, (req, res) => { + let newManUnitedPlayer = new ManUnitedPlayer(req.body); + newManUnitedPlayer.save((err, data) => { if(err) return res.json({ message: err.message }); @@ -40,23 +40,23 @@ rooneyRouter.post('/', jsonParser, (req, res) => { }); }); -rooneyRouter.put('/', jsonParser, (req, res) => { - Rooney.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { +manUnitedRouter.put('/', jsonParser, (req, res) => { + ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { if(err) return res.json({message: err.message}); res.json(data); }); }); -rooneyRouter.delete('/:id', jsonParser, (req, res) => { +manUnitedRouter.delete('/:id', jsonParser, (req, res) => { let _id = req.params.id; - Rooney.findOneAndRemove({_id}, null, (err,data) => { + ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { if(err) return res.json({message: err.message}); - res.send('deleted Rooney with id ' + req.params.id); + res.send('deleted Man United Player with id ' + req.params.id); }); }); -messiRouter.get('/', (req, res) => { - Messi.find({}, (err, data) => { +barcaRouter.get('/', (req, res) => { + BarcaPlayer.find({}, (err, data) => { if(err) return res.json({ message: err.message }); @@ -64,26 +64,26 @@ messiRouter.get('/', (req, res) => { }); }); -messiRouter.post('/', jsonParser, (req, res) => { - let newMessi = new Messi(req.body); - newMessi.save((err, data) => { +barcaRouter.post('/', jsonParser, (req, res) => { + let newBarcaPlayer = new BarcaPlayer(req.body); + newBarcaPlayer.save((err, data) => { if(err) return res.json({message: err.message}); res.json(data); }); }); -messiRouter.put('/', jsonParser, (req, res) => { - Messi.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { +barcaRouter.put('/', jsonParser, (req, res) => { + BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { if(err) return res.json({message: err.message}); res.json(data); }); }); -messiRouter.delete('/:id', jsonParser, (req, res) => { +barcaRouter.delete('/:id', jsonParser, (req, res) => { let _id = req.params.id; - Messi.findOneAndRemove({_id}, null, (err,data) => { + BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { if(err) return res.json({message: err.message}); - res.send('deleted Messi with id ' + req.params.id); + res.send('deleted Barca Player with id ' + req.params.id); }); }); From 39e0650b3092cc54616eb698ea44e9b8baab7da9 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 11:47:17 -0700 Subject: [PATCH 20/65] added position property to barca players --- schema/barca_Player.js | 3 ++- schema/man_United_Player.js | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/schema/barca_Player.js b/schema/barca_Player.js index 4399f33..0c28532 100644 --- a/schema/barca_Player.js +++ b/schema/barca_Player.js @@ -3,7 +3,8 @@ const mongoose = require('mongoose'); const BarcaPlayer = new mongoose.Schema({ - name: String + name: String, + position: String }); module.exports = mongoose.model('barca', BarcaPlayer); diff --git a/schema/man_United_Player.js b/schema/man_United_Player.js index 252a04b..d1eb732 100644 --- a/schema/man_United_Player.js +++ b/schema/man_United_Player.js @@ -3,7 +3,8 @@ const mongoose = require('mongoose'); const ManUnitedPlayer = new mongoose.Schema({ - name: String + name: String, + position: String }); module.exports = mongoose.model('manUnitedPlayer', ManUnitedPlayer); From 7a8ff4053dfff8075faea525dc7ae722b31eb020 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 12:00:57 -0700 Subject: [PATCH 21/65] added number and goals property to barca players --- schema/barca_Player.js | 4 +++- schema/man_United_Player.js | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/schema/barca_Player.js b/schema/barca_Player.js index 0c28532..b44d552 100644 --- a/schema/barca_Player.js +++ b/schema/barca_Player.js @@ -4,7 +4,9 @@ const mongoose = require('mongoose'); const BarcaPlayer = new mongoose.Schema({ name: String, - position: String + position: String, + number: Number, + goals: Number }); module.exports = mongoose.model('barca', BarcaPlayer); diff --git a/schema/man_United_Player.js b/schema/man_United_Player.js index d1eb732..4850abb 100644 --- a/schema/man_United_Player.js +++ b/schema/man_United_Player.js @@ -4,7 +4,9 @@ const mongoose = require('mongoose'); const ManUnitedPlayer = new mongoose.Schema({ name: String, - position: String + position: String, + number: Number, + goals: Number }); module.exports = mongoose.model('manUnitedPlayer', ManUnitedPlayer); From d4c3d719468d31ad537a515047921a131aeb0b18 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 18:40:02 -0700 Subject: [PATCH 22/65] added functionality to add total goals for each collection --- server.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/server.js b/server.js index 7c4f1cb..a15ce1f 100644 --- a/server.js +++ b/server.js @@ -87,6 +87,29 @@ barcaRouter.delete('/:id', jsonParser, (req, res) => { }); }); +manUnitedRouter.get('/mostGoals', (req, res, next) => { + // ManUnitedPlayer.find({}, (err, player)=>{ + // if (err) return next(err); + // console.log(player); + // var totalManUGoalsScored = player.reduce((acc, player) => { + // return acc += player.goals; + // + // }, 0); + // console.log(totalManUGoalsScored); + // res.json(totalManUGoalsScored); + // }); + BarcaPlayer.find({}, (err, player)=>{ + if (err) return next(err); + console.log(player); + var totalBarcaGoalsScored = player.reduce((acc, player) => { + return acc += player.goals; + + }, 0); + console.log(totalBarcaGoalsScored); + res.json(totalBarcaGoalsScored); + }); +}); + app.get('/*', (req, res) => { res.status(404).json({msg: 'not found'}); }); From 75cd3723c897487bd42fdf60745f0eb1bf44d419 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 19:13:51 -0700 Subject: [PATCH 23/65] added most goals path and is working --- server.js | 35 +++++++++++++++++++++-------------- 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/server.js b/server.js index a15ce1f..98a8366 100644 --- a/server.js +++ b/server.js @@ -88,26 +88,33 @@ barcaRouter.delete('/:id', jsonParser, (req, res) => { }); manUnitedRouter.get('/mostGoals', (req, res, next) => { - // ManUnitedPlayer.find({}, (err, player)=>{ - // if (err) return next(err); - // console.log(player); - // var totalManUGoalsScored = player.reduce((acc, player) => { - // return acc += player.goals; - // - // }, 0); - // console.log(totalManUGoalsScored); - // res.json(totalManUGoalsScored); - // }); + let teamGoalArray = []; + + ManUnitedPlayer.find({}, (err, player)=>{ + if (err) return next(err); + let totalManUGoalsScored = player.reduce((acc, player) => { + return acc += player.goals; + }, 0); + teamGoalArray.push(totalManUGoalsScored); + console.log(teamGoalArray); + }); BarcaPlayer.find({}, (err, player)=>{ if (err) return next(err); - console.log(player); - var totalBarcaGoalsScored = player.reduce((acc, player) => { + let totalBarcaGoalsScored = player.reduce((acc, player) => { return acc += player.goals; - }, 0); console.log(totalBarcaGoalsScored); - res.json(totalBarcaGoalsScored); + teamGoalArray.push(totalBarcaGoalsScored); + + if (teamGoalArray[1] > teamGoalArray[0]) { + res.json("Barcalona players scored " + teamGoalArray[1] + " goals, which is more than Man United Players.") + } else if (teamGoalArray[1] < teamGoalArray[0]) { + res.json("Man United players scored " + teamGoalArray[0] + " goals, which is more than Barcalona Players.") + } else { + res.json("They scored the same amount.") + } }); + }); app.get('/*', (req, res) => { From 9caaa86f3011f5f9e2de07f0874ae066d936d03d Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 19:25:07 -0700 Subject: [PATCH 24/65] started making manUnitedRoute file and modifying server and added errorhandling file in lib --- lib/error_handling.js | 5 +++++ routes/barca_routes.js | 0 routes/man_united_routes.js | 7 +++++++ server.js | 29 +++++++++++++++-------------- 4 files changed, 27 insertions(+), 14 deletions(-) create mode 100644 lib/error_handling.js create mode 100644 routes/barca_routes.js create mode 100644 routes/man_united_routes.js diff --git a/lib/error_handling.js b/lib/error_handling.js new file mode 100644 index 0000000..5e297f9 --- /dev/null +++ b/lib/error_handling.js @@ -0,0 +1,5 @@ +'use strict'; + +module.exports = function(err, req, res, next) { + res.status(500).json({message: err.message}); +}; diff --git a/routes/barca_routes.js b/routes/barca_routes.js new file mode 100644 index 0000000..e69de29 diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js new file mode 100644 index 0000000..708aa42 --- /dev/null +++ b/routes/man_united_routes.js @@ -0,0 +1,7 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('bodyParser').json(); +const ManUnitedPlayer = require('../schema/man_United_Player'); + +const router = module.exports = exports = express.Router(); diff --git a/server.js b/server.js index 98a8366..bcaa97f 100644 --- a/server.js +++ b/server.js @@ -2,21 +2,22 @@ const express = require('express'); const app = express(); -const bodyParser = require('body-parser'); -const jsonParser = bodyParser.json(); -const ManUnitedPlayer = require('./schema/man_United_Player'); -const BarcaPlayer = require('./schema/barca_Player'); -const manUnitedRouter = express.Router(); -const barcaRouter = express.Router(); const mongoose = require('mongoose'); const morgan = require('morgan'); +const errorHandler =require('./lib/error_handling'); +// const bodyParser = require('body-parser').json(); +// const ManUnitedPlayer = require('./schema/man_United_Player'); +// const BarcaPlayer = require('./schema/barca_Player'); +// const manUnitedRouter = express.Router(); +// const barcaRouter = express.Router(); + app.use(morgan('dev')); mongoose.connect('mongodb://localhost/dev_db'); -manUnitedRouter.use(jsonParser); -barcaRouter.use(jsonParser); +manUnitedRouter.use(bodyParser); +barcaRouter.use(bodyParser); app.use('/manUnited', manUnitedRouter); app.use('/barca', barcaRouter); @@ -30,7 +31,7 @@ manUnitedRouter.get('/', (req, res) => { }); }); -manUnitedRouter.post('/', jsonParser, (req, res) => { +manUnitedRouter.post('/', bodyParser, (req, res) => { let newManUnitedPlayer = new ManUnitedPlayer(req.body); newManUnitedPlayer.save((err, data) => { if(err) return res.json({ @@ -40,14 +41,14 @@ manUnitedRouter.post('/', jsonParser, (req, res) => { }); }); -manUnitedRouter.put('/', jsonParser, (req, res) => { +manUnitedRouter.put('/', bodyParser, (req, res) => { ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { if(err) return res.json({message: err.message}); res.json(data); }); }); -manUnitedRouter.delete('/:id', jsonParser, (req, res) => { +manUnitedRouter.delete('/:id', bodyParser, (req, res) => { let _id = req.params.id; ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { if(err) return res.json({message: err.message}); @@ -64,7 +65,7 @@ barcaRouter.get('/', (req, res) => { }); }); -barcaRouter.post('/', jsonParser, (req, res) => { +barcaRouter.post('/', bodyParser, (req, res) => { let newBarcaPlayer = new BarcaPlayer(req.body); newBarcaPlayer.save((err, data) => { if(err) return res.json({message: err.message}); @@ -72,14 +73,14 @@ barcaRouter.post('/', jsonParser, (req, res) => { }); }); -barcaRouter.put('/', jsonParser, (req, res) => { +barcaRouter.put('/', bodyParser, (req, res) => { BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { if(err) return res.json({message: err.message}); res.json(data); }); }); -barcaRouter.delete('/:id', jsonParser, (req, res) => { +barcaRouter.delete('/:id', bodyParser, (req, res) => { let _id = req.params.id; BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { if(err) return res.json({message: err.message}); From 8c6544862a3191546c2b37e7629b7cc83f4978e2 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 19:44:02 -0700 Subject: [PATCH 25/65] finished modularizing --- routes/barca_routes.js | 39 +++++++ routes/compare_route.js | 38 +++++++ routes/man_united_routes.js | 36 ++++++- server.js | 209 +++++++++++++++++++----------------- 4 files changed, 220 insertions(+), 102 deletions(-) create mode 100644 routes/compare_route.js diff --git a/routes/barca_routes.js b/routes/barca_routes.js index e69de29..ae04ff0 100644 --- a/routes/barca_routes.js +++ b/routes/barca_routes.js @@ -0,0 +1,39 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser').json(); +const BarcaPlayer = require('../schema/barca_Player'); + +const router = module.exports = exports = express.Router(); + +router.get('/', (req, res) => { + BarcaPlayer.find({}, (err, data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + +router.post('/', bodyParser, (req, res) => { + let newBarcaPlayer = new BarcaPlayer(req.body); + newBarcaPlayer.save((err, data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); +}); + +router.put('/', bodyParser, (req, res) => { + BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); +}); + +router.delete('/:id', bodyParser, (req, res) => { + let _id = req.params.id; + BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { + if(err) return res.json({message: err.message}); + res.send('deleted Barca Player with id ' + req.params.id); + }); +}); diff --git a/routes/compare_route.js b/routes/compare_route.js new file mode 100644 index 0000000..1cd9ddb --- /dev/null +++ b/routes/compare_route.js @@ -0,0 +1,38 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser').json(); +const BarcaPlayer = require('../schema/barca_Player'); +const ManUnitedPlayer = require('../schema/man_United_Player'); + +const router = module.exports = exports = express.Router(); + +router.get('/mostGoals', (req, res, next) => { + let teamGoalArray = []; + + ManUnitedPlayer.find({}, (err, player)=>{ + if (err) return next(err); + let totalManUGoalsScored = player.reduce((acc, player) => { + return acc += player.goals; + }, 0); + teamGoalArray.push(totalManUGoalsScored); + console.log(teamGoalArray); + }); + BarcaPlayer.find({}, (err, player)=>{ + if (err) return next(err); + let totalBarcaGoalsScored = player.reduce((acc, player) => { + return acc += player.goals; + }, 0); + console.log(totalBarcaGoalsScored); + teamGoalArray.push(totalBarcaGoalsScored); + + if (teamGoalArray[1] > teamGoalArray[0]) { + res.json("Barcalona players scored " + teamGoalArray[1] + " goals, which is more than Man United Players.") + } else if (teamGoalArray[1] < teamGoalArray[0]) { + res.json("Man United players scored " + teamGoalArray[0] + " goals, which is more than Barcalona Players.") + } else { + res.json("They scored the same amount.") + } + }); + +}); diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index 708aa42..4588dcb 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -1,7 +1,41 @@ 'use strict'; const express = require('express'); -const bodyParser = require('bodyParser').json(); +const bodyParser = require('body-parser').json(); const ManUnitedPlayer = require('../schema/man_United_Player'); const router = module.exports = exports = express.Router(); + +router.get('/', (req, res) => { + ManUnitedPlayer.find({}, (err,data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + +router.post('/', bodyParser, (req, res) => { + let newManUnitedPlayer = new ManUnitedPlayer(req.body); + newManUnitedPlayer.save((err, data) => { + if(err) return res.json({ + message: err.message + }); + res.json(data); + }); +}); + +router.put('/', bodyParser, (req, res) => { + ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { + if(err) return res.json({message: err.message}); + res.json(data); + }); +}); + +router.delete('/:id', bodyParser, (req, res) => { + let _id = req.params.id; + ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { + if(err) return res.json({message: err.message}); + res.send('deleted Man United Player with id ' + req.params.id); + }); +}); diff --git a/server.js b/server.js index bcaa97f..9c93092 100644 --- a/server.js +++ b/server.js @@ -10,116 +10,123 @@ const errorHandler =require('./lib/error_handling'); // const BarcaPlayer = require('./schema/barca_Player'); // const manUnitedRouter = express.Router(); // const barcaRouter = express.Router(); - +const dbPort = process.env.MONGOLAB_URI || 'mongodb://localhost/dev_db'; app.use(morgan('dev')); mongoose.connect('mongodb://localhost/dev_db'); -manUnitedRouter.use(bodyParser); -barcaRouter.use(bodyParser); +const manUnitedRouter = require('./routes/man_united_routes'); +const barcaRouter = require('./routes/barca_routes'); +const compareRouter = require('./routes/compare_route'); + +// manUnitedRouter.use(bodyParser); +// barcaRouter.use(bodyParser); app.use('/manUnited', manUnitedRouter); app.use('/barca', barcaRouter); - -manUnitedRouter.get('/', (req, res) => { - ManUnitedPlayer.find({}, (err,data) => { - if(err) return res.json({ - message: err.message - }); - res.json(data); - }); -}); - -manUnitedRouter.post('/', bodyParser, (req, res) => { - let newManUnitedPlayer = new ManUnitedPlayer(req.body); - newManUnitedPlayer.save((err, data) => { - if(err) return res.json({ - message: err.message - }); - res.json(data); - }); -}); - -manUnitedRouter.put('/', bodyParser, (req, res) => { - ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { - if(err) return res.json({message: err.message}); - res.json(data); - }); -}); - -manUnitedRouter.delete('/:id', bodyParser, (req, res) => { - let _id = req.params.id; - ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { - if(err) return res.json({message: err.message}); - res.send('deleted Man United Player with id ' + req.params.id); - }); +app.use('/compare', compareRouter); + +// manUnitedRouter.get('/', (req, res) => { +// ManUnitedPlayer.find({}, (err,data) => { +// if(err) return res.json({ +// message: err.message +// }); +// res.json(data); +// }); +// }); +// +// manUnitedRouter.post('/', bodyParser, (req, res) => { +// let newManUnitedPlayer = new ManUnitedPlayer(req.body); +// newManUnitedPlayer.save((err, data) => { +// if(err) return res.json({ +// message: err.message +// }); +// res.json(data); +// }); +// }); +// +// manUnitedRouter.put('/', bodyParser, (req, res) => { +// ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { +// if(err) return res.json({message: err.message}); +// res.json(data); +// }); +// }); +// +// manUnitedRouter.delete('/:id', bodyParser, (req, res) => { +// let _id = req.params.id; +// ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { +// if(err) return res.json({message: err.message}); +// res.send('deleted Man United Player with id ' + req.params.id); +// }); +// }); + +// barcaRouter.get('/', (req, res) => { +// BarcaPlayer.find({}, (err, data) => { +// if(err) return res.json({ +// message: err.message +// }); +// res.json(data); +// }); +// }); +// +// barcaRouter.post('/', bodyParser, (req, res) => { +// let newBarcaPlayer = new BarcaPlayer(req.body); +// newBarcaPlayer.save((err, data) => { +// if(err) return res.json({message: err.message}); +// res.json(data); +// }); +// }); +// +// barcaRouter.put('/', bodyParser, (req, res) => { +// BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { +// if(err) return res.json({message: err.message}); +// res.json(data); +// }); +// }); +// +// barcaRouter.delete('/:id', bodyParser, (req, res) => { +// let _id = req.params.id; +// BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { +// if(err) return res.json({message: err.message}); +// res.send('deleted Barca Player with id ' + req.params.id); +// }); +// }); + +// manUnitedRouter.get('/mostGoals', (req, res, next) => { +// let teamGoalArray = []; +// +// ManUnitedPlayer.find({}, (err, player)=>{ +// if (err) return next(err); +// let totalManUGoalsScored = player.reduce((acc, player) => { +// return acc += player.goals; +// }, 0); +// teamGoalArray.push(totalManUGoalsScored); +// console.log(teamGoalArray); +// }); +// BarcaPlayer.find({}, (err, player)=>{ +// if (err) return next(err); +// let totalBarcaGoalsScored = player.reduce((acc, player) => { +// return acc += player.goals; +// }, 0); +// console.log(totalBarcaGoalsScored); +// teamGoalArray.push(totalBarcaGoalsScored); +// +// if (teamGoalArray[1] > teamGoalArray[0]) { +// res.json("Barcalona players scored " + teamGoalArray[1] + " goals, which is more than Man United Players.") +// } else if (teamGoalArray[1] < teamGoalArray[0]) { +// res.json("Man United players scored " + teamGoalArray[0] + " goals, which is more than Barcalona Players.") +// } else { +// res.json("They scored the same amount.") +// } +// }); +// +// }); + +app.use((err, req, res, next) => { + res.status(500).json({message: err.message}); }); -barcaRouter.get('/', (req, res) => { - BarcaPlayer.find({}, (err, data) => { - if(err) return res.json({ - message: err.message - }); - res.json(data); - }); -}); - -barcaRouter.post('/', bodyParser, (req, res) => { - let newBarcaPlayer = new BarcaPlayer(req.body); - newBarcaPlayer.save((err, data) => { - if(err) return res.json({message: err.message}); - res.json(data); - }); -}); - -barcaRouter.put('/', bodyParser, (req, res) => { - BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { - if(err) return res.json({message: err.message}); - res.json(data); - }); -}); - -barcaRouter.delete('/:id', bodyParser, (req, res) => { - let _id = req.params.id; - BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { - if(err) return res.json({message: err.message}); - res.send('deleted Barca Player with id ' + req.params.id); - }); -}); - -manUnitedRouter.get('/mostGoals', (req, res, next) => { - let teamGoalArray = []; - - ManUnitedPlayer.find({}, (err, player)=>{ - if (err) return next(err); - let totalManUGoalsScored = player.reduce((acc, player) => { - return acc += player.goals; - }, 0); - teamGoalArray.push(totalManUGoalsScored); - console.log(teamGoalArray); - }); - BarcaPlayer.find({}, (err, player)=>{ - if (err) return next(err); - let totalBarcaGoalsScored = player.reduce((acc, player) => { - return acc += player.goals; - }, 0); - console.log(totalBarcaGoalsScored); - teamGoalArray.push(totalBarcaGoalsScored); - - if (teamGoalArray[1] > teamGoalArray[0]) { - res.json("Barcalona players scored " + teamGoalArray[1] + " goals, which is more than Man United Players.") - } else if (teamGoalArray[1] < teamGoalArray[0]) { - res.json("Man United players scored " + teamGoalArray[0] + " goals, which is more than Barcalona Players.") - } else { - res.json("They scored the same amount.") - } - }); - -}); - -app.get('/*', (req, res) => { - res.status(404).json({msg: 'not found'}); -}); +app.use(errorHandler); app.listen(6969, () => console.log('up on 6969 baby, server way up')); From 073ab8754f05c72374c0812b9a341faa7a31697c Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 22:41:48 -0700 Subject: [PATCH 26/65] finished deleting old commented out code in server and started tests --- server.js | 105 +----------------------------------------- test/rest_api_test.js | 93 ++----------------------------------- 2 files changed, 5 insertions(+), 193 deletions(-) diff --git a/server.js b/server.js index 9c93092..fc66163 100644 --- a/server.js +++ b/server.js @@ -5,11 +5,7 @@ const app = express(); const mongoose = require('mongoose'); const morgan = require('morgan'); const errorHandler =require('./lib/error_handling'); -// const bodyParser = require('body-parser').json(); -// const ManUnitedPlayer = require('./schema/man_United_Player'); -// const BarcaPlayer = require('./schema/barca_Player'); -// const manUnitedRouter = express.Router(); -// const barcaRouter = express.Router(); + const dbPort = process.env.MONGOLAB_URI || 'mongodb://localhost/dev_db'; app.use(morgan('dev')); @@ -20,109 +16,10 @@ const manUnitedRouter = require('./routes/man_united_routes'); const barcaRouter = require('./routes/barca_routes'); const compareRouter = require('./routes/compare_route'); -// manUnitedRouter.use(bodyParser); -// barcaRouter.use(bodyParser); - app.use('/manUnited', manUnitedRouter); app.use('/barca', barcaRouter); app.use('/compare', compareRouter); -// manUnitedRouter.get('/', (req, res) => { -// ManUnitedPlayer.find({}, (err,data) => { -// if(err) return res.json({ -// message: err.message -// }); -// res.json(data); -// }); -// }); -// -// manUnitedRouter.post('/', bodyParser, (req, res) => { -// let newManUnitedPlayer = new ManUnitedPlayer(req.body); -// newManUnitedPlayer.save((err, data) => { -// if(err) return res.json({ -// message: err.message -// }); -// res.json(data); -// }); -// }); -// -// manUnitedRouter.put('/', bodyParser, (req, res) => { -// ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { -// if(err) return res.json({message: err.message}); -// res.json(data); -// }); -// }); -// -// manUnitedRouter.delete('/:id', bodyParser, (req, res) => { -// let _id = req.params.id; -// ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { -// if(err) return res.json({message: err.message}); -// res.send('deleted Man United Player with id ' + req.params.id); -// }); -// }); - -// barcaRouter.get('/', (req, res) => { -// BarcaPlayer.find({}, (err, data) => { -// if(err) return res.json({ -// message: err.message -// }); -// res.json(data); -// }); -// }); -// -// barcaRouter.post('/', bodyParser, (req, res) => { -// let newBarcaPlayer = new BarcaPlayer(req.body); -// newBarcaPlayer.save((err, data) => { -// if(err) return res.json({message: err.message}); -// res.json(data); -// }); -// }); -// -// barcaRouter.put('/', bodyParser, (req, res) => { -// BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { -// if(err) return res.json({message: err.message}); -// res.json(data); -// }); -// }); -// -// barcaRouter.delete('/:id', bodyParser, (req, res) => { -// let _id = req.params.id; -// BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { -// if(err) return res.json({message: err.message}); -// res.send('deleted Barca Player with id ' + req.params.id); -// }); -// }); - -// manUnitedRouter.get('/mostGoals', (req, res, next) => { -// let teamGoalArray = []; -// -// ManUnitedPlayer.find({}, (err, player)=>{ -// if (err) return next(err); -// let totalManUGoalsScored = player.reduce((acc, player) => { -// return acc += player.goals; -// }, 0); -// teamGoalArray.push(totalManUGoalsScored); -// console.log(teamGoalArray); -// }); -// BarcaPlayer.find({}, (err, player)=>{ -// if (err) return next(err); -// let totalBarcaGoalsScored = player.reduce((acc, player) => { -// return acc += player.goals; -// }, 0); -// console.log(totalBarcaGoalsScored); -// teamGoalArray.push(totalBarcaGoalsScored); -// -// if (teamGoalArray[1] > teamGoalArray[0]) { -// res.json("Barcalona players scored " + teamGoalArray[1] + " goals, which is more than Man United Players.") -// } else if (teamGoalArray[1] < teamGoalArray[0]) { -// res.json("Man United players scored " + teamGoalArray[0] + " goals, which is more than Barcalona Players.") -// } else { -// res.json("They scored the same amount.") -// } -// }); -// -// }); - app.use((err, req, res, next) => { res.status(500).json({message: err.message}); }); diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 0da7592..0e524fa 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -2,96 +2,11 @@ const chai = require('chai'); const chaiHTTP = require('chai-http'); -const expect = chai.expect; -chai.use(chaiHTTP); -const request = chai.request; -const fs = require('fs'); - -let fileArr = []; -let newFileArr = []; -let newDeletedFileArr = []; -let newFileOne; -let fileOne; - -require(__dirname + '/../server'); -describe('rest api tests', () => { - before('read files in data', (done) => { - fileArr = fs.readdirSync(__dirname + '/../data'); - done(); - }); - it('should post correctly', (done) => { - request('localhost:3000') - .post('/rooney') - .send('{"test": "test"}') - .end((err, res) => { - newDeletedFileArr = fs.readdirSync(__dirname + '/../data'); - expect(err).to.eql(null); - expect(newDeletedFileArr).to.eql(fileArr); - expect(res).to.have.status(200); - done(); - }); - }); - it('should delete correctly', (done) => { - request('localhost:3000') - .delete('/rooney/8') - .end((err, res) => { - newFileArr = fs.readdirSync(__dirname + '/../data'); - expect(err).to.eql(null); - expect(newFileArr).to.not.eql(fileArr); - expect(res).to.have.status(200); - done(); - }); - }); - it('should respond to a failed test', (done) => { - request('localhost:3000') - .get('/fail') - .end((err, res) => { - expect(err).to.not.eql(null); - expect(res).to.have.status(404); - done(); - }); - }); - it('should process get request correctly', (done) => { - request('localhost:3000') - .get('/rooney') - .end((err, res) => { - expect(err).to.eql(null); - expect(res).to.have.status(200); - expect(res.text).to.eql('GLORY MAN UNITED'); - done(); - }); - }); - - it('should turn special id get request to uppercase', (done) => { - request('localhost:3000') - .get('/rooney/wayne') - .end((err, res) => { - expect(err).to.eql(null); - expect(res).to.have.status(200); - expect(res.text).to.eql('{"message":"WAYNE"}'); - done(); - }); - }); +const fs = require('fs'); +chai.use(chaiHTTP); -describe('put tests', () => { - before('read file', () => { - fileOne = fs.readFileSync(__dirname + '/../data/1.json').toString(); - }) - it('should put properly', (done) => - { - request('localhost:3000') - .put('/rooney/1') - .send('{"test": "test"}') - .end((err, res) => { - newFileOne = fs.readFileSync(__dirname + '/../data/1.json').toString(); - expect(err).to.eql(null); - expect(newFileOne).to.not.eql(fileOne); - expect(res).to.have.status(200); - done(); - }); - }); -}) -}) +const expect = chai.expect; +const request = chai.request; From 9e5fdac6f9abf3257e68a4d4cdb1afef297e828a Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 22:44:50 -0700 Subject: [PATCH 27/65] declared consts in test --- test/rest_api_test.js | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 0e524fa..a1f273a 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -2,11 +2,13 @@ const chai = require('chai'); const chaiHTTP = require('chai-http'); - - - -const fs = require('fs'); +const ManUnitedPlayer = require('../schema/man_United_Player'); +const BarcaPlayer = require('../schema/barca_Player'); +const mongoose = require('mongoose'); chai.use(chaiHTTP); const expect = chai.expect; const request = chai.request; +const dbPort = process.env.MONGOLAB_URI; +process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; +require('../server'); From 6984a8ad62c2c75472d5ad40afc6af0cfa98e5c9 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 23:05:34 -0700 Subject: [PATCH 28/65] wrote united get test --- test/rest_api_test.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/test/rest_api_test.js b/test/rest_api_test.js index a1f273a..0d63bd1 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -12,3 +12,24 @@ const request = chai.request; const dbPort = process.env.MONGOLAB_URI; process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; require('../server'); + +describe('Router tests', () => { + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); + }); + }); + describe('Man United Tests', () => { + it('should get a list of Man United players', (done) => { + request('localhost:6969') + .get('/manUnited') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(Array.isArray(res.body)).to.eql(true); + done(); + }); + }); + }); +}); From 779231527ba757729b7f6711647b7a71a3f793b4 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 23:10:39 -0700 Subject: [PATCH 29/65] wrote united post test --- test/rest_api_test.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 0d63bd1..218bbd3 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -31,5 +31,16 @@ describe('Router tests', () => { done(); }); }); + it('Should create a Man United player', (done) => { + request('localhost:6969') + .post('/manUnited') + .send({name: 'test player'}) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.name).to.eql('test player'); + done(); + }); + }); }); }); From 38fe85fb3cbcef5d069198109cff746a92f1d793 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 23:26:23 -0700 Subject: [PATCH 30/65] wrote united put test --- routes/man_united_routes.js | 10 ++++++---- test/rest_api_test.js | 26 +++++++++++++++++++++++++- 2 files changed, 31 insertions(+), 5 deletions(-) diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index 4588dcb..926e6b6 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -25,10 +25,12 @@ router.post('/', bodyParser, (req, res) => { }); }); -router.put('/', bodyParser, (req, res) => { - ManUnitedPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err,data) => { - if(err) return res.json({message: err.message}); - res.json(data); +router.put('/', bodyParser, (req, res, next) => { + let _id = req.body._id; + ManUnitedPlayer.findOneAndUpdate({_id}, req.body, (err,data) => { + if(err) return next(err); + let message = 'successfully updated'; + res.json({message}); }); }); diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 218bbd3..01a2dbe 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -38,9 +38,33 @@ describe('Router tests', () => { .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); - expect(res.body.name).to.eql('test player'); + expect(res.body.name).to. eql('test player'); done(); }); }); + + describe('Man United test that need data', (done) => { + let testManUPlayer; + beforeEach((done) => { + let newManUPlayer = new ManUnitedPlayer({name: 'test'}) + newManUPlayer.save((err, player) => { + testManUPlayer = player; + done(); + }); + }); + + it('Should update a Man U player', (done) => { + testManUPlayer.name = 'updated'; + request('localhost:6969') + .put('/manUnited') + .send(testManUPlayer) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully updated'); + done(); + }); + }); + }); }); }); From effcbae4737d4a5d957d53ad0a7f36e4711a2e76 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 23:29:03 -0700 Subject: [PATCH 31/65] wrote next err for man u routes --- routes/man_united_routes.js | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index 926e6b6..3a9ba72 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -6,20 +6,18 @@ const ManUnitedPlayer = require('../schema/man_United_Player'); const router = module.exports = exports = express.Router(); -router.get('/', (req, res) => { +router.get('/', (req, res, next) => { ManUnitedPlayer.find({}, (err,data) => { - if(err) return res.json({ - message: err.message + if(err) return nex(err); }); res.json(data); }); }); -router.post('/', bodyParser, (req, res) => { +router.post('/', bodyParser, (req, res, next) => { let newManUnitedPlayer = new ManUnitedPlayer(req.body); newManUnitedPlayer.save((err, data) => { - if(err) return res.json({ - message: err.message + if(err) return nex(err); }); res.json(data); }); @@ -34,10 +32,11 @@ router.put('/', bodyParser, (req, res, next) => { }); }); -router.delete('/:id', bodyParser, (req, res) => { +router.delete('/:id', bodyParser, (req, res, next) => { let _id = req.params.id; ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { - if(err) return res.json({message: err.message}); - res.send('deleted Man United Player with id ' + req.params.id); + if(err) return next(err); + let message = 'successfully deleted'; + res.json({message}); }); }); From 7003eaf8ed50c6ac54d6c5cceb7a8a6d3b5d237d Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 26 May 2016 23:32:14 -0700 Subject: [PATCH 32/65] wrote next err for barca routes --- routes/barca_routes.js | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/routes/barca_routes.js b/routes/barca_routes.js index ae04ff0..4bb8b8c 100644 --- a/routes/barca_routes.js +++ b/routes/barca_routes.js @@ -6,34 +6,35 @@ const BarcaPlayer = require('../schema/barca_Player'); const router = module.exports = exports = express.Router(); -router.get('/', (req, res) => { +router.get('/', (req, res, next) => { BarcaPlayer.find({}, (err, data) => { - if(err) return res.json({ - message: err.message - }); + if(err) return next(err); res.json(data); }); }); -router.post('/', bodyParser, (req, res) => { +router.post('/', bodyParser, (req, res, next) => { let newBarcaPlayer = new BarcaPlayer(req.body); newBarcaPlayer.save((err, data) => { - if(err) return res.json({message: err.message}); + if(err) return next(err); res.json(data); }); }); -router.put('/', bodyParser, (req, res) => { - BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { - if(err) return res.json({message: err.message}); - res.json(data); +router.put('/', bodyParser, (req, res, next) => { + let _id = req.body.id; + BarcaPlayer.findOneAndUpdate({_id}, req.body, (err, data) => { + if(err) return next(err); + let message = 'successfully updated'; + res.json({message}); }); }); -router.delete('/:id', bodyParser, (req, res) => { +router.delete('/:id', bodyParser, (req, res, next) => { let _id = req.params.id; BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { - if(err) return res.json({message: err.message}); - res.send('deleted Barca Player with id ' + req.params.id); + if(err) return next(err); + let message = 'successfully deleted'; + res.json({message}); }); }); From bf70da984324423bc66476b95dcca944e8b988b1 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 00:15:39 -0700 Subject: [PATCH 33/65] made man u delete tests --- routes/barca_routes.js | 27 +++++++++++++-------------- routes/man_united_routes.js | 12 +++++++----- test/rest_api_test.js | 11 +++++++++++ 3 files changed, 31 insertions(+), 19 deletions(-) diff --git a/routes/barca_routes.js b/routes/barca_routes.js index 4bb8b8c..ae04ff0 100644 --- a/routes/barca_routes.js +++ b/routes/barca_routes.js @@ -6,35 +6,34 @@ const BarcaPlayer = require('../schema/barca_Player'); const router = module.exports = exports = express.Router(); -router.get('/', (req, res, next) => { +router.get('/', (req, res) => { BarcaPlayer.find({}, (err, data) => { - if(err) return next(err); + if(err) return res.json({ + message: err.message + }); res.json(data); }); }); -router.post('/', bodyParser, (req, res, next) => { +router.post('/', bodyParser, (req, res) => { let newBarcaPlayer = new BarcaPlayer(req.body); newBarcaPlayer.save((err, data) => { - if(err) return next(err); + if(err) return res.json({message: err.message}); res.json(data); }); }); -router.put('/', bodyParser, (req, res, next) => { - let _id = req.body.id; - BarcaPlayer.findOneAndUpdate({_id}, req.body, (err, data) => { - if(err) return next(err); - let message = 'successfully updated'; - res.json({message}); +router.put('/', bodyParser, (req, res) => { + BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { + if(err) return res.json({message: err.message}); + res.json(data); }); }); -router.delete('/:id', bodyParser, (req, res, next) => { +router.delete('/:id', bodyParser, (req, res) => { let _id = req.params.id; BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { - if(err) return next(err); - let message = 'successfully deleted'; - res.json({message}); + if(err) return res.json({message: err.message}); + res.send('deleted Barca Player with id ' + req.params.id); }); }); diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index 3a9ba72..0e6fa24 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -6,18 +6,20 @@ const ManUnitedPlayer = require('../schema/man_United_Player'); const router = module.exports = exports = express.Router(); -router.get('/', (req, res, next) => { +router.get('/', (req, res) => { ManUnitedPlayer.find({}, (err,data) => { - if(err) return nex(err); + if(err) return res.json({ + message: err.message }); res.json(data); }); }); -router.post('/', bodyParser, (req, res, next) => { +router.post('/', bodyParser, (req, res) => { let newManUnitedPlayer = new ManUnitedPlayer(req.body); newManUnitedPlayer.save((err, data) => { - if(err) return nex(err); + if(err) return res.json({ + message: err.message }); res.json(data); }); @@ -32,7 +34,7 @@ router.put('/', bodyParser, (req, res, next) => { }); }); -router.delete('/:id', bodyParser, (req, res, next) => { +router.delete('/:id', bodyParser, (req, res) => { let _id = req.params.id; ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { if(err) return next(err); diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 01a2dbe..58e606a 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -65,6 +65,17 @@ describe('Router tests', () => { done(); }); }); + + it('Should delete a Man U player', (done) => { + request('localhost:6969') + .delete('/manUnited/' + testManUPlayer.id) + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully deleted'); + done(); + }); + }); }); }); }); From bc128a87175e54e3f784ac5f0b81ace7d46a3739 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 00:22:37 -0700 Subject: [PATCH 34/65] made barca tests --- routes/barca_routes.js | 14 +++++---- routes/man_united_routes.js | 2 +- test/rest_api_test.js | 61 ++++++++++++++++++++++++++++++++++++- 3 files changed, 69 insertions(+), 8 deletions(-) diff --git a/routes/barca_routes.js b/routes/barca_routes.js index ae04ff0..8a2e389 100644 --- a/routes/barca_routes.js +++ b/routes/barca_routes.js @@ -23,17 +23,19 @@ router.post('/', bodyParser, (req, res) => { }); }); -router.put('/', bodyParser, (req, res) => { +router.put('/', bodyParser, (req, res, next) => { BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { - if(err) return res.json({message: err.message}); - res.json(data); + if(err) return next(err); + let message = 'successfully updated'; + res.json({message}); }); }); -router.delete('/:id', bodyParser, (req, res) => { +router.delete('/:id', bodyParser, (req, res, next) => { let _id = req.params.id; BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { - if(err) return res.json({message: err.message}); - res.send('deleted Barca Player with id ' + req.params.id); + if(err) return next(err); + let message = 'successfully deleted'; + res.json({message}); }); }); diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index 0e6fa24..d98f172 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -34,7 +34,7 @@ router.put('/', bodyParser, (req, res, next) => { }); }); -router.delete('/:id', bodyParser, (req, res) => { +router.delete('/:id', bodyParser, (req, res, next) => { let _id = req.params.id; ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { if(err) return next(err); diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 58e606a..4d1a5e0 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -43,7 +43,7 @@ describe('Router tests', () => { }); }); - describe('Man United test that need data', (done) => { + describe('Man United tests that need data', (done) => { let testManUPlayer; beforeEach((done) => { let newManUPlayer = new ManUnitedPlayer({name: 'test'}) @@ -78,4 +78,63 @@ describe('Router tests', () => { }); }); }); + + describe('Barca Tests', () => { + it('should get a list of Barca players', (done) => { + request('localhost:6969') + .get('/barca') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(Array.isArray(res.body)).to.eql(true); + done(); + }); + }); + it('Should create a Barca player', (done) => { + request('localhost:6969') + .post('/barca') + .send({name: 'test player'}) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.name).to. eql('test player'); + done(); + }); + }); + + describe('Barca tests that need data', (done) => { + let testBarcaPlayer; + beforeEach((done) => { + let newBarcaPlayer = new BarcaPlayer({name: 'test'}) + newBarcaPlayer.save((err, player) => { + testBarcaPlayer = player; + done(); + }); + }); + + it('Should update a Barca player', (done) => { + testBarcaPlayer.name = 'updated'; + request('localhost:6969') + .put('/barca') + .send(testBarcaPlayer) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully updated'); + done(); + }); + }); + + it('Should delete a Barca player', (done) => { + request('localhost:6969') + .delete('/barca/' + testBarcaPlayer.id) + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('successfully deleted'); + done(); + }); + }); + }); + }); }); From b8405acd97c625414c881fea451a91d2eb6f20b7 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 00:45:38 -0700 Subject: [PATCH 35/65] made compare route work again ready to start tests --- routes/compare_route.js | 2 -- 1 file changed, 2 deletions(-) diff --git a/routes/compare_route.js b/routes/compare_route.js index 1cd9ddb..136ae7f 100644 --- a/routes/compare_route.js +++ b/routes/compare_route.js @@ -16,14 +16,12 @@ router.get('/mostGoals', (req, res, next) => { return acc += player.goals; }, 0); teamGoalArray.push(totalManUGoalsScored); - console.log(teamGoalArray); }); BarcaPlayer.find({}, (err, player)=>{ if (err) return next(err); let totalBarcaGoalsScored = player.reduce((acc, player) => { return acc += player.goals; }, 0); - console.log(totalBarcaGoalsScored); teamGoalArray.push(totalBarcaGoalsScored); if (teamGoalArray[1] > teamGoalArray[0]) { From 3d2379f751623643679ed39af8b55431ea9fefd9 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 00:58:51 -0700 Subject: [PATCH 36/65] started writing compare test but realized db is dropped evry time --- test/rest_api_test.js | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 4d1a5e0..6352793 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -136,5 +136,18 @@ describe('Router tests', () => { }); }); }); + + describe('Compare tests', () => { + it('Should compare total goals of each team', (done) => { + request('localhost:6969') + .get('/compare/mostGoals') + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + console.log(res.body); + done(); + }); + }); + }); }); }); From 984e12b29efcc5c7e3883df68959644be30de981 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 09:06:18 -0700 Subject: [PATCH 37/65] beginning compare test again --- test/rest_api_test.js | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 6352793..9b4c509 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -136,17 +136,20 @@ describe('Router tests', () => { }); }); }); + }); - describe('Compare tests', () => { - it('Should compare total goals of each team', (done) => { - request('localhost:6969') - .get('/compare/mostGoals') - .end((err,res) => { - expect(err).to.eql(null); - expect(res).to.have.status(200); - console.log(res.body); - done(); - }); + describe('Compare tests', () => { + before('Need to make some players to compare', (done) => { + + }) + it('Should compare total goals of each team', (done) => { + request('localhost:6969') + .get('/compare/mostGoals') + .end((err,res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body).to.eql("They scored the same amount.") + done(); }); }); }); From 94cf2de94d260b57a5d791c342b2a1eb9336ace1 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 09:10:33 -0700 Subject: [PATCH 38/65] beginning compare test again --- test/rest_api_test.js | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 9b4c509..296f0e5 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -139,8 +139,12 @@ describe('Router tests', () => { }); describe('Compare tests', () => { + let testSaurez before('Need to make some players to compare', (done) => { - + let newSuarez = new BarcaPlayer({name: 'Test '}) + newBarcaPlayer.save((err, player) => { + testBarcaPlayer = player; + done(); }) it('Should compare total goals of each team', (done) => { request('localhost:6969') From af739e94ed4aa399d6120a625d704a3a84a70b7d Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 10:23:52 -0700 Subject: [PATCH 39/65] made new test for compare --- routes/compare_route.js | 1 + test/rest_api_test.js | 19 +++++++------------ 2 files changed, 8 insertions(+), 12 deletions(-) diff --git a/routes/compare_route.js b/routes/compare_route.js index 136ae7f..cc3fc79 100644 --- a/routes/compare_route.js +++ b/routes/compare_route.js @@ -15,6 +15,7 @@ router.get('/mostGoals', (req, res, next) => { let totalManUGoalsScored = player.reduce((acc, player) => { return acc += player.goals; }, 0); + console.log(totalManUGoalsScored); teamGoalArray.push(totalManUGoalsScored); }); BarcaPlayer.find({}, (err, player)=>{ diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 296f0e5..253db51 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -14,6 +14,7 @@ process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; require('../server'); describe('Router tests', () => { + after((done) => { process.env.MONGOLAB_URI = dbPort; mongoose.connection.db.dropDatabase(() => { @@ -34,7 +35,7 @@ describe('Router tests', () => { it('Should create a Man United player', (done) => { request('localhost:6969') .post('/manUnited') - .send({name: 'test player'}) + .send({name: 'test player', goals: 40}) .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); @@ -46,7 +47,7 @@ describe('Router tests', () => { describe('Man United tests that need data', (done) => { let testManUPlayer; beforeEach((done) => { - let newManUPlayer = new ManUnitedPlayer({name: 'test'}) + let newManUPlayer = new ManUnitedPlayer({name: 'test', goals:20}) newManUPlayer.save((err, player) => { testManUPlayer = player; done(); @@ -93,7 +94,7 @@ describe('Router tests', () => { it('Should create a Barca player', (done) => { request('localhost:6969') .post('/barca') - .send({name: 'test player'}) + .send({name: 'test player', goals: 100}) .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); @@ -105,7 +106,7 @@ describe('Router tests', () => { describe('Barca tests that need data', (done) => { let testBarcaPlayer; beforeEach((done) => { - let newBarcaPlayer = new BarcaPlayer({name: 'test'}) + let newBarcaPlayer = new BarcaPlayer({name: 'test', goals: 100}) newBarcaPlayer.save((err, player) => { testBarcaPlayer = player; done(); @@ -139,20 +140,14 @@ describe('Router tests', () => { }); describe('Compare tests', () => { - let testSaurez - before('Need to make some players to compare', (done) => { - let newSuarez = new BarcaPlayer({name: 'Test '}) - newBarcaPlayer.save((err, player) => { - testBarcaPlayer = player; - done(); - }) + it('Should compare total goals of each team', (done) => { request('localhost:6969') .get('/compare/mostGoals') .end((err,res) => { expect(err).to.eql(null); expect(res).to.have.status(200); - expect(res.body).to.eql("They scored the same amount.") + expect(res.body).to.eql('Barcalona players scored 200 goals, which is more than Man United Players.') done(); }); }); From c1e8de6de2ab4873bb9b0fb309534446dad8282f Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 27 May 2016 23:37:18 -0700 Subject: [PATCH 40/65] put in notes for tics --- routes/compare_route.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/routes/compare_route.js b/routes/compare_route.js index cc3fc79..13bc4ec 100644 --- a/routes/compare_route.js +++ b/routes/compare_route.js @@ -35,3 +35,9 @@ router.get('/mostGoals', (req, res, next) => { }); }); + +// +// scoreA = 10 +// scoreB = 15 +// +// message = `${scoreA > scoreB ? 'Team A' : 'Team B'} is the winner!` From 78fa39744abb50eb4219f4ae9fdcbb06714f9a33 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Tue, 31 May 2016 09:52:30 -0700 Subject: [PATCH 41/65] fixed linter errors --- routes/compare_route.js | 6 ------ test/rest_api_test.js | 6 +++--- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/routes/compare_route.js b/routes/compare_route.js index 13bc4ec..cc3fc79 100644 --- a/routes/compare_route.js +++ b/routes/compare_route.js @@ -35,9 +35,3 @@ router.get('/mostGoals', (req, res, next) => { }); }); - -// -// scoreA = 10 -// scoreB = 15 -// -// message = `${scoreA > scoreB ? 'Team A' : 'Team B'} is the winner!` diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 253db51..00865f9 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -47,7 +47,7 @@ describe('Router tests', () => { describe('Man United tests that need data', (done) => { let testManUPlayer; beforeEach((done) => { - let newManUPlayer = new ManUnitedPlayer({name: 'test', goals:20}) + let newManUPlayer = new ManUnitedPlayer({name: 'test', goals:20}); newManUPlayer.save((err, player) => { testManUPlayer = player; done(); @@ -106,7 +106,7 @@ describe('Router tests', () => { describe('Barca tests that need data', (done) => { let testBarcaPlayer; beforeEach((done) => { - let newBarcaPlayer = new BarcaPlayer({name: 'test', goals: 100}) + let newBarcaPlayer = new BarcaPlayer({name: 'test', goals: 100}); newBarcaPlayer.save((err, player) => { testBarcaPlayer = player; done(); @@ -147,7 +147,7 @@ describe('Router tests', () => { .end((err,res) => { expect(err).to.eql(null); expect(res).to.have.status(200); - expect(res.body).to.eql('Barcalona players scored 200 goals, which is more than Man United Players.') + expect(res.body).to.eql('Barcalona players scored 200 goals, which is more than Man United Players.'); done(); }); }); From 44a6d063f86ebfa2907760f71ea2d6fa3cc3ad43 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:00:22 -0700 Subject: [PATCH 42/65] wrote user.js file and renamed schema folder to model --- {schema => model}/barca_Player.js | 0 {schema => model}/man_United_Player.js | 0 model/user.js | 19 +++++++++++++++++++ package.json | 1 + 4 files changed, 20 insertions(+) rename {schema => model}/barca_Player.js (100%) rename {schema => model}/man_United_Player.js (100%) create mode 100644 model/user.js diff --git a/schema/barca_Player.js b/model/barca_Player.js similarity index 100% rename from schema/barca_Player.js rename to model/barca_Player.js diff --git a/schema/man_United_Player.js b/model/man_United_Player.js similarity index 100% rename from schema/man_United_Player.js rename to model/man_United_Player.js diff --git a/model/user.js b/model/user.js new file mode 100644 index 0000000..bc90131 --- /dev/null +++ b/model/user.js @@ -0,0 +1,19 @@ +'use strict'; + +const mongoose = require('mongoose'); +const bcrypt = require('bcrypt'); + +const User = new mongoose.Schema({ + username: {type: String, required: true}, + password: {type: String, required: true} +}); + +User.methods.hashPassword = function() { + return bcrypt.hashSync(this.password, 8); +}; + +User.methods.comparePassword = function(password) { + return bcrypt.compareSync(password, this.password); +}; + +module.exports = mongoose.model('user', User); diff --git a/package.json b/package.json index fb446a0..c04de4d 100644 --- a/package.json +++ b/package.json @@ -36,6 +36,7 @@ "morgan": "^1.7.0" }, "dependencies": { + "bcrypt": "^0.8.6", "body-parser": "^1.15.1", "express": "^4.13.4" } From b14f61452e1e3c91c57e230938b032bbf92d7fa6 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:08:00 -0700 Subject: [PATCH 43/65] wrote basic_http.js file --- lib/basic_http.js | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 lib/basic_http.js diff --git a/lib/basic_http.js b/lib/basic_http.js new file mode 100644 index 0000000..dc924d4 --- /dev/null +++ b/lib/basic_http.js @@ -0,0 +1,21 @@ +'use strict'; + +module.exports = function (req, res, next) { + let basicAuth = req.headers.authorization; + let authString = basicAuth.split(' ').pop(); + let authBuff = new Buffer(authString, 'base64'); + let asciiAuth = authBuff.toString(); + let authArray = asciiAuth.split(':'); + authBuff.fill(0); + + req.auth = { + username: authArray[0], + password: authArray[1] + }; + + if(!req.auth.username || !req.auth.password) { + return next(new Error ('Username or Password missing')); + } + + next(); +}; From d4c595daf0f606600a01d4ea1db6926896e5c685 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:19:06 -0700 Subject: [PATCH 44/65] wrote auth_routes post request --- routes/auth_routes.js | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) create mode 100644 routes/auth_routes.js diff --git a/routes/auth_routes.js b/routes/auth_routes.js new file mode 100644 index 0000000..8e1450e --- /dev/null +++ b/routes/auth_routes.js @@ -0,0 +1,22 @@ +'use strict'; + +const express = require('express'); +const bodyParser = require('body-parser').json(); +const User = require('../model/user'); +const basicHTTP = require('../lib/basic_http'); + +const router = module.exports = exports = express.Router(); + +router.post('/signup', bodyParser, (req, res, next) => { + let newUser = new User(req.body); + let hashedPassword = newUser.hashPassword(); + newUser.password = hashedPassword; + req.body.password = null; + User.findOne({username: req.body.username}, (err, user) => { + if(err || user) return next(new Error('could not create user')); + newUser.save((err, user) => { + if (err) return next(new Error('could not create user')); + res.json({token: 'token'}); + }); + }); +}); From 9cbff3888212146f5a016c7f567303410368ac17 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:27:06 -0700 Subject: [PATCH 45/65] wrote auth_routes login route --- routes/auth_routes.js | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/routes/auth_routes.js b/routes/auth_routes.js index 8e1450e..71d0dcd 100644 --- a/routes/auth_routes.js +++ b/routes/auth_routes.js @@ -20,3 +20,12 @@ router.post('/signup', bodyParser, (req, res, next) => { }); }); }); + +router.get('/login', basicHTTP, (req, res, next) => { + User.findOne({username: req.auth.username}, (err, user) => { + if(err || !user) return next(new Error('Could not login')); + if (!user.comparePassword(req.auth.password)) return next('Could not sign in'); + + res.json({token: 'token'}); + }); +}); From 22cd0b5d272caa6cba49f1979c56cbccc520214f Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:31:44 -0700 Subject: [PATCH 46/65] updated server.js with auth route --- server.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/server.js b/server.js index fc66163..92c7386 100644 --- a/server.js +++ b/server.js @@ -15,10 +15,12 @@ mongoose.connect('mongodb://localhost/dev_db'); const manUnitedRouter = require('./routes/man_united_routes'); const barcaRouter = require('./routes/barca_routes'); const compareRouter = require('./routes/compare_route'); +const authRouter = require('./routes/auth_routes'); app.use('/manUnited', manUnitedRouter); app.use('/barca', barcaRouter); app.use('/compare', compareRouter); +app.use('/auth', authRouter); app.use((err, req, res, next) => { res.status(500).json({message: err.message}); From 138659f97b56a4716552c546f75447290af9269d Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:33:28 -0700 Subject: [PATCH 47/65] changed schema to model in routes files --- routes/barca_routes.js | 2 +- routes/compare_route.js | 4 ++-- routes/man_united_routes.js | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/routes/barca_routes.js b/routes/barca_routes.js index 8a2e389..354b146 100644 --- a/routes/barca_routes.js +++ b/routes/barca_routes.js @@ -2,7 +2,7 @@ const express = require('express'); const bodyParser = require('body-parser').json(); -const BarcaPlayer = require('../schema/barca_Player'); +const BarcaPlayer = require('../model/barca_Player'); const router = module.exports = exports = express.Router(); diff --git a/routes/compare_route.js b/routes/compare_route.js index cc3fc79..429bbc6 100644 --- a/routes/compare_route.js +++ b/routes/compare_route.js @@ -2,8 +2,8 @@ const express = require('express'); const bodyParser = require('body-parser').json(); -const BarcaPlayer = require('../schema/barca_Player'); -const ManUnitedPlayer = require('../schema/man_United_Player'); +const BarcaPlayer = require('../model/barca_Player'); +const ManUnitedPlayer = require('../model/man_United_Player'); const router = module.exports = exports = express.Router(); diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index d98f172..5d36aea 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -2,7 +2,7 @@ const express = require('express'); const bodyParser = require('body-parser').json(); -const ManUnitedPlayer = require('../schema/man_United_Player'); +const ManUnitedPlayer = require('../model/man_United_Player'); const router = module.exports = exports = express.Router(); From f6c68c0285e33af57330055bd5a938b221fa4367 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:46:27 -0700 Subject: [PATCH 48/65] changed schema to model in test also and started writing auth tessts --- schema/user.js | 19 +++++++++++++++++++ test/auth_route_test.js | 5 +++++ test/rest_api_test.js | 4 ++-- 3 files changed, 26 insertions(+), 2 deletions(-) create mode 100644 schema/user.js create mode 100644 test/auth_route_test.js diff --git a/schema/user.js b/schema/user.js new file mode 100644 index 0000000..bc90131 --- /dev/null +++ b/schema/user.js @@ -0,0 +1,19 @@ +'use strict'; + +const mongoose = require('mongoose'); +const bcrypt = require('bcrypt'); + +const User = new mongoose.Schema({ + username: {type: String, required: true}, + password: {type: String, required: true} +}); + +User.methods.hashPassword = function() { + return bcrypt.hashSync(this.password, 8); +}; + +User.methods.comparePassword = function(password) { + return bcrypt.compareSync(password, this.password); +}; + +module.exports = mongoose.model('user', User); diff --git a/test/auth_route_test.js b/test/auth_route_test.js new file mode 100644 index 0000000..fe293c0 --- /dev/null +++ b/test/auth_route_test.js @@ -0,0 +1,5 @@ +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const User = require('../') diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 00865f9..2240048 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -2,8 +2,8 @@ const chai = require('chai'); const chaiHTTP = require('chai-http'); -const ManUnitedPlayer = require('../schema/man_United_Player'); -const BarcaPlayer = require('../schema/barca_Player'); +const ManUnitedPlayer = require('../model/man_United_Player'); +const BarcaPlayer = require('../model/barca_Player'); const mongoose = require('mongoose'); chai.use(chaiHTTP); From 502e66dad9d9b3c80b12052548b67bf6be2cd90f Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:51:04 -0700 Subject: [PATCH 49/65] declared neccessary consts for auth_test --- test/auth_route_test.js | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/test/auth_route_test.js b/test/auth_route_test.js index fe293c0..1877d45 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -2,4 +2,12 @@ const chai = require('chai'); const chaiHTTP = require('chai-http'); -const User = require('../') +const User = require('../model/user'); +const mongoose = require('mongoose'); +chai.use(chaiHTTP); + +const expect = chai.expect; +const request = chai.request; +const dbPort = process.env.MONGOLAB_URI; +process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; +require('../server'); From 5d9a0e35d9351aec503f38fdaf653188e5d1b8b3 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 10:53:47 -0700 Subject: [PATCH 50/65] wrote after block for authtests --- test/auth_route_test.js | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/test/auth_route_test.js b/test/auth_route_test.js index 1877d45..4e054e5 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -11,3 +11,15 @@ const request = chai.request; const dbPort = process.env.MONGOLAB_URI; process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; require('../server'); + +describe('Authorization router tests', () => { + + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); + }); + }); + + +}); From f5bae517762c675632f748483da13536fbf560df Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 11:07:16 -0700 Subject: [PATCH 51/65] wrote signup route test --- test/auth_route_test.js | 15 +++++++++++++-- test/rest_api_test.js | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/test/auth_route_test.js b/test/auth_route_test.js index 4e054e5..b9b822f 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -20,6 +20,17 @@ describe('Authorization router tests', () => { done(); }); }); - - + describe('Authorization tests', () => { + it('Should sign up a new user', (done) => { + request('localhost:6969') + .post('/auth/signup') + .send({username: 'testy', password: 'test'}) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql('token'); + done(); + }); + }); + }); }); diff --git a/test/rest_api_test.js b/test/rest_api_test.js index 2240048..d5a224b 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -39,7 +39,7 @@ describe('Router tests', () => { .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); - expect(res.body.name).to. eql('test player'); + expect(res.body.name).to.eql('test player'); done(); }); }); From 3889bdb434fdd41cf6002f52b72f308c5244e8f8 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Wed, 1 Jun 2016 11:23:10 -0700 Subject: [PATCH 52/65] wrote login route test --- test/auth_route_test.js | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/test/auth_route_test.js b/test/auth_route_test.js index b9b822f..971693d 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -32,5 +32,16 @@ describe('Authorization router tests', () => { done(); }); }); + it('Should login a user', (done) => { + request('localhost:6969') + .get('/auth/login') + .auth('testy', 'test') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql('token'); + done(); + }); + }); }); }); From f3f31652ae0a29e35054ca212af512e779827b60 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 09:36:58 -0700 Subject: [PATCH 53/65] update package.json with jbt and started auth file --- lib/jwt_auth.js | 5 +++++ package.json | 3 ++- 2 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 lib/jwt_auth.js diff --git a/lib/jwt_auth.js b/lib/jwt_auth.js new file mode 100644 index 0000000..66f7901 --- /dev/null +++ b/lib/jwt_auth.js @@ -0,0 +1,5 @@ +'use strict'; + +const jwt = require('jsonwebtoken'); +const User = require('..model/user'); +const secret = process.env.SECRET || 'changeme'; diff --git a/package.json b/package.json index c04de4d..420902c 100644 --- a/package.json +++ b/package.json @@ -38,6 +38,7 @@ "dependencies": { "bcrypt": "^0.8.6", "body-parser": "^1.15.1", - "express": "^4.13.4" + "express": "^4.13.4", + "jsonwebtoken": "^7.0.0" } } From 70a3e133865824d07aacdb910a9a458dffcfb496 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 09:42:53 -0700 Subject: [PATCH 54/65] made jwt_auth file --- lib/jwt_auth.js | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/lib/jwt_auth.js b/lib/jwt_auth.js index 66f7901..9e007a5 100644 --- a/lib/jwt_auth.js +++ b/lib/jwt_auth.js @@ -3,3 +3,23 @@ const jwt = require('jsonwebtoken'); const User = require('..model/user'); const secret = process.env.SECRET || 'changeme'; + +module.exports = function(req, res, next) { + let token = req.body.token || req.headers.token; + let tokenErr = new Error('Authorization Failure'); + let decodedToken; + + if (!token) return next(tokenErr); + + try { + decodedToken = jwt.verify(token, secret); + } catch(e) { + return next(tokenErr); + } + + User.findOne({_id:decodedToken._id}, (err, user) => { + if (!user || err) return next(tokenErr); + req.user = user; + next(); + }); +}; From b2756bf2ef181d5200b06a69567206bc71c48d96 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 09:46:40 -0700 Subject: [PATCH 55/65] updated user.js file with generate token method --- model/user.js | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/model/user.js b/model/user.js index bc90131..992a041 100644 --- a/model/user.js +++ b/model/user.js @@ -2,6 +2,8 @@ const mongoose = require('mongoose'); const bcrypt = require('bcrypt'); +const secret = process.env.SECRET || 'changeme'; +const jwt = require('jsonwebtoken'); const User = new mongoose.Schema({ username: {type: String, required: true}, @@ -16,4 +18,8 @@ User.methods.comparePassword = function(password) { return bcrypt.compareSync(password, this.password); }; +User.methods.generateToken = function() { + return jwt.sign({_id: this._id}, secret); +}; + module.exports = mongoose.model('user', User); From 22bd240ac280c9034968f3b6cea2c820dfbe4948 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 09:55:24 -0700 Subject: [PATCH 56/65] updated server.js with test routes --- server.js | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/server.js b/server.js index 92c7386..267ced6 100644 --- a/server.js +++ b/server.js @@ -5,6 +5,8 @@ const app = express(); const mongoose = require('mongoose'); const morgan = require('morgan'); const errorHandler =require('./lib/error_handling'); +const bodyParser = require('body-parser').json(); +const jwtAuth = require('./lib/jwt_auth'); const dbPort = process.env.MONGOLAB_URI || 'mongodb://localhost/dev_db'; @@ -22,6 +24,14 @@ app.use('/barca', barcaRouter); app.use('/compare', compareRouter); app.use('/auth', authRouter); +app.get('/test', (req, res) => { + res.send('don\t need a token'); +}); + +app.post('/test', bodyParser, jwtAuth, (req, res) => { + req.json({message: 'need a token', user: req.user}); +}); + app.use((err, req, res, next) => { res.status(500).json({message: err.message}); }); From 647168151032f499382e0bceaf9a3c71f2294eba Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 10:18:53 -0700 Subject: [PATCH 57/65] updated auth_routes with generate token function implemented --- lib/jwt_auth.js | 2 +- routes/auth_routes.js | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/jwt_auth.js b/lib/jwt_auth.js index 9e007a5..6e1d38b 100644 --- a/lib/jwt_auth.js +++ b/lib/jwt_auth.js @@ -1,7 +1,7 @@ 'use strict'; const jwt = require('jsonwebtoken'); -const User = require('..model/user'); +const User = require('../model/user'); const secret = process.env.SECRET || 'changeme'; module.exports = function(req, res, next) { diff --git a/routes/auth_routes.js b/routes/auth_routes.js index 71d0dcd..b51e53f 100644 --- a/routes/auth_routes.js +++ b/routes/auth_routes.js @@ -16,7 +16,7 @@ router.post('/signup', bodyParser, (req, res, next) => { if(err || user) return next(new Error('could not create user')); newUser.save((err, user) => { if (err) return next(new Error('could not create user')); - res.json({token: 'token'}); + res.json({token: user.generateToken()}); }); }); }); @@ -26,6 +26,6 @@ router.get('/login', basicHTTP, (req, res, next) => { if(err || !user) return next(new Error('Could not login')); if (!user.comparePassword(req.auth.password)) return next('Could not sign in'); - res.json({token: 'token'}); + res.json({token: user.generateToken()}); }); }); From db4ba6d90dc23b189842749aafd1ddd4fecd2c09 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 10:21:27 -0700 Subject: [PATCH 58/65] error fix: changed req to res --- server.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/server.js b/server.js index 267ced6..3e3f1b6 100644 --- a/server.js +++ b/server.js @@ -29,7 +29,7 @@ app.get('/test', (req, res) => { }); app.post('/test', bodyParser, jwtAuth, (req, res) => { - req.json({message: 'need a token', user: req.user}); + res.json({message: 'need a token', user: req.user}); }); app.use((err, req, res, next) => { From 2c393c540bd39db56b75a34ad28e2e4d358b11e5 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 10:26:56 -0700 Subject: [PATCH 59/65] token test file set up ready to write tests --- test/token_tests.js | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 test/token_tests.js diff --git a/test/token_tests.js b/test/token_tests.js new file mode 100644 index 0000000..393c437 --- /dev/null +++ b/test/token_tests.js @@ -0,0 +1,23 @@ +'use strict'; + +const chai = require('chai'); +const chaiHTTP = require('chai-http'); +const User = require('../model/user'); +const mongoose = require('mongoose'); +chai.use(chaiHTTP); + +const expect = chai.expect; +const request = chai.request; +const dbPort = process.env.MONGOLAB_URI; +process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; +require('../server'); + +describe('Token tests', () => { + + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); + }); + }); +}); From daa1b4f35bd04730d452881412ba66d66cd38afe Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 10:36:18 -0700 Subject: [PATCH 60/65] made change to server get test route so its test will work and is working --- server.js | 3 ++- test/token_tests.js | 10 ++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/server.js b/server.js index 3e3f1b6..4a69b80 100644 --- a/server.js +++ b/server.js @@ -25,7 +25,8 @@ app.use('/compare', compareRouter); app.use('/auth', authRouter); app.get('/test', (req, res) => { - res.send('don\t need a token'); + let message = 'don\t need a token'; + res.json({message}); }); app.post('/test', bodyParser, jwtAuth, (req, res) => { diff --git a/test/token_tests.js b/test/token_tests.js index 393c437..58ce144 100644 --- a/test/token_tests.js +++ b/test/token_tests.js @@ -20,4 +20,14 @@ describe('Token tests', () => { done(); }); }); + it('Should do a get test route', (done) => { + request('localhost:6969') + .get('/test') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.message).to.eql('don\t need a token'); + done(); + }); + }); }); From bc0b9111cfa7173e69551310a8ced5c8836049f2 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 11:01:38 -0700 Subject: [PATCH 61/65] working on tests --- test/auth_route_test.js | 51 +++++++++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 17 deletions(-) diff --git a/test/auth_route_test.js b/test/auth_route_test.js index 971693d..0dded1e 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -5,43 +5,60 @@ const chaiHTTP = require('chai-http'); const User = require('../model/user'); const mongoose = require('mongoose'); chai.use(chaiHTTP); +const jwt = require('jsonwebtoken'); const expect = chai.expect; const request = chai.request; + +const secret = process.env.SECRET || 'changeme'; const dbPort = process.env.MONGOLAB_URI; process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; require('../server'); describe('Authorization router tests', () => { - after((done) => { - process.env.MONGOLAB_URI = dbPort; - mongoose.connection.db.dropDatabase(() => { - done(); + + let testUser; + beforeEach((done) => { + let newUser = new User({ + username: 'testuser', + password: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1NzUwNzAzNWNjZDYzYmY5MGE1ZWZjYjQiLCJpYXQiOjE0NjQ4ODkzOTd9.eExJviSNGYMwcGpnVArhzUFw-eIXmNrdiUzY-0AwNTY' + }); + newUser.save((err, user) => { + testUser = user; + done(); + }); }); - }); - describe('Authorization tests', () => { - it('Should sign up a new user', (done) => { - request('localhost:6969') - .post('/auth/signup') - .send({username: 'testy', password: 'test'}) - .end((err, res) => { - expect(err).to.eql(null); - expect(res).to.have.status(200); - expect(res.body.token).to.eql('token'); + + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { done(); }); }); + + // it('Should sign up a new user', (done) => { + // request('localhost:6969') + // .post('/auth/signup') + // .send({username: 'testy', password: 'test'}) + // .end((err, res) => { + // expect(err).to.eql(null); + // expect(res).to.have.status(200); + // expect(res.body.token).to.eql(User); + // done(); + // }); + // }); it('Should login a user', (done) => { request('localhost:6969') .get('/auth/login') - .auth('testy', 'test') + .auth('testuser', 'testuser') .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); - expect(res.body.token).to.eql('token'); + expect(res.body.token).to.eql(jwt.sign({ + _id: testUser._id + }, secret)); done(); }); }); - }); }); From 08266526f2e87fb23db2d48b4571878f84aa03b3 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Thu, 2 Jun 2016 13:11:23 -0700 Subject: [PATCH 62/65] got first route test towork for login --- test/auth_route_test.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/test/auth_route_test.js b/test/auth_route_test.js index 0dded1e..128a5bc 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -22,7 +22,7 @@ describe('Authorization router tests', () => { beforeEach((done) => { let newUser = new User({ username: 'testuser', - password: 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJfaWQiOiI1NzUwNzAzNWNjZDYzYmY5MGE1ZWZjYjQiLCJpYXQiOjE0NjQ4ODkzOTd9.eExJviSNGYMwcGpnVArhzUFw-eIXmNrdiUzY-0AwNTY' + password: '$2a$08$tExN9A1AEkj.V9ea5IMdPOyU6haLngPQgnsmpdIUce14Vk.3cSTqe' }); newUser.save((err, user) => { testUser = user; @@ -51,7 +51,7 @@ describe('Authorization router tests', () => { it('Should login a user', (done) => { request('localhost:6969') .get('/auth/login') - .auth('testuser', 'testuser') + .auth('testuser', 'test') .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); From 6d92d6e2d18efdb254b7af66511b60a5c24f18d4 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 3 Jun 2016 09:36:26 -0700 Subject: [PATCH 63/65] made changes in package.json to scripts --- package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 420902c..020872a 100644 --- a/package.json +++ b/package.json @@ -7,8 +7,9 @@ "test": "mocha" }, "scripts": { - "test": "mocha", - "start": "node index.js" + "test": "./node_modules/mocha/bin/mocha", + "start": "node server.js", + "lint": "./node_modules/eslint/bin/eslint.js *" }, "repository": { "type": "git", From 176ab7b6a2b2c7f250e3a4734784b70aa5b5e386 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Fri, 3 Jun 2016 10:11:25 -0700 Subject: [PATCH 64/65] fixed lintrc --- .eslintrc | 41 +++++++++++++++++++++++++++++ README.md | 19 -------------- gulpfile.js | 6 +---- lib/error_handling.js | 2 +- routes/auth_routes.js | 6 ++--- routes/barca_routes.js | 4 +-- routes/compare_route.js | 9 +++---- routes/man_united_routes.js | 4 +-- schema/barca_Player.js | 12 +++++++++ schema/man_United_Player.js | 12 +++++++++ server.js | 4 +-- test/auth_route_test.js | 52 ++++++++++++------------------------- test/rest_api_test.js | 4 +-- test/token_tests.js | 1 - 14 files changed, 99 insertions(+), 77 deletions(-) create mode 100644 .eslintrc create mode 100644 schema/barca_Player.js create mode 100644 schema/man_United_Player.js diff --git a/.eslintrc b/.eslintrc new file mode 100644 index 0000000..6d505ad --- /dev/null +++ b/.eslintrc @@ -0,0 +1,41 @@ +{ +"rules": { +"no-console": 0, +"indent": [ +2, +2 +], +"quotes": [ +2, +"single" +], +"linebreak-style": [ +2, +"unix" +], +"semi": [ +2, +"always" +] +}, +"env": { +"es6": true, +"node": true, +"browser": true, +"mocha": true +}, +"globals": { +"describe": false, +"it": false, +"beforeEach": false, +"afterEach": false, +"before": false, +"after": false +}, +"ecmaFeatures": { +"modules": true, +"experimentalObjectRestSpread": true, +"impliedStrict": true +}, +"extends": "eslint:recommended" +} diff --git a/README.md b/README.md index e850619..8b13789 100644 --- a/README.md +++ b/README.md @@ -1,20 +1 @@ -#REST API -##To Submit this Assignment - * fork this repository - * write all of your code in a folder containing your name - * push to your repository - * submit a pull request to this repository - * submit a link to your PR in canvas - -##Description -Create a single resource (like /penguins or /seals) REST API with Express. - -Write a full set of CRUD routes for your resource. You can persist it however you like for the sake of testing, we'll be connecting it to Mongo later in the week. - - -##Rubric -CRUD Routes: 4pts -Use of Express: 2pts -Tests: 2pts -Project Organization: 2pts diff --git a/gulpfile.js b/gulpfile.js index fdcf6b9..915d247 100644 --- a/gulpfile.js +++ b/gulpfile.js @@ -1,15 +1,11 @@ const gulp = require('gulp'); const eslint = require('gulp-eslint'); const mocha = require('gulp-mocha'); -const watch = require('gulp-watch'); gulp.task('lint', () => { gulp.src(['./*.js', './test/*.js']) .pipe(eslint({ - env: [ - 'mocha', - 'es6' - ] + env: {} })) .pipe(eslint.format()); }); diff --git a/lib/error_handling.js b/lib/error_handling.js index 5e297f9..b15db97 100644 --- a/lib/error_handling.js +++ b/lib/error_handling.js @@ -1,5 +1,5 @@ 'use strict'; -module.exports = function(err, req, res, next) { +module.exports = function(err, req, res) { res.status(500).json({message: err.message}); }; diff --git a/routes/auth_routes.js b/routes/auth_routes.js index b51e53f..53fbdca 100644 --- a/routes/auth_routes.js +++ b/routes/auth_routes.js @@ -14,9 +14,9 @@ router.post('/signup', bodyParser, (req, res, next) => { req.body.password = null; User.findOne({username: req.body.username}, (err, user) => { if(err || user) return next(new Error('could not create user')); - newUser.save((err, user) => { + newUser.save((err) => { if (err) return next(new Error('could not create user')); - res.json({token: user.generateToken()}); + res.json({token: 'token'}); }); }); }); @@ -26,6 +26,6 @@ router.get('/login', basicHTTP, (req, res, next) => { if(err || !user) return next(new Error('Could not login')); if (!user.comparePassword(req.auth.password)) return next('Could not sign in'); - res.json({token: user.generateToken()}); + res.json({token: 'token'}); }); }); diff --git a/routes/barca_routes.js b/routes/barca_routes.js index 354b146..594a078 100644 --- a/routes/barca_routes.js +++ b/routes/barca_routes.js @@ -24,7 +24,7 @@ router.post('/', bodyParser, (req, res) => { }); router.put('/', bodyParser, (req, res, next) => { - BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err, data) => { + BarcaPlayer.findOneAndUpdate({_id: req.body._id}, req.body, (err) => { if(err) return next(err); let message = 'successfully updated'; res.json({message}); @@ -33,7 +33,7 @@ router.put('/', bodyParser, (req, res, next) => { router.delete('/:id', bodyParser, (req, res, next) => { let _id = req.params.id; - BarcaPlayer.findOneAndRemove({_id}, null, (err,data) => { + BarcaPlayer.findOneAndRemove({_id}, null, (err) => { if(err) return next(err); let message = 'successfully deleted'; res.json({message}); diff --git a/routes/compare_route.js b/routes/compare_route.js index 429bbc6..2102c7b 100644 --- a/routes/compare_route.js +++ b/routes/compare_route.js @@ -1,14 +1,13 @@ 'use strict'; const express = require('express'); -const bodyParser = require('body-parser').json(); const BarcaPlayer = require('../model/barca_Player'); const ManUnitedPlayer = require('../model/man_United_Player'); const router = module.exports = exports = express.Router(); router.get('/mostGoals', (req, res, next) => { - let teamGoalArray = []; + let teamGoalArray = []; ManUnitedPlayer.find({}, (err, player)=>{ if (err) return next(err); @@ -26,11 +25,11 @@ router.get('/mostGoals', (req, res, next) => { teamGoalArray.push(totalBarcaGoalsScored); if (teamGoalArray[1] > teamGoalArray[0]) { - res.json("Barcalona players scored " + teamGoalArray[1] + " goals, which is more than Man United Players.") + res.json('Barcalona players scored ' + teamGoalArray[1] + ' goals, which is more than Man United Players.'); } else if (teamGoalArray[1] < teamGoalArray[0]) { - res.json("Man United players scored " + teamGoalArray[0] + " goals, which is more than Barcalona Players.") + res.json('Man United players scored ' + teamGoalArray[0] + ' goals, which is more than Barcalona Players.'); } else { - res.json("They scored the same amount.") + res.json('They scored the same amount.'); } }); diff --git a/routes/man_united_routes.js b/routes/man_united_routes.js index 5d36aea..c66948f 100644 --- a/routes/man_united_routes.js +++ b/routes/man_united_routes.js @@ -27,7 +27,7 @@ router.post('/', bodyParser, (req, res) => { router.put('/', bodyParser, (req, res, next) => { let _id = req.body._id; - ManUnitedPlayer.findOneAndUpdate({_id}, req.body, (err,data) => { + ManUnitedPlayer.findOneAndUpdate({_id}, req.body, (err) => { if(err) return next(err); let message = 'successfully updated'; res.json({message}); @@ -36,7 +36,7 @@ router.put('/', bodyParser, (req, res, next) => { router.delete('/:id', bodyParser, (req, res, next) => { let _id = req.params.id; - ManUnitedPlayer.findOneAndRemove({_id}, null, (err,data) => { + ManUnitedPlayer.findOneAndRemove({_id}, null, (err) => { if(err) return next(err); let message = 'successfully deleted'; res.json({message}); diff --git a/schema/barca_Player.js b/schema/barca_Player.js new file mode 100644 index 0000000..b44d552 --- /dev/null +++ b/schema/barca_Player.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const BarcaPlayer = new mongoose.Schema({ + name: String, + position: String, + number: Number, + goals: Number +}); + +module.exports = mongoose.model('barca', BarcaPlayer); diff --git a/schema/man_United_Player.js b/schema/man_United_Player.js new file mode 100644 index 0000000..4850abb --- /dev/null +++ b/schema/man_United_Player.js @@ -0,0 +1,12 @@ +'use strict'; + +const mongoose = require('mongoose'); + +const ManUnitedPlayer = new mongoose.Schema({ + name: String, + position: String, + number: Number, + goals: Number +}); + +module.exports = mongoose.model('manUnitedPlayer', ManUnitedPlayer); diff --git a/server.js b/server.js index 4a69b80..02347b3 100644 --- a/server.js +++ b/server.js @@ -12,7 +12,7 @@ const dbPort = process.env.MONGOLAB_URI || 'mongodb://localhost/dev_db'; app.use(morgan('dev')); -mongoose.connect('mongodb://localhost/dev_db'); +mongoose.connect(dbPort); const manUnitedRouter = require('./routes/man_united_routes'); const barcaRouter = require('./routes/barca_routes'); @@ -33,7 +33,7 @@ app.post('/test', bodyParser, jwtAuth, (req, res) => { res.json({message: 'need a token', user: req.user}); }); -app.use((err, req, res, next) => { +app.use((err, req, res) => { res.status(500).json({message: err.message}); }); diff --git a/test/auth_route_test.js b/test/auth_route_test.js index 128a5bc..bee3e32 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -2,63 +2,45 @@ const chai = require('chai'); const chaiHTTP = require('chai-http'); -const User = require('../model/user'); const mongoose = require('mongoose'); chai.use(chaiHTTP); -const jwt = require('jsonwebtoken'); const expect = chai.expect; const request = chai.request; - -const secret = process.env.SECRET || 'changeme'; const dbPort = process.env.MONGOLAB_URI; process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; require('../server'); describe('Authorization router tests', () => { - - let testUser; - beforeEach((done) => { - let newUser = new User({ - username: 'testuser', - password: '$2a$08$tExN9A1AEkj.V9ea5IMdPOyU6haLngPQgnsmpdIUce14Vk.3cSTqe' - }); - newUser.save((err, user) => { - testUser = user; - done(); - }); + after((done) => { + process.env.MONGOLAB_URI = dbPort; + mongoose.connection.db.dropDatabase(() => { + done(); }); - - after((done) => { - process.env.MONGOLAB_URI = dbPort; - mongoose.connection.db.dropDatabase(() => { + }); + describe('Authorization tests', () => { + it('Should sign up a new user', (done) => { + request('localhost:6969') + .post('/auth/signup') + .send({username: 'testy', password: 'test'}) + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql('token'); done(); }); }); - - // it('Should sign up a new user', (done) => { - // request('localhost:6969') - // .post('/auth/signup') - // .send({username: 'testy', password: 'test'}) - // .end((err, res) => { - // expect(err).to.eql(null); - // expect(res).to.have.status(200); - // expect(res.body.token).to.eql(User); - // done(); - // }); - // }); it('Should login a user', (done) => { request('localhost:6969') .get('/auth/login') - .auth('testuser', 'test') + .auth('testy', 'test') .end((err, res) => { expect(err).to.eql(null); expect(res).to.have.status(200); - expect(res.body.token).to.eql(jwt.sign({ - _id: testUser._id - }, secret)); + expect(res.body.token).to.eql('token'); done(); }); }); + }); }); diff --git a/test/rest_api_test.js b/test/rest_api_test.js index d5a224b..aed75e3 100644 --- a/test/rest_api_test.js +++ b/test/rest_api_test.js @@ -44,7 +44,7 @@ describe('Router tests', () => { }); }); - describe('Man United tests that need data', (done) => { + describe('Man United tests that need data', () => { let testManUPlayer; beforeEach((done) => { let newManUPlayer = new ManUnitedPlayer({name: 'test', goals:20}); @@ -103,7 +103,7 @@ describe('Router tests', () => { }); }); - describe('Barca tests that need data', (done) => { + describe('Barca tests that need data', () => { let testBarcaPlayer; beforeEach((done) => { let newBarcaPlayer = new BarcaPlayer({name: 'test', goals: 100}); diff --git a/test/token_tests.js b/test/token_tests.js index 58ce144..8c26f48 100644 --- a/test/token_tests.js +++ b/test/token_tests.js @@ -2,7 +2,6 @@ const chai = require('chai'); const chaiHTTP = require('chai-http'); -const User = require('../model/user'); const mongoose = require('mongoose'); chai.use(chaiHTTP); From 1f40ee3674c08fddb0edd626d416b7b06c8e1464 Mon Sep 17 00:00:00 2001 From: YOUR FULL NAME Date: Sun, 5 Jun 2016 10:23:58 -0700 Subject: [PATCH 65/65] added token generator --- lib/jwt_auth.js | 2 +- npm-debug.log | 43 +++++++++++++++++++++++++++ routes/auth_routes.js | 6 ++-- test/auth_route_test.js | 65 ++++++++++++++++++++++++++++------------- 4 files changed, 91 insertions(+), 25 deletions(-) create mode 100644 npm-debug.log diff --git a/lib/jwt_auth.js b/lib/jwt_auth.js index 6e1d38b..b821b24 100644 --- a/lib/jwt_auth.js +++ b/lib/jwt_auth.js @@ -4,7 +4,7 @@ const jwt = require('jsonwebtoken'); const User = require('../model/user'); const secret = process.env.SECRET || 'changeme'; -module.exports = function(req, res, next) { +module.exports = function (req, res, next) { let token = req.body.token || req.headers.token; let tokenErr = new Error('Authorization Failure'); let decodedToken; diff --git a/npm-debug.log b/npm-debug.log new file mode 100644 index 0000000..5e0f2d4 --- /dev/null +++ b/npm-debug.log @@ -0,0 +1,43 @@ +0 info it worked if it ends with ok +1 verbose cli [ '/Users/drewferris/.node/bin/node', +1 verbose cli '/Users/drewferris/.node/bin/npm', +1 verbose cli 'run', +1 verbose cli 'lint' ] +2 info using npm@2.15.1 +3 info using node@v4.4.3 +4 verbose run-script [ 'prelint', 'lint', 'postlint' ] +5 info prelint man-united@1.0.0 +6 info lint man-united@1.0.0 +7 verbose unsafe-perm in lifecycle true +8 info man-united@1.0.0 Failed to exec lint script +9 verbose stack Error: man-united@1.0.0 lint: `./node_modules/eslint/bin/eslint.js *` +9 verbose stack Exit status 1 +9 verbose stack at EventEmitter. (/Users/drewferris/.node/lib/node_modules/npm/lib/utils/lifecycle.js:217:16) +9 verbose stack at emitTwo (events.js:87:13) +9 verbose stack at EventEmitter.emit (events.js:172:7) +9 verbose stack at ChildProcess. (/Users/drewferris/.node/lib/node_modules/npm/lib/utils/spawn.js:24:14) +9 verbose stack at emitTwo (events.js:87:13) +9 verbose stack at ChildProcess.emit (events.js:172:7) +9 verbose stack at maybeClose (internal/child_process.js:827:16) +9 verbose stack at Process.ChildProcess._handle.onexit (internal/child_process.js:211:5) +10 verbose pkgid man-united@1.0.0 +11 verbose cwd /Users/drewferris/401/my_assignmnents/drew_rest_api +12 error Darwin 14.5.0 +13 error argv "/Users/drewferris/.node/bin/node" "/Users/drewferris/.node/bin/npm" "run" "lint" +14 error node v4.4.3 +15 error npm v2.15.1 +16 error code ELIFECYCLE +17 error man-united@1.0.0 lint: `./node_modules/eslint/bin/eslint.js *` +17 error Exit status 1 +18 error Failed at the man-united@1.0.0 lint script './node_modules/eslint/bin/eslint.js *'. +18 error This is most likely a problem with the man-united package, +18 error not with npm itself. +18 error Tell the author that this fails on your system: +18 error ./node_modules/eslint/bin/eslint.js * +18 error You can get information on how to open an issue for this project with: +18 error npm bugs man-united +18 error Or if that isn't available, you can get their info via: +18 error +18 error npm owner ls man-united +18 error There is likely additional logging output above. +19 verbose exit [ 1, true ] diff --git a/routes/auth_routes.js b/routes/auth_routes.js index 53fbdca..b51e53f 100644 --- a/routes/auth_routes.js +++ b/routes/auth_routes.js @@ -14,9 +14,9 @@ router.post('/signup', bodyParser, (req, res, next) => { req.body.password = null; User.findOne({username: req.body.username}, (err, user) => { if(err || user) return next(new Error('could not create user')); - newUser.save((err) => { + newUser.save((err, user) => { if (err) return next(new Error('could not create user')); - res.json({token: 'token'}); + res.json({token: user.generateToken()}); }); }); }); @@ -26,6 +26,6 @@ router.get('/login', basicHTTP, (req, res, next) => { if(err || !user) return next(new Error('Could not login')); if (!user.comparePassword(req.auth.password)) return next('Could not sign in'); - res.json({token: 'token'}); + res.json({token: user.generateToken()}); }); }); diff --git a/test/auth_route_test.js b/test/auth_route_test.js index bee3e32..970182d 100644 --- a/test/auth_route_test.js +++ b/test/auth_route_test.js @@ -1,46 +1,69 @@ + 'use strict'; const chai = require('chai'); const chaiHTTP = require('chai-http'); +const User = require('../model/user'); const mongoose = require('mongoose'); chai.use(chaiHTTP); +const jwt = require('jsonwebtoken'); const expect = chai.expect; const request = chai.request; + +const secret = process.env.SECRET || 'changeme'; const dbPort = process.env.MONGOLAB_URI; process.env.MONGOLAB_URI = 'mongodb://localhost/test_db'; require('../server'); describe('Authorization router tests', () => { + let testUser; + beforeEach((done) => { + let newUser = new User({ + username: 'testuser', + password: '$2a$08$tExN9A1AEkj.V9ea5IMdPOyU6haLngPQgnsmpdIUce14Vk.3cSTqe' + }); + newUser.save((err, user) => { + testUser = user; + done(); + }); + }); + after((done) => { process.env.MONGOLAB_URI = dbPort; mongoose.connection.db.dropDatabase(() => { done(); }); }); - describe('Authorization tests', () => { - it('Should sign up a new user', (done) => { - request('localhost:6969') - .post('/auth/signup') - .send({username: 'testy', password: 'test'}) - .end((err, res) => { - expect(err).to.eql(null); - expect(res).to.have.status(200); - expect(res.body.token).to.eql('token'); - done(); - }); + + + it('Should login a user', (done) => { + request('localhost:6969') + .get('/auth/login') + .auth('testuser', 'test') + .end((err, res) => { + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql(jwt.sign({ + _id: testUser._id + }, secret)); + done(); + }); + }); + + it('Should sign up a new user', (done) => { + request('localhost:6969') + .post('/auth/signup') + .set('Content-Type', 'application/json') + .send({username: 'testy', password: 'test'}) + .end((err, res) => {User.find({username: 'testy'}, (err, user) => { + if (err) return err; + expect(err).to.eql(null); + expect(res).to.have.status(200); + expect(res.body.token).to.eql(jwt.sign({_id: user[0]._id}, secret)); + done(); }); - it('Should login a user', (done) => { - request('localhost:6969') - .get('/auth/login') - .auth('testy', 'test') - .end((err, res) => { - expect(err).to.eql(null); - expect(res).to.have.status(200); - expect(res.body.token).to.eql('token'); - done(); - }); }); }); });