노드숙련강의 1-5/Quiz

·2022년 12월 19일
0

study

목록 보기
8/81
post-thumbnail

API

할 일 목록 가져오기 API

// routes/todos.router.js

router.get("/todos", async (req, res) => {
  const todos = await Todo.find().sort("-order").exec();

  res.send({ todos });
});

할 일 순서 변경 API

// routes/todos.router.js

router.patch("/todos/:todoId", async (req, res) => {
  const { todoId } = req.params;
  const { order } = req.body;

  //1. todoId에 해당하는 할 일이 있는가?
  //1-1. 만약 없다면 error를 출력해야함.

  const currentTodo = await Todo.findById(todoId);

  if (!currentTodo) {
    return res
      .status(400)
      .json({ errorMessage: "존재하지 않는 할 일 입니다." });
  }

  //order값이 들어온 경우 그 order값을 가진 할 일과 바꿔야 함.
  if (order) {
    const targetTodo = await Todo.findOne({ order }).exec();

    if (targetTodo) {
      targetTodo.order = currentTodo.order;
      await targetTodo.save();
    }

    currentTodo.order = order;
    await currentTodo.save();
  }
});

할 일 삭제 API

// routes/todos.router.js

router.delete("/todos/:todoId", async (req, res) => {
  const { todoId } = req.params;

  const deleteTodo = await Todo.findById(todoId).exec();

  if (!deleteTodo) {
    return res
      .status(400)
      .json({ errorMessage: "존재하지 않는 할 일 입니다." });
  }

  await deleteTodo.delete();

  res.json({ result: "삭제성공!" });
});

할 일 내용/체크박스 수정 API

// routes/todos.router.js

router.patch("/todos/:todoId", async (req, res) => {
  const { todoId } = req.params;
  const { order, value, done } = req.body;

  //1. todoId에 해당하는 할 일이 있는가?
  //1-1. 만약 없다면 error를 출력해야함.

  const currentTodo = await Todo.findById(todoId).exec();

  if (!currentTodo) {
    return res
      .status(400)
      .json({ errorMessage: "존재하지 않는 할 일 입니다." });
  }

  //2. order값이 들어온 경우 그 order값을 가진 할 일과 바꿔야 함.
  if (order) {
    const targetTodo = await Todo.findOne({ order }).exec();

    if (targetTodo) {
      targetTodo.order = currentTodo.order;
      await targetTodo.save();
    }
    currentTodo.order = order;
  // 3. 입력된 value가 존재하면 value값 수정   
  } else if (value) {
    currentTodo.value = value;
  // 4. done이 undefined가 아니라면 doneAt값에 done이 True면 날짜를 아니면 null값을 넣기
  } else if (done !== undefined) {
    currentTodo.doneAt = done ? new Date() : null;
  }

  await currentTodo.save();

  res.send({ result: "수정완료!" });
});
profile
개발자 꿈나무

0개의 댓글