diff --git a/backend/src/controllers/poll.controller.js b/backend/src/controllers/poll.controller.js index 927e112..f12ee80 100644 --- a/backend/src/controllers/poll.controller.js +++ b/backend/src/controllers/poll.controller.js @@ -1,8 +1,13 @@ -import { createPollService, getAllCreatedPollsService, getPollDataService } from "../services/poll.service.js"; +import { + createPollService, + deletePollService, + getAllCreatedPollsService, + getPollDataService, +} from "../services/poll.service.js"; export async function createPollController(req, res) { try { - const {title, description, options} = req.body; + const { title, description, options } = req.body; const user = req.user; const poll = await createPollService(title, description, options, user._id); res.status(201).json({ @@ -10,7 +15,6 @@ export async function createPollController(req, res) { message: "Poll created successfully", data: poll, }); - } catch (err) { if (err.statusCode) { res.status(err.statusCode).json({ @@ -26,7 +30,6 @@ export async function createPollController(req, res) { } } - export async function getPollDataController(req, res) { try { const pollId = req.params.pollId; @@ -36,8 +39,7 @@ export async function getPollDataController(req, res) { message: "Poll data fetched successfully", data: poll, }); - } - catch(err) { + } catch (err) { if (err.statusCode) { res.status(err.statusCode).json({ success: false, @@ -61,8 +63,7 @@ export async function getAllCreatedPollsController(req, res) { message: "Polls fetched successfully", data: polls, }); - } - catch(err) { + } catch (err) { console.log(err); if (err.statusCode) { res.status(err.statusCode).json({ @@ -76,4 +77,30 @@ export async function getAllCreatedPollsController(req, res) { }); } } -} \ No newline at end of file +} + +export async function deletePollController(req, res) { + try { + const reqPollId = req.params.pollId; + const deletedPoll = await deletePollService(reqPollId, req.user); + res.json({ + success : true, + message : "Poll deleted successfully.", + data : deletedPoll + }) + } + 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, + }); + } + } +} diff --git a/backend/src/controllers/user.controller.js b/backend/src/controllers/user.controller.js index 969626e..1993476 100644 --- a/backend/src/controllers/user.controller.js +++ b/backend/src/controllers/user.controller.js @@ -83,4 +83,5 @@ export async function logOutController(req, res) { 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 bd13c37..868a970 100644 --- a/backend/src/repositories/poll.repo.js +++ b/backend/src/repositories/poll.repo.js @@ -28,4 +28,14 @@ export async function findPollsByCreatorId(id) { catch(err){ throw err; } +} + +export async function deletePollById(id) { + try { + const poll = await PollModel.findByIdAndDelete(id); + 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 1613f50..0037cc3 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, getAllCreatedPollsController, getPollDataController } from "../../controllers/poll.controller.js"; +import { createPollController, deletePollController, getAllCreatedPollsController, getPollDataController } from "../../controllers/poll.controller.js"; import pollDataSchema from "../../validations/pollDataValidation.js"; import validator from "../../validations/validator.js"; const pollRouter = express.Router(); @@ -99,4 +99,6 @@ pollRouter.get("/data/:pollId", verifyToken, getPollDataController); */ pollRouter.get("/created", verifyToken, getAllCreatedPollsController); +pollRouter.delete("/delete/:pollId", verifyToken, deletePollController); + 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 956eeb4..350bdd8 100644 --- a/backend/src/services/poll.service.js +++ b/backend/src/services/poll.service.js @@ -45,6 +45,32 @@ export async function getAllCreatedPollsService(id) { const polls = await findPollsByCreatorId(id); return polls; } + catch(err){ + throw err; + } +} + +export async function deletePollService(pollId, user) { + try { + const userId = user._id; + const poll = await findPollById(pollId); + if (!poll) { + throw { + statusCode: 404, + message: "Poll not found" + } + } + console.log(poll?.creatorId._id.toString(), userId.toString(), user); + if (poll.creatorId._id.toString() !== userId.toString()) { + throw { + statusCode: 401, + message: "Unauthorized" + } + } + const deletedPoll = await deletePollService(pollId); + return deletedPoll; + } + catch(err){ throw err; }