mirror of
https://github.com/usatiuk/ustk-todolist.git
synced 2025-10-28 15:47:48 +01:00
api fixes
This commit is contained in:
1
app.js
1
app.js
@@ -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) => {
|
||||||
|
|||||||
@@ -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'));
|
||||||
|
|
||||||
|
|||||||
@@ -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
32
package-lock.json
generated
@@ -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",
|
||||||
|
|||||||
@@ -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",
|
||||||
|
|||||||
@@ -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'));
|
||||||
|
|||||||
@@ -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 });
|
||||||
|
|||||||
Reference in New Issue
Block a user