├── .gitignore ├── server ├── db │ └── mongoose.js ├── models │ ├── user.js │ └── Todo.js └── server.js ├── package.json ├── playground ├── mongodb-delete.js ├── mongodb-update.js ├── mongodb-connect.js └── mongodb-find.js └── tests └── server.test.js /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules/ -------------------------------------------------------------------------------- /server/db/mongoose.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | mongoose.Promise=global.Promise; 4 | mongoose.connect('mongodb://localhost:27017/TodoApp'); 5 | 6 | module.exports ={mongoose}; -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "todo-api", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "test": "echo \"Error: no test specified\" && exit 1" 8 | }, 9 | "author": "", 10 | "license": "ISC", 11 | "dependencies": { 12 | "mongodb": "^2.2.5" 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /server/models/user.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | 3 | //another model Users 4 | // email -requrei --trim --string set min length 5 | var User = mongoose.model('User',{ 6 | email:{ 7 | type:String, 8 | required:true, 9 | minlength:1, 10 | trim:true 11 | } 12 | }); 13 | 14 | module.exports = {User}; -------------------------------------------------------------------------------- /server/models/Todo.js: -------------------------------------------------------------------------------- 1 | var mongoose = require('mongoose'); 2 | //create a model 3 | //todo model 4 | var Todo = mongoose.model('Todo',{ 5 | text:{ 6 | type:String, 7 | required:true, 8 | minlength:1, 9 | trim :true //remove withesapce at ends 10 | }, 11 | completed:{ 12 | type:Boolean, 13 | default:false 14 | }, 15 | completedAt:{ 16 | type:Number, 17 | default:null 18 | } 19 | });; 20 | 21 | module.exports = {Todo}; -------------------------------------------------------------------------------- /playground/mongodb-delete.js: -------------------------------------------------------------------------------- 1 | //const MongoClient =require('mongodb').MongoClient; 2 | const {MongoClient,ObjectID} = require('mongodb'); 3 | 4 | 5 | 6 | 7 | MongoClient.connect('mongodb://localhost:27017/TodoApp',(err,db)=>{ 8 | if(err) 9 | { 10 | return console.log('Unable to connect to MOngDB server'); 11 | 12 | } 13 | console.log('Connected to MongoDB Server'); 14 | 15 | //deleteMany 16 | // db.collection('Todos').deleteMany({text:'eat lunch'}).then((result)=>{ 17 | // console.log(result); 18 | 19 | // }); 20 | 21 | //deleteOne 22 | // db.collection('Todos').deleteOne({text:'eat lunch'}).then((result)=>{ 23 | // console.log(result); 24 | // }); 25 | 26 | //findOneAndDelete 27 | // db.collection('Todos').findOneAndDelete({completed:false}).then((result)=>{ 28 | // console.log(result); 29 | // }); 30 | 31 | 32 | db.collection('Users').deleteMany({name:'Ashlesh'}); 33 | 34 | db.collection('Users').findOneAndDelete({_id: new ObjectID('5bb2faffdd1de8a7bd365a8f')}).then((results)=>{ 35 | console.log(JSON.stringify(results,undefined,2)); 36 | 37 | }); 38 | //db.close(); 39 | 40 | }); -------------------------------------------------------------------------------- /playground/mongodb-update.js: -------------------------------------------------------------------------------- 1 | //const MongoClient =require('mongodb').MongoClient; 2 | const {MongoClient,ObjectID} = require('mongodb'); 3 | 4 | 5 | 6 | 7 | MongoClient.connect('mongodb://localhost:27017/TodoApp',(err,db)=>{ 8 | if(err) 9 | { 10 | return console.log('Unable to connect to MOngDB server'); 11 | 12 | } 13 | console.log('Connected to MongoDB Server'); 14 | 15 | 16 | //finOneAndUpdate 17 | // db.collection('Todos').findOneAndUpdate( 18 | // {_id:new ObjectID('5bb3024edd1de8a7bd365bab') 19 | // },{ 20 | // $set :{ 21 | // completed : true 22 | // } 23 | // },{ 24 | // returnOriginal:false 25 | // }).then((result)=>{ 26 | // console.log(result); 27 | 28 | // }); 29 | 30 | db.collection('Users').findOneAndUpdate( 31 | { _id : new ObjectID('5bb2fad7dd1de8a7bd365a7f') 32 | },{ 33 | $set :{ 34 | name : 'Ashleshk' 35 | 36 | }, 37 | $inc:{age:1} 38 | },{ 39 | returnOriginal:false 40 | }).then((result)=>{ 41 | console.log(result); 42 | 43 | }); 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | //db.close(); 52 | 53 | }); -------------------------------------------------------------------------------- /playground/mongodb-connect.js: -------------------------------------------------------------------------------- 1 | //const MongoClient =require('mongodb').MongoClient; 2 | const {MongoClient,ObjectID} = require('mongodb'); 3 | 4 | // var user={name:'Ashlesh',age:21}; 5 | // var {name} =user; 6 | // console.log(name); 7 | var obj = new ObjectID(); 8 | console.log(obj); 9 | 10 | 11 | MongoClient.connect('mongodb://localhost:27017/TodoApp',(err,db)=>{ 12 | if(err) 13 | { 14 | return console.log('Unable to connect to MOngDB server'); 15 | 16 | } 17 | console.log('Connected to MongoDB Server'); 18 | 19 | // db.collection('Todos').insertOne({ 20 | // text:'Something to do', 21 | // completed:false 22 | 23 | // },(err,result)=>{ 24 | // if(err) 25 | // { 26 | // return console.log('Unable to insert TODO', err); 27 | 28 | // } 29 | // console.log(JSON.stringify(result.ops,undefined,2)); 30 | 31 | // }); 32 | // db.collection('Users').insertOne({ 33 | // name:'Ashlesh', 34 | // age:21, 35 | // location:'pune' 36 | // },(err,result)=>{ 37 | // if(err) 38 | // { 39 | // return console.log('Unable to insert user ',err); 40 | // } 41 | // console.log(result.ops[0]._id.getTimestamp()); 42 | 43 | // }); 44 | 45 | 46 | db.close(); 47 | 48 | }); -------------------------------------------------------------------------------- /tests/server.test.js: -------------------------------------------------------------------------------- 1 | const expect = require('expect'); 2 | const request = require('supertest'); 3 | 4 | const {app} = require('./../server'); 5 | const {Todo} = require('./../models/Todo'); 6 | 7 | beforeEach((done) => { 8 | Todo.remove({}).then(() => done()); 9 | }); 10 | 11 | describe('POST /todos', () => { 12 | it('should create a new todo', (done) => { 13 | var text = 'Test todo text'; 14 | 15 | request(app) 16 | .post('/todos') 17 | .send({text}) 18 | .expect(200) 19 | .expect((res) => { 20 | expect(res.body.text).toBe(text); 21 | }) 22 | .end((err, res) => { 23 | if (err) { 24 | return done(err); 25 | } 26 | 27 | Todo.find().then((todos) => { 28 | expect(todos.length).toBe(1); 29 | expect(todos[0].text).toBe(text); 30 | done(); 31 | }).catch((e) => done(e)); 32 | }); 33 | }); 34 | 35 | it('should not create todo with invalid body data', (done) => { 36 | request(app) 37 | .post('/todos') 38 | .send({}) 39 | .expect(400) 40 | .end((err, res) => { 41 | if (err) { 42 | return done(err); 43 | } 44 | 45 | Todo.find().then((todos) => { 46 | expect(todos.length).toBe(0); 47 | done(); 48 | }).catch((e) => done(e)); 49 | }); 50 | }); 51 | }); 52 | -------------------------------------------------------------------------------- /playground/mongodb-find.js: -------------------------------------------------------------------------------- 1 | //const MongoClient =require('mongodb').MongoClient; 2 | const {MongoClient,ObjectID} = require('mongodb'); 3 | 4 | 5 | 6 | 7 | MongoClient.connect('mongodb://localhost:27017/TodoApp',(err,db)=>{ 8 | if(err) 9 | { 10 | return console.log('Unable to connect to MOngDB server'); 11 | 12 | } 13 | console.log('Connected to MongoDB Server'); 14 | 15 | // db.collection('Todos').find({ 16 | // _id :new ObjectID('5bb2f3b9dd1de8a7bd3658e0') 17 | // }).toArray().then((docs)=>{ 18 | // console.log('Todos'); 19 | // console.log(JSON.stringify(docs,undefined,2)); 20 | 21 | 22 | // },(err)=>{ 23 | // console.log('Unable to fetch todos',err); 24 | // }); 25 | 26 | // db.collection('Todos').find().count().then((count)=>{ 27 | // console.log(`Todo count :${count}`); 28 | // console.log(JSON.stringify(count,undefined,2)); 29 | 30 | 31 | // },(err)=>{ 32 | // console.log('Unable to fetch todos',err); 33 | // }); 34 | //the challenges for the collection 35 | db.collection('Users').find({name:'Ashleshk'}).count().then((count)=>{ 36 | console.log(`Todo count :${count}`); 37 | console.log(JSON.stringify(count,undefined,2)); 38 | 39 | 40 | },(err)=>{ 41 | console.log('Unable to fetch todos',err); 42 | }); 43 | 44 | // db.close(); 45 | 46 | }); 47 | -------------------------------------------------------------------------------- /server/server.js: -------------------------------------------------------------------------------- 1 | //library imports 2 | var express =require('express'); 3 | var bodyParser= require('body-parser'); 4 | 5 | 6 | //local imports 7 | var {mongoose} = require('./db/mongoose'); 8 | var {Todo} = require('./models/Todo'); 9 | var {User} =require('./models/user'); 10 | 11 | 12 | 13 | //basic app setup 14 | var app = express(); 15 | //middleware 16 | app.use(bodyParser.json()); 17 | 18 | //configurung the routes 19 | //POST Route:: 20 | //CRUD _CREATE, read ,update and delete 21 | app.post('/todos',(req,res)=>{ 22 | //console.log(req.body); 23 | var todo = new Todo({ 24 | text: req.body.text 25 | }); 26 | todo.save().then((doc)=>{ 27 | res.send(doc); 28 | }, 29 | (e)=>{ 30 | res.status(400).send(e); 31 | 32 | }); 33 | }); 34 | 35 | app.get('/todos',(req,res)=>{ 36 | Todo.find().then((todos)=>{ 37 | res.send({todos}); 38 | },(e)=>{ 39 | res.status(400).send(e); 40 | }); 41 | }); 42 | 43 | 44 | //app listerner 45 | app.listen(3000,()=>{ 46 | console.log('Started on port 3000....'); 47 | 48 | }); 49 | 50 | module.exports = {app}; 51 | //created a new todo 52 | // var newTodo = new Todo({ 53 | // text:'Cook dinner' 54 | // }); 55 | 56 | // var newTodo2 = new Todo({ 57 | // text:'play games', 58 | // completed:true, 59 | // completedAt:5 60 | // }); 61 | //saving to the database 62 | //for saving the data 63 | 64 | // newTodo.save().then((doc)=>{ 65 | // console.log('Saved todo',doc); 66 | 67 | // },(e)=>{ 68 | // console.log('unable to save todo..'); 69 | 70 | // }); 71 | 72 | // var user =new User({ 73 | // email:'ashleshuk@gmail.com' 74 | // }); 75 | // user.save().then((doc)=>{ 76 | // console.log('User saved ',doc); 77 | 78 | // },(e)=>{ 79 | // console.log('Uanble to create user',e); 80 | 81 | // }); 82 | 83 | // newTodo2.save().then((doc)=>{ 84 | // console.log('Saved todo',doc); 85 | 86 | // },(e)=>{ 87 | // console.log('unable to save todo..'); 88 | 89 | // }); 90 | --------------------------------------------------------------------------------