api fixes

This commit is contained in:
2018-05-23 20:46:47 +03:00
parent 76b6f76758
commit 3a8df79bf5
7 changed files with 46 additions and 23 deletions

1
app.js
View File

@@ -8,6 +8,7 @@ require('./models/TodoList');
require('./models/Todo'); require('./models/Todo');
app.use('/lists', require('./routes/lists')); app.use('/lists', require('./routes/lists'));
app.use('/todos', require('./routes/todos'));
// 404 route // 404 route
app.use((req, res) => { app.use((req, res) => {

View File

@@ -2,13 +2,15 @@ const express = require('express');
const bodyParser = require('body-parser'); const bodyParser = require('body-parser');
const methodOverride = require('method-override'); const methodOverride = require('method-override');
const morgan = require('morgan'); const morgan = require('morgan');
const cors = require('cors');
const app = express(); const app = express();
app.use(bodyParser.urlencoded({ extended: false })); app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json()); app.use(bodyParser.json());
app.use(cors());
app.use(morgan('tiny')); app.use(morgan('dev'));
app.use(methodOverride('_method')); app.use(methodOverride('_method'));

View File

@@ -29,6 +29,7 @@ TodoSchema.methods.toJson = function () {
id: this._id.toString(), id: this._id.toString(),
text: this.text, text: this.text,
list: this.list.toString(), list: this.list.toString(),
completed: this.completed,
}; };
}; };

32
package-lock.json generated
View File

@@ -1649,6 +1649,15 @@
"integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=", "integrity": "sha1-tf1UIgqivFq1eqtxQMlAdUUDwac=",
"dev": true "dev": true
}, },
"cors": {
"version": "2.8.4",
"resolved": "https://registry.npmjs.org/cors/-/cors-2.8.4.tgz",
"integrity": "sha1-K9OB8usgECAQXNUOpZ2mMJBpRoY=",
"requires": {
"object-assign": "^4",
"vary": "^1"
}
},
"create-error-class": { "create-error-class": {
"version": "3.0.2", "version": "3.0.2",
"resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz", "resolved": "https://registry.npmjs.org/create-error-class/-/create-error-class-3.0.2.tgz",
@@ -4621,11 +4630,6 @@
"verror": "1.10.0" "verror": "1.10.0"
} }
}, },
"kareem": {
"version": "2.0.7",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.0.7.tgz",
"integrity": "sha512-p8+lEpsNs4N0fvNOC1/zzDO0wDrD3Pb1G+OwfIG+gKVK3MyY5jeaGYh+9Qx6jb4fEG2b3E6U98vaE9MH7Gilsw=="
},
"kind-of": { "kind-of": {
"version": "3.2.2", "version": "3.2.2",
"resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz",
@@ -4970,13 +4974,13 @@
} }
}, },
"mongoose": { "mongoose": {
"version": "5.1.1", "version": "5.1.2",
"resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.1.tgz", "resolved": "https://registry.npmjs.org/mongoose/-/mongoose-5.1.2.tgz",
"integrity": "sha512-pmVX//61yX8hV/Db790Cym8CGYd29OYQROYx6ve6ab4LbUW0+GehiBVDlnE9Tvogaz8nndHlVUb+iXwOBw/MNw==", "integrity": "sha512-k9hssPMgBnUYG5e9NoUbx/2ERDyelDY0Vf6BwjtmoETUhVT7pQUe1o+oelLLuHF3ZVY2qgienK8pnrI5pdvlxA==",
"requires": { "requires": {
"async": "2.1.4", "async": "2.1.4",
"bson": "~1.0.5", "bson": "~1.0.5",
"kareem": "2.0.7", "kareem": "2.1.0",
"lodash.get": "4.4.2", "lodash.get": "4.4.2",
"mongodb": "3.0.8", "mongodb": "3.0.8",
"mongoose-legacy-pluralize": "1.0.2", "mongoose-legacy-pluralize": "1.0.2",
@@ -4985,6 +4989,13 @@
"ms": "2.0.0", "ms": "2.0.0",
"regexp-clone": "0.0.1", "regexp-clone": "0.0.1",
"sliced": "1.0.1" "sliced": "1.0.1"
},
"dependencies": {
"kareem": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/kareem/-/kareem-2.1.0.tgz",
"integrity": "sha512-ycoMY1tVkcH1/NaxGn2erZaUC3CodmX7Fl6DUVXjN73+uecWYTaaldRkxNY3HeSKQnQTWnoxRKnZfVHcB8tIWg=="
}
} }
}, },
"mongoose-legacy-pluralize": { "mongoose-legacy-pluralize": {
@@ -10330,8 +10341,7 @@
"object-assign": { "object-assign": {
"version": "4.1.1", "version": "4.1.1",
"resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
"integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM=", "integrity": "sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM="
"dev": true
}, },
"object-copy": { "object-copy": {
"version": "0.1.0", "version": "0.1.0",

View File

@@ -12,6 +12,7 @@
"author": "", "author": "",
"dependencies": { "dependencies": {
"body-parser": "^1.18.3", "body-parser": "^1.18.3",
"cors": "^2.8.4",
"dotenv": "^5.0.1", "dotenv": "^5.0.1",
"express": "^4.16.3", "express": "^4.16.3",
"method-override": "^2.3.10", "method-override": "^2.3.10",

View File

@@ -27,7 +27,7 @@ router.post(
const { name } = req.body; const { name } = req.body;
const newList = new TodoList({ name }); const newList = new TodoList({ name });
await newList.save(); await newList.save();
res.json({ success: true }); res.json({ success: true, data: newList.toJson() });
}), }),
); );
@@ -53,7 +53,7 @@ router.patch(
const { listId } = res.locals; const { listId } = res.locals;
const { name } = req.body; const { name } = req.body;
const patch = {}; const patch = {};
if (name) { if (name !== undefined) {
patch.name = name; patch.name = name;
} }
const list = await TodoList.findByIdAndUpdate( const list = await TodoList.findByIdAndUpdate(
@@ -63,7 +63,7 @@ router.patch(
).exec(); ).exec();
await list.slugify(); await list.slugify();
await list.save(); await list.save();
res.json({ success: true }); res.json({ success: true, data: list.toJson() });
}), }),
); );
router.use('/:slug/todos', listIdMiddleware, require('./todos')); router.use('/:slug/todos', listIdMiddleware, require('./todos'));

View File

@@ -12,7 +12,7 @@ const { NotFoundError } = require('../errors');
router.get( router.get(
'/', '/',
asyncHelper(async (req, res) => { asyncHelper(async (req, res) => {
const { listId } = res.locals; const { listId } = res.locals || req.body;
const todos = await Todo.find({ list: listId }).exec(); const todos = await Todo.find({ list: listId }).exec();
res.json({ success: true, data: todos.map(todo => todo.toJson()) }); res.json({ success: true, data: todos.map(todo => todo.toJson()) });
}), }),
@@ -22,11 +22,12 @@ router.get(
router.post( router.post(
'/', '/',
asyncHelper(async (req, res) => { asyncHelper(async (req, res) => {
const { listId } = res.locals; const { listId } = res.locals || req.body;
const { text } = req.body; const { text } = req.body;
console.log(req.body);
const todo = new Todo({ text, list: listId }); const todo = new Todo({ text, list: listId });
await todo.save(); await todo.save();
res.json({ success: true }); res.json({ success: true, data: todo.toJson() });
}), }),
); );
@@ -37,14 +38,21 @@ router.patch(
const { todoId } = req.params; const { todoId } = req.params;
const { text, completed } = req.body; const { text, completed } = req.body;
const patch = {}; const patch = {};
if (text) { if (text !== undefined) {
patch.text = text; patch.text = text;
} }
if (completed) { if (completed !== undefined) {
patch.completed = completed; patch.completed = completed;
} }
await Todo.update({ _id: todoId }, { $set: patch }).exec(); const todo = await Todo.findByIdAndUpdate(
res.json({ success: true }); { _id: todoId },
{ $set: patch },
{ new: true },
).exec();
if (!todo) {
throw new NotFoundError(`can't find todo with id ${todoId}`);
}
res.json({ success: true, data: todo.toJson() });
}), }),
); );
@@ -55,7 +63,7 @@ router.delete(
const { todoId } = req.params; const { todoId } = req.params;
const todo = await Todo.findById(todoId).exec(); const todo = await Todo.findById(todoId).exec();
if (!todo) { if (!todo) {
throw new NotFoundError('cant find todo'); throw new NotFoundError(`can't find todo with id ${todoId}`);
} }
await todo.remove(); await todo.remove();
res.json({ success: true }); res.json({ success: true });