diff --git a/backend/src/controllers/poll.controller.js b/backend/src/controllers/poll.controller.js index 078822d..aebdee2 100644 --- a/backend/src/controllers/poll.controller.js +++ b/backend/src/controllers/poll.controller.js @@ -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) { 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, + }); + } + } +} \ No newline at end of file diff --git a/backend/src/repositories/poll.repo.js b/backend/src/repositories/poll.repo.js index 2d5f9c6..75ca2bb 100644 --- a/backend/src/repositories/poll.repo.js +++ b/backend/src/repositories/poll.repo.js @@ -8,4 +8,14 @@ export async function createPollByData(data) { catch(err){ throw err; } +} + +export async function findPollById(id) { + try { + const poll = await PollModel.findById(id).populate("creatorId"); + return poll; + } + 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 28cdd2e..41b3582 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 { createPollController } from "../../controllers/poll.controller.js"; +import { createPollController, getPollDataController } from "../../controllers/poll.controller.js"; import pollDataSchema from "../../validations/pollDataValidation.js"; import validator from "../../validations/validator.js"; const pollRouter = express.Router(); @@ -60,4 +60,6 @@ pollRouter.get("/test", (req, res) => { */ pollRouter.post("/create", validator(pollDataSchema), verifyToken, createPollController); +pollRouter.get("/:pollId", verifyToken, getPollDataController); + 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 536ef20..65d8a50 100644 --- a/backend/src/services/poll.service.js +++ b/backend/src/services/poll.service.js @@ -1,5 +1,5 @@ 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) { try { @@ -20,4 +20,22 @@ export async function createPollService(title, description, options, userId) { catch(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; + } } \ No newline at end of file diff --git a/frontend/index.html b/frontend/index.html index d79e72a..424d38a 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -4,7 +4,7 @@ - Vite + React + LivePoll
diff --git a/package-lock.json b/package-lock.json deleted file mode 100644 index a662278..0000000 --- a/package-lock.json +++ /dev/null @@ -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" - } - } - } -} diff --git a/package.json b/package.json deleted file mode 100644 index aa01aab..0000000 --- a/package.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "dependencies": { - "react-toastify": "^10.0.6" - } -}