๐ ๊ณต๋ถํ๋ ์ง์ง์ํ์นด๋ ์ฒ์์ด์ง?
[E-Commerce App with REST API] (13) ์ข์ํ๊ฑฐ๋ ์ซ์ดํ๋ ๋ธ๋ก๊ทธ ํฌ์คํธ ํ๊ธฐ (PUT) ๋ณธ๋ฌธ
๐ฉ๐ป ๋ฐฑ์๋(Back-End)/Node js
[E-Commerce App with REST API] (13) ์ข์ํ๊ฑฐ๋ ์ซ์ดํ๋ ๋ธ๋ก๊ทธ ํฌ์คํธ ํ๊ธฐ (PUT)
์ง์ง์ํ์นด 2023. 3. 31. 00:54728x90
๋ฐ์ํ
<๋ณธ ๋ธ๋ก๊ทธ๋ Developers Corner ์ ์ ํ๋ธ๋ฅผ ์ฐธ๊ณ ํด์ ๊ณต๋ถํ๋ฉฐ ์์ฑํ์์ต๋๋ค :-)>
=> Node.js E-Commerce App with REST API: Let's Build a Real-Life Example!
๐ท ์ข์ํ๋ ๋ธ๋ก๊ทธ ํฌ์คํธ ํ๊ธฐ (PUT)
์ข์ํ๋ ๋ธ๋ก๊ทธ๊ฐ ์๋ค๋ฉด ํฌ์คํธํ ๋ธ๋ก๊ทธ๋ฅผ PUSH!!! ์ทจ์ํ๋ค๋ฉด PULL!!!
$push ์ ํ์
: Field๊ฐ ์กด์ฌํ ๊ฒฝ์ฐ ์์๋ฅผ ๋ฐฐ์ด ๋์ ์ถ๊ฐ
: pushํ๋ ์๊ฐ ๋ฐฐ์ด๋ก ๋ฐ๋
$pull ์ ํ์
: ์กฐ๊ฑด์ ์ ์ผ๋ฉด ๊ทธ ๋ถ๋ถ๋ง ์ญ์
: ํฌ์คํธ์ ๋๊ธ์ ์ฌ๋ฌ ๊ฐ ๋ฑ๋กํ๊ณ ๊ทธ ์ค ํ๋ ์ญ์ ํ๊ธฐ
๐ท ์ซ์ดํ๋ ๋ธ๋ก๊ทธ ํฌ์คํธ ํ๊ธฐ (PUT)
์ซ์ดํ๋ ๋ธ๋ก๊ทธ๊ฐ ์๋ค๋ฉด ํฌ์คํธํ ๋ธ๋ก๊ทธ๋ฅผ PUSH!!! ์ทจ์ํ๋ค๋ฉด PULL!!!
๐ท ์ฝ๋
โ controllers/blogCtrl.js
const Blog = require("../models/Blog");
const User = require("../models/User");
const asyncHandler = require("express-async-handler");
const { validateMongodbID } = require("../utils/validateMongodbID");
// ๋ธ๋ก๊ทธ ์์ฑํ๊ธฐ
const createBlog = asyncHandler(async (req, res) => {
try {
const newBlog = await Blog.create(req.body);
res.json(newBlog);
}
catch (error) {
throw new Error(error);
}
});
// ๋ธ๋ก๊ทธ ์์ ํ๊ธฐ
const updateBlog = asyncHandler(async (req, res) => {
const { id } = req.params;
validateMongodbID(id);
try {
const updateBlog = await Blog.findByIdAndUpdate(id, req.body);
res.json(updateBlog);
}
catch (error) {
throw new Error(error);
}
});
// ๋ธ๋ก๊ทธ ์กฐํํ๊ธฐ
const getBlog = asyncHandler(async (req, res) => {
const { id } = req.params;
validateMongodbID(id);
try {
const getBlog = await Blog.findById(id)
.populate("likes")
.populate("dislikes");
const updateViews = await Blog.findByIdAndUpdate(
id,
{
$inc: { numViews: 1 }, // ์กฐํํ ๋๋ง๋ค numViews ์ฌ๋ผ๊ฐ~
},
{ new: true }
);
res.json(getBlog);
}
catch (error) {
throw new Error(error);
}
});
// ๋ชจ๋ ๋ธ๋ก๊ทธ ์กฐํํ๊ธฐ
const getAllBlogs = asyncHandler(async (req, res) => {
try {
const getAllBlogs = await Blog.find();
res.json(getAllBlogs);
}
catch (error) {
throw new Error(error);
}
});
// ๋ธ๋ก๊ทธ ์ญ์ ํ๊ธฐ
const deleteBlog = asyncHandler(async (req, res) => {
const { id } = req.params;
validateMongodbID(id);
try {
const deleteBlog = await Blog.findByIdAndDelete(id);
res.json(deleteBlog);
}
catch (error) {
throw new Error(error);
}
});
// ์ข์ํ๋ ๋ธ๋ก๊ทธ ์ ์ฅ
const likeBlog = asyncHandler(async (req, res) => {
const { blogId } = req.body;
validateMongodbID(blogId);
// find the blog which you want to be liked
const blog = await Blog.findById(blogId);
// find the login user
const loginUserId = req?.user?._id;
// find if the user has liked the post
const isLiked = blog?.isLiked;
// find if the user has disliked the blog
const alreadyDisLiked = blog?.dislikes?.find(
(userId) => userId?.toString() === loginUserId?.toString());
if (alreadyDisLiked) {
const blog = await Blog.findByIdAndUpdate(blogId, {
$pull: { dislikes: loginUserId },
isDisliked: false,
},
{ new: true });
res.json(blog);
}
// ์ข์ํ๋ฉด (true) -> ์๋๊ฑธ๋ก (false)
if (isLiked) {
const blog = await Blog.findByIdAndUpdate(blogId, {
$pull: { likes: loginUserId },
isLiked: false,
},
{ new: true });
res.json(blog);
}
// ์๋์๋๋ฐ (false) -> ์ข์ํ๋๊ฑธ๋ก (true)
else {
const blog = await Blog.findByIdAndUpdate(blogId, {
$push: { likes: loginUserId },
isLiked: true,
},
{ new: true });
res.json(blog);
}
});
// ์ซ์ดํ๋ ๋ธ๋ก๊ทธ ์ ์ฅ
const dislikeBlog = asyncHandler(async (req, res) => {
const { blogId } = req.body;
validateMongodbID(blogId);
// find the blog which you want to be liked
const blog = await Blog.findById(blogId);
// find the login user
const loginUserId = req?.user?._id;
// find if the user has disliked the post
const isDisLiked = blog?.isDisliked;
// find if the user has disliked the blog
const alreadyLiked = blog?.likes?.find(
(userId) => userId?.toString() === loginUserId?.toString());
if (alreadyLiked) {
const blog = await Blog.findByIdAndUpdate(blogId, {
$pull: { likes: loginUserId },
isLiked: false,
},
{ new: true });
res.json(blog);
}
// ์ซ์ดํ๋ฉด (true) -> ์๋์๋๊ฑธ๋ก (false)
if (isDisLiked) {
const blog = await Blog.findByIdAndUpdate(blogId, {
$pull: { dislikes: loginUserId },
isDisliked: false,
},
{ new: true });
res.json(blog);
}
// ์๋์๋๋ฉด (false) -> ์ซ์ดํ๋๊ฑธ๋ก (true)
else {
const blog = await Blog.findByIdAndUpdate(blogId, {
$push: { dislikes: loginUserId },
isDisliked: true,
},
{ new: true });
res.json(blog);
}
});
module.exports = {
createBlog,
updateBlog,
getBlog,
getAllBlogs,
deleteBlog,
likeBlog,
dislikeBlog,
}
โ routes/blogRoute.js
const express = require("express");
const { createBlog, updateBlog, getBlog, getAllBlogs, deleteBlog, likeBlog, dislikeBlog } = require("../controllers/blogCtrl");
const { authMiddleware, isAdmin } = require("../middlewares/authMiddleware");
const router = express.Router();
router.post("/", authMiddleware, isAdmin, createBlog);
router.put("/likes", authMiddleware, likeBlog);
router.put("/dislikes", authMiddleware, dislikeBlog);
router.put("/:id", updateBlog);
router.get("/:id", getBlog);
router.get("/", getAllBlogs);
router.delete("/:id", authMiddleware, isAdmin, deleteBlog);
module.exports = router;
728x90
๋ฐ์ํ
'๐ฉโ๐ป ๋ฐฑ์๋(Back-End) > Node js' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Comments