From 6ab90696dfad76b38ba829734b8a92a741543ab1 Mon Sep 17 00:00:00 2001 From: Manik Maity Date: Tue, 12 Nov 2024 23:39:02 +0530 Subject: [PATCH] =?UTF-8?q?Added=20get=20user=20bookmark=F0=9F=94=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backend/src/controllers/poll.controller.js | 27 ++++++++++++++++++++++ backend/src/repositories/user.repo.js | 9 ++++++++ backend/src/routes/v1/poll.route.js | 18 ++++++++++++++- backend/src/services/poll.service.js | 11 +++++++++ 4 files changed, 64 insertions(+), 1 deletion(-) diff --git a/backend/src/controllers/poll.controller.js b/backend/src/controllers/poll.controller.js index 1f73e93..80ffaa3 100644 --- a/backend/src/controllers/poll.controller.js +++ b/backend/src/controllers/poll.controller.js @@ -4,6 +4,7 @@ import { createVoteService, deletePollService, getAllCreatedPollsService, + getBookmarkPollService, getPollDataService, } from "../services/poll.service.js"; @@ -161,4 +162,30 @@ export const addToBookmarkController = async (req, res) => { }); } } +} + +export const getBookmarkPollController = async (req, res) => { + try { + const reqUser = req.user; + const data = await getBookmarkPollService(reqUser._id); + res.json({ + success: true, + message: "Bookmarked Polls fetched successfully", + data: data, + }); + } + catch (err) { + console.log(err); + if (err.statusCode) { + res.status(err.statusCode).json({ + success: false, + message: err.message, + }); + } else { + res.status(500).json({ + success: false, + message: err.message, + }); + } + } } \ No newline at end of file diff --git a/backend/src/repositories/user.repo.js b/backend/src/repositories/user.repo.js index aa9ba1e..103a78f 100644 --- a/backend/src/repositories/user.repo.js +++ b/backend/src/repositories/user.repo.js @@ -60,4 +60,13 @@ export async function removePollIdFromBookmark(userId, pollId) { catch{ throw err; } +} + +export async function getUserBookmarkedPolls(userId) { + try { + const user = await UserModel.findById(userId).populate("bookmarks"); + return user.bookmarks; + } catch (err) { + throw err; + } } \ No newline at end of file diff --git a/backend/src/routes/v1/poll.route.js b/backend/src/routes/v1/poll.route.js index a545d8d..553f6db 100644 --- a/backend/src/routes/v1/poll.route.js +++ b/backend/src/routes/v1/poll.route.js @@ -1,6 +1,6 @@ import express from "express"; import { verifyToken } from "../../middlwares/verifyToken.js"; -import { addToBookmarkController, createPollController, createVoteController, deletePollController, getAllCreatedPollsController, getPollDataController } from "../../controllers/poll.controller.js"; +import { addToBookmarkController, createPollController, createVoteController, deletePollController, getAllCreatedPollsController, getBookmarkPollController, getPollDataController } from "../../controllers/poll.controller.js"; import pollDataSchema from "../../validations/pollDataValidation.js"; import validator from "../../validations/validator.js"; import voteSchema from "../../validations/voteValidation.js"; @@ -180,4 +180,20 @@ pollRouter.post("/vote", validator(voteSchema), verifyToken, createVoteControlle * */ pollRouter.get("/bookmark/:pollId", verifyToken, addToBookmarkController); +/** + * @swagger + * /poll/bookmarks: + * get: + * summary: Get bookmarked polls + * tags: [Bookmark] + * responses: + * 200: + * description: Bookmarked polls fetched successfully + * 401: + * description: Unauthorized + * 500: + * description: Internal server error + */ +pollRouter.get("/bookmarks", verifyToken, getBookmarkPollController); + export default pollRouter; \ No newline at end of file diff --git a/backend/src/services/poll.service.js b/backend/src/services/poll.service.js index 61d24a8..27c3599 100644 --- a/backend/src/services/poll.service.js +++ b/backend/src/services/poll.service.js @@ -12,6 +12,7 @@ import { } from "../repositories/vote.repo.js"; import { addPollIdToBookmark, + getUserBookmarkedPolls, removePollIdFromBookmark, } from "../repositories/user.repo.js"; @@ -140,3 +141,13 @@ export async function addToBookMarkService(pollId, user) { throw err; } } + + +export async function getBookmarkPollService(userId) { + try { + const data = await getUserBookmarkedPolls(userId); + return data; + } catch (err) { + throw err; + } +} \ No newline at end of file