Added websocket
This commit is contained in:
@@ -4,4 +4,5 @@ dotenv.config();
|
||||
export const PORT = Number(process.env.PORT);
|
||||
export const DB_URL = process.env.DB_CONNECTION;
|
||||
export const SALT = Number(process.env.SALT_ROUNDS);
|
||||
export const JWT_PRIVATE = process.env.JWT_PRIVATE;
|
||||
export const JWT_PRIVATE = process.env.JWT_PRIVATE;
|
||||
export const CLIENT_URL = process.env.CLIENT_URL;
|
||||
25
backend/src/controllers/vote.controller.js
Normal file
25
backend/src/controllers/vote.controller.js
Normal file
@@ -0,0 +1,25 @@
|
||||
import { voteMessageTestService } from "../services/vote.service.js";
|
||||
|
||||
export async function voteTestController(req, res) {
|
||||
try{
|
||||
const message = voteMessageTestService();
|
||||
res.json({
|
||||
success: true,
|
||||
message: message,
|
||||
});
|
||||
}
|
||||
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,
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -2,14 +2,15 @@ import express from 'express'
|
||||
import cors from 'cors'
|
||||
import { createServer } from 'http'
|
||||
import { Server } from 'socket.io'
|
||||
import { PORT } from './config/veriables.js';
|
||||
import { CLIENT_URL, PORT } from './config/veriables.js';
|
||||
import { connectDB } from './config/dbConfig.js';
|
||||
import userRouter from './routes/v1/user.route.js';
|
||||
import swaggerDocs from '../swagger.js';
|
||||
import swaggerUi from 'swagger-ui-express';
|
||||
import cookieParser from "cookie-parser";
|
||||
import pollRouter from './routes/v1/poll.route.js';
|
||||
|
||||
import { handlePollSocket } from './socket/poll.socket.js';
|
||||
import voteRouter from './routes/v1/vote.route.js';
|
||||
|
||||
const app = express();
|
||||
const httpServer = createServer(app);
|
||||
@@ -18,13 +19,17 @@ app.use('/docs', swaggerUi.serve, swaggerUi.setup(swaggerDocs));
|
||||
|
||||
const io = new Server(httpServer, {
|
||||
cors: {
|
||||
origin: "*"
|
||||
origin: CLIENT_URL,
|
||||
methods: ["GET", "POST", "PUT", "DELETE"]
|
||||
}
|
||||
})
|
||||
|
||||
handlePollSocket(io);
|
||||
|
||||
|
||||
app.use(cookieParser());
|
||||
app.use(cors({
|
||||
origin: "http://localhost:5173",
|
||||
origin: CLIENT_URL,
|
||||
credentials: true
|
||||
}))
|
||||
app.use(express.json())
|
||||
@@ -34,6 +39,7 @@ app.get("/ping", (_req, res) => {
|
||||
|
||||
app.use("/api/v1/poll", pollRouter);
|
||||
app.use("/api/v1/user", userRouter);
|
||||
app.use("/api/v1/vote", voteRouter);
|
||||
|
||||
await connectDB();
|
||||
httpServer.listen(PORT, () => {
|
||||
|
||||
@@ -65,7 +65,7 @@ export async function updatePollVoteCount(pollId, optionId) {
|
||||
export async function findPolls(page, limit) {
|
||||
try{
|
||||
const skip = (page - 1) * limit;
|
||||
const polls = await PollModel.find().skip(skip).limit(limit).populate("creatorId");
|
||||
const polls = await PollModel.find().sort({createdAt : -1}).skip(skip).limit(limit).populate("creatorId");
|
||||
return polls;
|
||||
}
|
||||
catch(err){
|
||||
|
||||
19
backend/src/routes/v1/vote.route.js
Normal file
19
backend/src/routes/v1/vote.route.js
Normal file
@@ -0,0 +1,19 @@
|
||||
import express from "express";
|
||||
import { verifyToken } from "../../middlwares/verifyToken.js";
|
||||
import { voteTestController } from "../../controllers/vote.controller.js";
|
||||
const voteRouter = express.Router();
|
||||
|
||||
/**
|
||||
* @swagger
|
||||
* /vote/test:
|
||||
* get:
|
||||
* summary: Test route for vote
|
||||
* tags: [Vote]
|
||||
* responses:
|
||||
* 200:
|
||||
* description: Success
|
||||
*/
|
||||
voteRouter.get("/test", voteTestController)
|
||||
// voteRouter.get("/voted/:pollId", verifyToken, getVotedDataController);
|
||||
|
||||
export default voteRouter;
|
||||
8
backend/src/services/vote.service.js
Normal file
8
backend/src/services/vote.service.js
Normal file
@@ -0,0 +1,8 @@
|
||||
export function voteMessageTestService(){
|
||||
try{
|
||||
return "Vote route is working✔️";
|
||||
}
|
||||
catch(err){
|
||||
throw err;
|
||||
}
|
||||
}
|
||||
34
backend/src/socket/poll.socket.js
Normal file
34
backend/src/socket/poll.socket.js
Normal file
@@ -0,0 +1,34 @@
|
||||
import { getPollDataService } from "../services/poll.service.js";
|
||||
|
||||
export const handlePollSocket = (io) => {
|
||||
io.on("connection", (socket) => {
|
||||
console.log(`User connected: ${socket.id}`);
|
||||
|
||||
socket.on("joinPoll", (pollId) => {
|
||||
socket.join(pollId);
|
||||
console.log(`User ${socket.id} joined poll room: ${pollId}`);
|
||||
});
|
||||
|
||||
socket.on("disconnect", () => {
|
||||
console.log(`User disconnected: ${socket.id}`);
|
||||
});
|
||||
|
||||
socket.on("vote", async (data) => {
|
||||
if (data.success) {
|
||||
console.log("Vote received:", data);
|
||||
|
||||
try {
|
||||
const pollData = await getPollDataService(data.pollId);
|
||||
|
||||
io.to(data.pollId).emit("pollDataUpdated", { data: pollData });
|
||||
} catch (error) {
|
||||
console.error("Error fetching poll data:", error);
|
||||
socket.emit("error", { message: "Failed to fetch poll data" });
|
||||
}
|
||||
} else {
|
||||
console.log("Vote failed:", data);
|
||||
socket.emit("error", { message: "Vote was unsuccessful" });
|
||||
}
|
||||
});
|
||||
});
|
||||
};
|
||||
Reference in New Issue
Block a user