Added websocket

This commit is contained in:
Manik Maity
2024-11-13 18:37:05 +05:30
parent b3525c16dc
commit b394bbbd07
16 changed files with 308 additions and 48 deletions

View File

@@ -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;

View 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,
});
}
}
}

View File

@@ -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, () => {

View File

@@ -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){

View 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;

View File

@@ -0,0 +1,8 @@
export function voteMessageTestService(){
try{
return "Vote route is working✔";
}
catch(err){
throw err;
}
}

View 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" });
}
});
});
};