From e78279a0e657ba1ef6511c01fb6a7c9fd9a1310d Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 1 Apr 2020 14:23:47 +0800 Subject: [PATCH 1/2] josh119891 --- app/.env | 1 + app/package.json | 18 ++++++++ app/routes/player.js | 76 ++++++++++++++++++++++++++++++++++ app/schema/player.js | 11 +++++ app/server.js | 28 ++++++++++++- app/test/player.js | 98 ++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 231 insertions(+), 1 deletion(-) create mode 100644 app/.env create mode 100644 app/routes/player.js create mode 100644 app/schema/player.js create mode 100644 app/test/player.js diff --git a/app/.env b/app/.env new file mode 100644 index 0000000..7fdcc8e --- /dev/null +++ b/app/.env @@ -0,0 +1 @@ +mongoURL = mongodb://localhost:27017/examination \ No newline at end of file diff --git a/app/package.json b/app/package.json index 6b480b3..3854cf1 100755 --- a/app/package.json +++ b/app/package.json @@ -5,16 +5,34 @@ "description": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB.", "main": "server.js", "scripts": { +<<<<<<< HEAD "start": "NODE_ENV=development node server.js", "start:prod": "NODE_ENV=production node server.js", "test": "echo \"Error: no test specified\" && exit 1" }, "dependencies": { +======= + "start": "NODE_ENV=development nodemon server.js", + "start:prod": "NODE_ENV=production node server.js", + "test": "mocha test/player.js" + }, + "dependencies": { + "body-parser": "^1.19.0", + "dotenv": "^8.2.0", +>>>>>>> josh119891 "express": "^4.17.1", "mongoose": "^5.9.2" }, "devDependencies": { +<<<<<<< HEAD "chai": "^4.2.0" +======= + "axios": "^0.19.2", + "chai": "^4.2.0", + "chai-http": "^4.3.0", + "mocha": "^7.1.1", + "superagent": "^5.2.2" +>>>>>>> josh119891 }, "engines": { "node": ">=10.15.0" diff --git a/app/routes/player.js b/app/routes/player.js new file mode 100644 index 0000000..6d56dc2 --- /dev/null +++ b/app/routes/player.js @@ -0,0 +1,76 @@ +const express = require('express'); +const route = express.Router(); +const Player = require('../schema/player') + +const array = [ "C", "PF", "SF", "PG", "SG" ]; + +route.get('/',getAllPlayers) +route.get('/:id', getOnePlayer) +route.put('/', updatePlayer) +route.post('/', createPlayer) +route.delete('/:id', deletePlayer) + +async function getAllPlayers(req,res){ + return res.send(await Player.find({})); +} + +async function createPlayer(req, res){ + const {name,id,position}=req.body; + if(name && (!isNaN(id)) && position && array.includes(position)){ + + const result =await Player.create(req.body); + return res.send(result); + + } + return res.send('Invalid input'); +} + + + +async function updatePlayer(req, res){ + const {name,id,position}=req.body; + if(!(name && position && (!isNaN(id)) && array.includes(position))){ + return res.send('Validation exception'); + } + + const player = await Player.findOne({id}); + if(!player){ + return res.send("Player not found"); + } + player.name=name; + player.position=position; + await player.save(); + + return res.send(await Player.findOne({id})); +} + + +async function getOnePlayer (req, res) { + const id = req.params.id; + if(isNaN(id)){ + return res.send('invaliated Input'); + } + const player = await Player.findOne({id}); + if(!player){ + return res.send("Player not found"); + } + res.send(player); +} + + +async function deletePlayer(req, res) { + const id = req.params.id; + + if(isNaN(id)){ + return res.send("Invalid ID supplied"); + } + const player = await Player.findOne({id}); + if(!player){ + return res.send("Player not found"); + } + await Player.findOneAndDelete({id},req.body) + return res.send({status:0,message:"deleted"}); +} + + +module.exports = route \ No newline at end of file diff --git a/app/schema/player.js b/app/schema/player.js new file mode 100644 index 0000000..5495511 --- /dev/null +++ b/app/schema/player.js @@ -0,0 +1,11 @@ +const mongoose = require('mongoose'); +const playerSchema = mongoose.Schema({ + name:{type:String}, + id:{type:Number}, + position:{type:String} +}); + + + + +module.exports=mongoose.model('player',playerSchema); \ No newline at end of file diff --git a/app/server.js b/app/server.js index 72e5b39..3fe952c 100755 --- a/app/server.js +++ b/app/server.js @@ -1,11 +1,37 @@ const express = require('express'); +<<<<<<< HEAD const app = express(); +======= +const bodyParser = require('body-parser') +const app = express(); +require('dotenv').config() +app.use(bodyParser.json()) +>>>>>>> josh119891 app.get('/', (req, res) => { res.json({"message": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB."}); }); +<<<<<<< HEAD +app.listen(3000, () => { + console.log("Server is listening on port 3000"); +}); +======= +const mongoose = require('mongoose'); +mongoose.connect('mongodb://localhost:27017/examination',{ useUnifiedTopology: true,useNewUrlParser: true }); +mongoose.connection.on("error",function(error){ + console.log("ERROR"+error); +}); +mongoose.connection.on("open",function(error){ + console.log("MONGO WORKING"); +}); + +app.use('/player', require('./routes/player')); + app.listen(3000, () => { console.log("Server is listening on port 3000"); -}); \ No newline at end of file +}); + +module.exports= app +>>>>>>> josh119891 diff --git a/app/test/player.js b/app/test/player.js new file mode 100644 index 0000000..bcf95f3 --- /dev/null +++ b/app/test/player.js @@ -0,0 +1,98 @@ +const mongoose = require("mongoose"); +const Player = require('../schema/player'); +require('dotenv').config() +var chaiHttp = require('chai-http'); +const assert = require('assert'); +const chai = require('chai'); +const server = require('../server'); +var should = chai.should(); + + +chai.use(chaiHttp); + +describe('REST API',()=>{ + + + beforeEach(function(done){ + let newPlayer = new Player({ + name: "Leborn", + id: 0, + position: "C" + }); + newPlayer.save(function(err) { + done(); + }); + }); + afterEach(function(done){ + Player.collection.drop(); + done(); + }); + it('Create One player',(done)=>{ + chai.request(server) + .post('/player') + .send({'name': 'asdf', 'position': 'C', 'id':1}) + .end(function(err, res){ + res.should.have.status(200); + res.should.be.json; + res.body.should.be.a('object'); + res.body.should.have.property('name'); + res.body.should.have.property('position'); + res.body.should.have.property('id'); + res.body.name.should.equal('asdf'); + res.body.id.should.equal(1); + res.body.position.should.equal('C'); + done(); + }); + + }) + it('Update One player',(done)=>{ + chai.request(server) + .put('/player/') + .send({'name': 'asdf', 'position': 'C', 'id':0}) + .end(function(err, res){ + res.should.have.status(200); + res.should.be.json; + res.body.should.have.property('id'); + res.body.should.have.property('name'); + res.body.should.have.property('position'); + res.body.name.should.equal('asdf'); + res.body.position.should.equal('C'); + res.body.id.should.equal(0); + + done(); + }) + }) + //using :id + it('Get One player',(done)=>{ + chai.request(server) + .get('/player/0') + .end(function(err, res){ + res.should.have.status(200); + res.should.be.json; + res.body.should.have.property('_id'); + res.body.should.have.property('name'); + res.body.should.have.property('position'); + res.body.name.should.equal('Leborn'); + res.body.position.should.equal('C'); + done(); + }) + }) + it('Delete One player',(done)=>{ + chai.request(server) + .delete('/player/0') + .end(function(err, res){ + res.should.have.status(200); + res.should.be.json; + res.body.should.have.property('status'); + res.body.should.have.property('message'); + res.body.status.should.equal(0); + res.body.message.should.equal('deleted'); + + done(); + }) + }) + + + +}) + From e1ae7389677058369ebc7acb04ef29c8ba83bf7e Mon Sep 17 00:00:00 2001 From: josh Date: Wed, 1 Apr 2020 15:34:35 +0800 Subject: [PATCH 2/2] changed --- app/package.json | 17 +---------------- app/routes/player.js | 4 +--- app/server.js | 13 +------------ app/test/player.js | 1 - 4 files changed, 3 insertions(+), 32 deletions(-) diff --git a/app/package.json b/app/package.json index 3854cf1..a3fb9e2 100755 --- a/app/package.json +++ b/app/package.json @@ -5,13 +5,6 @@ "description": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB.", "main": "server.js", "scripts": { -<<<<<<< HEAD - "start": "NODE_ENV=development node server.js", - "start:prod": "NODE_ENV=production node server.js", - "test": "echo \"Error: no test specified\" && exit 1" - }, - "dependencies": { -======= "start": "NODE_ENV=development nodemon server.js", "start:prod": "NODE_ENV=production node server.js", "test": "mocha test/player.js" @@ -19,20 +12,12 @@ "dependencies": { "body-parser": "^1.19.0", "dotenv": "^8.2.0", ->>>>>>> josh119891 "express": "^4.17.1", "mongoose": "^5.9.2" }, "devDependencies": { -<<<<<<< HEAD - "chai": "^4.2.0" -======= - "axios": "^0.19.2", "chai": "^4.2.0", - "chai-http": "^4.3.0", - "mocha": "^7.1.1", - "superagent": "^5.2.2" ->>>>>>> josh119891 + "mocha": "^7.1.1" }, "engines": { "node": ">=10.15.0" diff --git a/app/routes/player.js b/app/routes/player.js index 6d56dc2..bd4c1a0 100644 --- a/app/routes/player.js +++ b/app/routes/player.js @@ -17,10 +17,8 @@ async function getAllPlayers(req,res){ async function createPlayer(req, res){ const {name,id,position}=req.body; if(name && (!isNaN(id)) && position && array.includes(position)){ - const result =await Player.create(req.body); return res.send(result); - } return res.send('Invalid input'); } @@ -41,7 +39,7 @@ async function updatePlayer(req, res){ player.position=position; await player.save(); - return res.send(await Player.findOne({id})); + return res.send(player); } diff --git a/app/server.js b/app/server.js index 3fe952c..c16eb65 100755 --- a/app/server.js +++ b/app/server.js @@ -1,23 +1,13 @@ const express = require('express'); -<<<<<<< HEAD - -const app = express(); -======= const bodyParser = require('body-parser') const app = express(); require('dotenv').config() app.use(bodyParser.json()) ->>>>>>> josh119891 app.get('/', (req, res) => { res.json({"message": "Building a RESTful CRUD API with Node.js, Express/Koa and MongoDB."}); }); -<<<<<<< HEAD -app.listen(3000, () => { - console.log("Server is listening on port 3000"); -}); -======= const mongoose = require('mongoose'); mongoose.connect('mongodb://localhost:27017/examination',{ useUnifiedTopology: true,useNewUrlParser: true }); mongoose.connection.on("error",function(error){ @@ -33,5 +23,4 @@ app.listen(3000, () => { console.log("Server is listening on port 3000"); }); -module.exports= app ->>>>>>> josh119891 +module.exports= app \ No newline at end of file diff --git a/app/test/player.js b/app/test/player.js index bcf95f3..8c9885c 100644 --- a/app/test/player.js +++ b/app/test/player.js @@ -1,4 +1,3 @@ -const mongoose = require("mongoose"); const Player = require('../schema/player'); require('dotenv').config() var chaiHttp = require('chai-http');