Update, Delete 구현하기

윤태규·2023년 12월 8일
  1. [할 일 메모 사이트] - Update, Delete
    할 일 순서 변경 API 만들기
    // routes/todos.router.js

router.patch('/todos/:todoId', async (req, res) => {
// 변경할 '해야할 일'의 ID 값을 가져옵니다.
const { todoId } = req.params;
// '해야할 일'을 몇번째 순서로 설정할 지 order 값을 가져옵니다.
const { order } = req.body;

// 변경하려는 '해야할 일'을 가져옵니다. 만약, 해당 ID값을 가진 '해야할 일'이 없다면 에러를 발생시킵니다.
const currentTodo = await Todo.findById(todoId).exec();
if (!currentTodo) {
return res
.status(404)
.json({ errorMessage: '존재하지 않는 todo 데이터입니다.' });
}

if (order) {
// 변경하려는 order 값을 가지고 있는 '해야할 일'을 찾습니다.
const targetTodo = await Todo.findOne({ order }).exec();
if (targetTodo) {
// 만약, 이미 해당 order 값을 가진 '해야할 일'이 있다면, 해당 '해야할 일'의 order 값을 변경하고 저장합니다.
targetTodo.order = currentTodo.order;
await targetTodo.save();
}
// 변경하려는 '해야할 일'의 order 값을 변경합니니다.
currentTodo.order = order;
}

// 변경된 '해야할 일'을 저장합니다.
await currentTodo.save();

return res.status(200).json({});
});
일 완료/해제 API 만들기
// /routes/todos.router.js

/ 순서 변경, 할 일 완료/해제 /
router.patch('/todos/:todoId', async (req, res) => {
// 변경할 '해야할 일'의 ID 값을 가져옵니다.
const { todoId } = req.params;
// '해야할 일'을 몇번째 순서로 설정할 지 order 값을 가져옵니다.
const { order, done } = req.body;

// 변경하려는 '해야할 일'을 가져옵니다. 만약, 해당 ID값을 가진 '해야할 일'이 없다면 에러를 발생시킵니다.
const currentTodo = await Todo.findById(todoId).exec();
if (!currentTodo) {
return res
.status(404)
.json({ errorMessage: '존재하지 않는 todo 데이터입니다.' });
}

if (order) {
// 변경하려는 order 값을 가지고 있는 '해야할 일'을 찾습니다.
const targetTodo = await Todo.findOne({ order }).exec();
if (targetTodo) {
// 만약, 이미 해당 order 값을 가진 '해야할 일'이 있다면, 해당 '해야할 일'의 order 값을 변경하고 저장합니다.
targetTodo.order = currentTodo.order;
await targetTodo.save();
}
// 변경하려는 '해야할 일'의 order 값을 변경합니니다.
currentTodo.order = order;
}
if (done !== undefined) {
// 변경하려는 '해야할 일'의 doneAt 값을 변경합니다.
currentTodo.doneAt = done ? new Date() : null;
}

// 변경된 '해야할 일'을 저장합니다.
await currentTodo.save();

return res.status(200).json({});
});

할 일 삭제 API 만들기
// routes/todos.router.js

/ 할 일 삭제 /
router.delete('/todos/:todoId', async (req, res) => {
// 삭제할 '해야할 일'의 ID 값을 가져옵니다.
const { todoId } = req.params;

// 삭제하려는 '해야할 일'을 가져옵니다. 만약, 해당 ID값을 가진 '해야할 일'이 없다면 에러를 발생시킵니다.
const todo = await Todo.findById(todoId).exec();
if (!todo) {
return res
.status(404)
.json({ errorMessage: '존재하지 않는 todo 데이터입니다.' });
}

// 조회된 '해야할 일'을 삭제합니다.
await Todo.deleteOne({ _id: todoId }).exec();

return res.status(200).json({});
});

할 일 내용 변경 API 만들기
// /routes/todos.router.js

/ 순서 변경, 할 일 완료/해제, 할 일 내용 변경 /
router.patch('/todos/:todoId', async (req, res) => {
// 변경할 '해야할 일'의 ID 값을 가져옵니다.
const { todoId } = req.params;
// 클라이언트가 전달한 순서, 완료 여부, 내용 데이터를 가져옵니다.
const { order, done, value } = req.body;

// 변경하려는 '해야할 일'을 가져옵니다. 만약, 해당 ID값을 가진 '해야할 일'이 없다면 에러를 발생시킵니다.
const currentTodo = await Todo.findById(todoId).exec();
if (!currentTodo) {
return res
.status(404)
.json({ errorMessage: '존재하지 않는 todo 데이터입니다.' });
}

if (order) {
// 변경하려는 order 값을 가지고 있는 '해야할 일'을 찾습니다.
const targetTodo = await Todo.findOne({ order }).exec();
if (targetTodo) {
// 만약, 이미 해당 order 값을 가진 '해야할 일'이 있다면, 해당 '해야할 일'의 order 값을 변경하고 저장합니다.
targetTodo.order = currentTodo.order;
await targetTodo.save();
}
// 변경하려는 '해야할 일'의 order 값을 변경합니니다.
currentTodo.order = order;
}
if (done !== undefined) {
// 변경하려는 '해야할 일'의 doneAt 값을 변경합니다.
currentTodo.doneAt = done ? new Date() : null;
}
if (value) {
// 변경하려는 '해야할 일'의 내용을 변경합니다.
currentTodo.value = value;
}

// 변경된 '해야할 일'을 저장합니다.
await currentTodo.save();

return res.status(200).json({});
});

profile
끝까지 가자

0개의 댓글