diff --git a/backend/controller/likeController.js b/backend/controller/likeController.js new file mode 100644 index 0000000..ea2836d --- /dev/null +++ b/backend/controller/likeController.js @@ -0,0 +1,43 @@ +const { Like, TargetType_ENUM } = require("../models/Like"); +const Post = require("../models/Post"); +const mongoose = require("mongoose"); + +/** + * @desc user can like the post of the other developers + * @route GET /posts/:id/like + */ +async function likePost(req, res) { + try { + const PostId = req.params.id; + if (!PostId) + return res.status(400).json({ msg: "Post can't be undefined" }); + if (!mongoose.Types.ObjectId.isValid(PostId)) + return res.status(400).json({ msg: "Post Id is not Valid" }); + const postExists = Post.findById(PostId); + if (!postExists) + return res.status(404).json({ msg: "Post does not Exists" }); + const likeExists = Like.findOne({ + targetId: new mongoose.Types.ObjectId(PostId), + }).select("_id"); + if (!likeExists) { + const likedPost = await Like.create({ + targetType: TargetType_ENUM.POST, + count: 1, + targetId: PostId, + }); + console.log(likedPost); + } + else{ + const likeUpdated = await Like.updateOne({ targetId: PostId},{ $inc: {count: 1}}); + console.log(likeUpdated); + } + return res.status(200).json({ msg: "Post Liked Successfully" }); + } catch (err) { + console.log(err.stack); + return res.status(500).json({ msg: "Internal Server Error" }); + } +} + +module.exports = { + likePost, +}; diff --git a/backend/models/Like.js b/backend/models/Like.js index 0583e30..c19a241 100644 --- a/backend/models/Like.js +++ b/backend/models/Like.js @@ -10,6 +10,9 @@ const LikeSchema = mongoose.Schema({ type: String, enum: Object.values(TargetType_ENUM) }, + count: { + type: Number + }, targetId: { type: mongoose.Schema.Types.ObjectId, refPath: 'targetTypeRef' @@ -23,6 +26,9 @@ const LikeSchema = mongoose.Schema({ strict: true }); -const like = mongoose.model('Like', LikeSchema); +const Like = mongoose.model('Like', LikeSchema); -module.exports = like; \ No newline at end of file +module.exports = { + Like, + TargetType_ENUM +}; \ No newline at end of file diff --git a/backend/routes/user-route.js b/backend/routes/user-route.js index 7297a3c..8c03985 100644 --- a/backend/routes/user-route.js +++ b/backend/routes/user-route.js @@ -4,16 +4,19 @@ const {createUser, loginUser, findUser, getAllUser} = require('../controller/use const {generateToken, verifyToken} = require('../middleware/tokenVerification.js'); const { createPost, showPost, showAllPost } = require('../controller/postController.js'); const { sendFollow } = require('../controller/followController.js'); +const { likePost } = require('../controller/likeController.js'); const router = express.Router(); +const app = express(); router.use(express.json()); router.post('/signup', isUserAuthenticated, generateToken, createUser); router.post('/login', generateToken, loginUser); -router.get('/:id', findUser); +router.get('/:id', verifyToken, findUser); router.post('/post/create', verifyToken, createPost); router.get('/post/:id', verifyToken, showPost); router.post('/posts', verifyToken, showAllPost); // this should work with GET request but it is not working, instead it returing a 404 on send request in GET format router.post('/people', verifyToken, getAllUser); router.post('/follow/:id', verifyToken, sendFollow); +router.put('/posts/:id/like', verifyToken, likePost); module.exports = router; \ No newline at end of file