Files
helsinki/Pt12/part12-containers-applications/todo-app/todo-backend/routes/todos.js
T
2024-09-30 15:32:50 +03:00

55 lines
1.2 KiB
JavaScript
Executable File

const express = require("express");
const { Todo } = require("../mongo");
const router = express.Router();
const { getAsync, setAsync } = require("../redis/index");
/* GET todos listing. */
router.get("/", async (_, res) => {
const todos = await Todo.find({});
res.send(todos);
});
/* POST todo to listing. */
router.post("/", async (req, res) => {
const todo = await Todo.create({
text: req.body.text,
done: false,
});
const todoCounter = await getAsync("added_todos");
setAsync("added_todos", Number(todoCounter) + 1);
res.send(todo);
});
const singleRouter = express.Router();
const findByIdMiddleware = async (req, res, next) => {
const { id } = req.params;
req.todo = await Todo.findById(id);
if (!req.todo) return res.sendStatus(404);
next();
};
/* DELETE todo. */
singleRouter.delete("/", async (req, res) => {
await req.todo.delete();
res.sendStatus(200);
});
/* GET todo. */
singleRouter.get("/", async (req, res) => {
res.send(req.todo);
});
/* PUT todo. */
singleRouter.put("/", async (req, res) => {
const todo = await Todo.findByIdAndUpdate(req.todo._id, {
done: true,
});
res.send(todo);
});
router.use("/:id", findByIdMiddleware, singleRouter);
module.exports = router;