Created get Poll data route

This commit is contained in:
Manik Maity
2024-11-09 20:53:28 +05:30
parent bd1d3e988d
commit a419f8f917
7 changed files with 60 additions and 100 deletions

View File

@@ -1,4 +1,4 @@
import { createPollService } from "../services/poll.service.js"; import { createPollService, getPollDataService } from "../services/poll.service.js";
export async function createPollController(req, res) { export async function createPollController(req, res) {
try { try {
@@ -25,3 +25,29 @@ export async function createPollController(req, res) {
} }
} }
} }
export async function getPollDataController(req, res) {
try {
const pollId = req.params.pollId;
const poll = await getPollDataService(pollId);
res.status(200).json({
success: true,
message: "Poll data fetched successfully",
data: poll,
});
}
catch(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

@@ -8,4 +8,14 @@ export async function createPollByData(data) {
catch(err){ catch(err){
throw err; throw err;
} }
}
export async function findPollById(id) {
try {
const poll = await PollModel.findById(id).populate("creatorId");
return poll;
}
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 { createPollController } from "../../controllers/poll.controller.js"; import { createPollController, 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";
const pollRouter = express.Router(); const pollRouter = express.Router();
@@ -60,4 +60,6 @@ pollRouter.get("/test", (req, res) => {
*/ */
pollRouter.post("/create", validator(pollDataSchema), verifyToken, createPollController); pollRouter.post("/create", validator(pollDataSchema), verifyToken, createPollController);
pollRouter.get("/:pollId", verifyToken, getPollDataController);
export default pollRouter; export default pollRouter;

View File

@@ -1,5 +1,5 @@
import mongoose from "mongoose"; import mongoose from "mongoose";
import { createPollByData } from "../repositories/poll.repo.js"; import { createPollByData, findPollById } from "../repositories/poll.repo.js";
export async function createPollService(title, description, options, userId) { export async function createPollService(title, description, options, userId) {
try { try {
@@ -20,4 +20,22 @@ export async function createPollService(title, description, options, userId) {
catch(err){ catch(err){
throw err; throw err;
} }
}
export async function getPollDataService(pollId) {
try {
const poll = await findPollById(pollId);
if (!poll) {
throw {
statusCode: 404,
message: "Poll not found"
}
}
const {creatorId, ...pollData} = poll._doc;
const {username, _id, ...creatorData} = creatorId._doc;
return {pollData, creatorData : {username, _id}};
}
catch(err){
throw err;
}
} }

View File

@@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/vite.svg" /> <link rel="icon" type="image/svg+xml" href="/vite.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Vite + React</title> <title>LivePoll</title>
</head> </head>
<body> <body>
<div id="root"></div> <div id="root"></div>

91
package-lock.json generated
View File

@@ -1,91 +0,0 @@
{
"name": "LivePoll",
"lockfileVersion": 3,
"requires": true,
"packages": {
"": {
"dependencies": {
"react-toastify": "^10.0.6"
}
},
"node_modules/clsx": {
"version": "2.1.1",
"resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.1.tgz",
"integrity": "sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==",
"license": "MIT",
"engines": {
"node": ">=6"
}
},
"node_modules/js-tokens": {
"version": "4.0.0",
"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz",
"integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==",
"license": "MIT",
"peer": true
},
"node_modules/loose-envify": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz",
"integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==",
"license": "MIT",
"peer": true,
"dependencies": {
"js-tokens": "^3.0.0 || ^4.0.0"
},
"bin": {
"loose-envify": "cli.js"
}
},
"node_modules/react": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz",
"integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
},
"engines": {
"node": ">=0.10.0"
}
},
"node_modules/react-dom": {
"version": "18.3.1",
"resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz",
"integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0",
"scheduler": "^0.23.2"
},
"peerDependencies": {
"react": "^18.3.1"
}
},
"node_modules/react-toastify": {
"version": "10.0.6",
"resolved": "https://registry.npmjs.org/react-toastify/-/react-toastify-10.0.6.tgz",
"integrity": "sha512-yYjp+omCDf9lhZcrZHKbSq7YMuK0zcYkDFTzfRFgTXkTFHZ1ToxwAonzA4JI5CxA91JpjFLmwEsZEgfYfOqI1A==",
"license": "MIT",
"dependencies": {
"clsx": "^2.1.0"
},
"peerDependencies": {
"react": ">=18",
"react-dom": ">=18"
}
},
"node_modules/scheduler": {
"version": "0.23.2",
"resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz",
"integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==",
"license": "MIT",
"peer": true,
"dependencies": {
"loose-envify": "^1.1.0"
}
}
}
}

View File

@@ -1,5 +0,0 @@
{
"dependencies": {
"react-toastify": "^10.0.6"
}
}