Added get polls route

This commit is contained in:
Manik Maity
2024-11-13 10:59:04 +05:30
parent d37af8667a
commit e007f18bb5
5 changed files with 108 additions and 4 deletions

View File

@@ -4,6 +4,7 @@ import {
createVoteService, createVoteService,
deletePollService, deletePollService,
getAllCreatedPollsService, getAllCreatedPollsService,
getAllPollsService,
getBookmarkPollService, getBookmarkPollService,
getPollDataService, getPollDataService,
} from "../services/poll.service.js"; } from "../services/poll.service.js";
@@ -188,4 +189,31 @@ export const getBookmarkPollController = async (req, res) => {
}); });
} }
} }
}
export const getAllPolls = async (req, res) => {
try {
const page = req.query.page || 1;
const limit = req.query.limit || 10;
const data = await getAllPollsService(page, limit);
res.json({
success: true,
message: "All 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,
});
}
}
} }

View File

@@ -61,3 +61,24 @@ export async function updatePollVoteCount(pollId, optionId) {
throw err; throw err;
} }
} }
export async function findPolls(page, limit) {
try{
const skip = (page - 1) * limit;
const polls = await PollModel.find().skip(skip).limit(limit).populate("creatorId");
return polls;
}
catch(err){
throw err;
}
}
export async function getAllPollsCount(){
try{
const count = await PollModel.find().countDocuments();
return count;
}
catch(err){
throw err;
}
}

View File

@@ -1,6 +1,6 @@
import express from "express"; import express from "express";
import { verifyToken } from "../../middlwares/verifyToken.js"; import { verifyToken } from "../../middlwares/verifyToken.js";
import { addToBookmarkController, createPollController, createVoteController, deletePollController, getAllCreatedPollsController, getBookmarkPollController, getPollDataController } from "../../controllers/poll.controller.js"; import { addToBookmarkController, createPollController, createVoteController, deletePollController, getAllCreatedPollsController, getAllPolls, getBookmarkPollController, getPollDataController } from "../../controllers/poll.controller.js";
import pollDataSchema from "../../validations/pollDataValidation.js"; import pollDataSchema from "../../validations/pollDataValidation.js";
import validator from "../../validations/validator.js"; import validator from "../../validations/validator.js";
import voteSchema from "../../validations/voteValidation.js"; import voteSchema from "../../validations/voteValidation.js";
@@ -196,4 +196,33 @@ pollRouter.get("/bookmark/:pollId", verifyToken, addToBookmarkController);
*/ */
pollRouter.get("/bookmarks", verifyToken, getBookmarkPollController); pollRouter.get("/bookmarks", verifyToken, getBookmarkPollController);
/**
* @swagger
* /poll/all?page={page}&limit={limit}:
* get:
* summary: Get all polls
* tags: [Poll]
* parameters:
* - in: query
* name: page
* schema:
* type: integer
* required: false
* description: Page number
* - in: query
* name: limit
* schema:
* type: integer
* required: false
* description: Limit
* responses:
* 200:
* description: All polls fetched successfully
* 401:
* description: Unauthorized
* 500:
* description: Internal server error
*/
pollRouter.get("/all", getAllPolls)
export default pollRouter; export default pollRouter;

View File

@@ -3,7 +3,9 @@ import {
createPollByData, createPollByData,
deletePollById, deletePollById,
findPollById, findPollById,
findPolls,
findPollsByCreatorId, findPollsByCreatorId,
getAllPollsCount,
updatePollVoteCount, updatePollVoteCount,
} from "../repositories/poll.repo.js"; } from "../repositories/poll.repo.js";
import { import {
@@ -133,8 +135,9 @@ export async function addToBookMarkService(pollId, user) {
updatedData = await removePollIdFromBookmark(user._id, poll._id); updatedData = await removePollIdFromBookmark(user._id, poll._id);
message = "Removed from bookmark successfully."; message = "Removed from bookmark successfully.";
} }
const {password, ...userData} = updatedData._doc;
return { return {
updatedData, updatedData : userData,
message, message,
}; };
} catch (err) { } catch (err) {
@@ -150,4 +153,28 @@ export async function getBookmarkPollService(userId) {
} catch (err) { } catch (err) {
throw err; throw err;
} }
}
export async function getAllPollsService(page, limit) {
try {
const data = await findPolls(page, limit);
const filteredData = data.map((poll) => {
const { creatorId, ...pollData } = poll._doc;
const { username, _id, ...creatorData } = creatorId._doc;
const {options, ...rest} = pollData;
return {
...rest,
creatorData: { username, _id }
};
});
const totalPollCount = await getAllPollsCount();
return {
polls: filteredData,
totalPollCount: totalPollCount,
totalPages: Math.ceil(totalPollCount / limit),
};
}
catch (err) {
throw err;
}
} }

View File

@@ -25,7 +25,6 @@ function Bookmark() {
navigator(`/view/${pollId}`); navigator(`/view/${pollId}`);
}; };
const handleRemoveBookmark = async (bookmarkId) => { const handleRemoveBookmark = async (bookmarkId) => {
queryClient.setQueryData(["bookmarks"], (oldData) => { queryClient.setQueryData(["bookmarks"], (oldData) => {
return { return {
@@ -35,7 +34,7 @@ function Bookmark() {
}); });
await handleBookmark(bookmarkId); await handleBookmark(bookmarkId);
}; };
return ( return (
<div className="p-6 bg-base-200 h-screen"> <div className="p-6 bg-base-200 h-screen">
<h1 className="md:text-4xl text-xl font-bold text-white mb-6"> <h1 className="md:text-4xl text-xl font-bold text-white mb-6">