Skip to content

Commit

Permalink
--amend
Browse files Browse the repository at this point in the history
  • Loading branch information
gisubizo Jovan authored and gisubizo Jovan committed Jun 3, 2024
1 parent 4a2e3f0 commit 311597e
Show file tree
Hide file tree
Showing 7 changed files with 72 additions and 38 deletions.
6 changes: 3 additions & 3 deletions public/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -187,12 +187,11 @@ <h1>Eagles E-commerce Chat Room</h1>
const verifyToken = document.getElementById("TokenVerfication");
const verifyTokenForm = document.getElementById("verifyToken");
const port = window.location.port



const isProduction = window.location.hostname === "https://eagles-ec-be-development.onrender.com"
const url = isProduction ? "https://eagles-ec-be-development.onrender.com/api/v1/users/login":`http://localhost:${port}/api/v1/users/login`;
const twoFactorAuthUrl = isProduction? "https://eagles-ec-be-development.onrender.com/api/v1/users/2fa-verify": `http://localhost:${port}/api/v1/users/2fa-verify`

const loginUser = async (email, password) => {
try {
const response = await fetch(url, {
Expand All @@ -207,6 +206,7 @@ <h1>Eagles E-commerce Chat Room</h1>
}
const data = await response.json();


if (data.status === "Pending"){
localStorage.setItem("Token-otp_Verify", JSON.stringify(data.token));
showTokenVerfication();
Expand Down
34 changes: 26 additions & 8 deletions public/private.html
Original file line number Diff line number Diff line change
Expand Up @@ -143,7 +143,7 @@ <h4 id="chat-title"> Chat with Our Sellers </h4>
integrity="sha512-luMnTJZ7oEchNDZAtQhgjomP1eZefnl82ruTH/3Oj/Yu5qYtwL7+dVRccACS/Snp1lFXq188XFipHKYE75IaQQ=="
crossorigin="anonymous" referrerpolicy="no-referrer"></script>
<script>
const socket = io();

const port = window.location.port;
const token = localStorage.getItem("loginToken");
const decodedToken = JSON.parse(atob(token.split(".")[1]));
Expand All @@ -154,7 +154,17 @@ <h4 id="chat-title"> Chat with Our Sellers </h4>
profile = document.getElementById("profile")
let chat_area = document.getElementById("chat-messages")
const message_section = document.getElementById("input-div")
const socket = io({
query:{
userId: decodedToken.id
}
});
if(token){
socket.emit("private chats")
}

let receiverId;
let currentChatId = null;
let sellers = [];

const isProduction = window.location.hostname === "https://eagles-ec-be-development.onrender.com"
Expand All @@ -177,21 +187,18 @@ <h4 id="chat-title"> Chat with Our Sellers </h4>
chat_area.scrollTop = chat_area.scrollHeight;
}
const addPastMessageToUi = (data) =>{

data.forEach(data =>{
const isSender = data.sender === decodedToken.name
const date = new Date(data.createdAt);
const hours = date.getHours();
const minutes = date.getMinutes();

const formattedTime = `${hours}:${minutes < 10 ? '0' + minutes : minutes}`;
const element = `<p class=" ${isSender? "message-right" : "message-left" }">
${data.message}<span style="float: right">${formattedTime}</span>
</p>`
chat_area.innerHTML += element
</p>`;
chat_area.innerHTML += element;
chat_area.scrollTop = chat_area.scrollHeight;
}
)
})

}

Expand Down Expand Up @@ -271,15 +278,26 @@ <h4 id="chat-title"> Chat with Our Sellers </h4>
console.log(error)
})

socket.on("private message sent", (message) =>{
socket.on("private message sent", (chat) =>{
const message = chat.sentPrivateMessage
let isSender = message.sender === decodedToken.name
addMessageToUi(isSender, message)
})

socket.on("past private user to user message sent", (message) =>{
currentChatId = message[0].privateChatId;
addPastMessageToUi(message)
})

socket.on("private message recieved", (message) =>{
let isreciever = decodedToken.id === message.id
if(message.privateChatId === currentChatId)
{
addMessageToUi(isreciever, message)
}

})


</script>
</body>
Expand Down
30 changes: 25 additions & 5 deletions src/config/socketCofing.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,22 +3,38 @@ import { sendMessages, getPastMessages } from "../controllers/chatsController";
import { createAPrivateMessageSocket, retrieveAUserToUserPrivateMessageSocket } from "../controllers/privateChatController";



let users = new Map<string, string>();
const socket = (io: Server): void => {
let connectedClients: Set<string> = new Set();

io.on('connection', async(socket: Socket) => {
connectedClients.add(socket.id);
io.emit('connected client', connectedClients.size);

console.log(`connected client`)
await getPastMessages(socket);

console.log(`connected client ${socket.id}`)

socket.on("private chats", () =>{

let userId = socket.handshake.query.userId as string
if(userId){
users.set(userId, socket.id)

}

})
socket.on('disconnect', () => {
io.emit('removed');
connectedClients.delete(socket.id);
let userId = socket.handshake.query.userId as string;
if(userId){
users.delete(userId);
}
io.emit('dis connected client', connectedClients.size);
});

await getPastMessages(socket);


socket.on('chat message', async(data: any) => {
await sendMessages(io, data);
});
Expand All @@ -30,6 +46,10 @@ import { createAPrivateMessageSocket, retrieveAUserToUserPrivateMessageSocket }
await retrieveAUserToUserPrivateMessageSocket(socket, data)
})
});

}
export const getSocketIdOfUser =( userId:string ) =>{
return users.get(userId)
}

export default socket;
export default socket;
10 changes: 9 additions & 1 deletion src/controllers/privateChatController.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { Socket, Server } from 'socket.io';
import { Request, Response, NextFunction } from 'express';
import { PrivateMessageSchema, UserToUserPrivateMessageSchema } from '../schemas/privateMessageSchema';
import path from 'path';
import { getSocketIdOfUser } from '../config/socketCofing'

export const createAPrivateMessageController = async(req: Request, res: Response, next: NextFunction) => {
try {
Expand Down Expand Up @@ -57,7 +58,14 @@ export const createAPrivateMessageSocket= async(socket: Socket, data:any) =>{
}
else{
const sentPrivateMessage = await PrivateChatService.CreatePrivateMessage(message)
socket.emit('private message sent', sentPrivateMessage )
let receiverId = message.receiverId
let userId = message.userId
socket.emit('private message sent', {sentPrivateMessage, userId, receiverId} )
const recieverSocketId = getSocketIdOfUser(receiverId);
if(recieverSocketId){
socket.to(recieverSocketId).emit('private message recieved', sentPrivateMessage)
}


}

Expand Down
1 change: 1 addition & 0 deletions src/email-templates/verifyotp.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
export const verifyOtpTemplate = (link: string,token:number) => {
console.log(token)
return `<!DOCTYPE html>
<html lang="en">
<head>
Expand Down
7 changes: 6 additions & 1 deletion src/services/privateChat.service.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,7 +76,12 @@ export const getUserToUserPrivateMessages = async (userId: number, receiverId: n
if (!reciever || reciever === null || reciever === undefined){
throw new Error("Receiver not found");
}
const privateChat = await PrivateChat.findOne({where :{userId, receiverId}});
const privateChat = await PrivateChat.findOne({where :{
[Op.or]:[
{userId: userId, receiverId: receiverId},
{userId: receiverId, receiverId: userId}
]
}});
if (privateChat){
const PrivateMessages = await Message.findAll({where:{privateChatId: privateChat.id}})

Expand Down
22 changes: 2 additions & 20 deletions src/utils/server.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,16 +30,7 @@ const allowedOrigins = [
const server: HTTPServer = createServer(app);
export const io: SocketIOServer = new SocketIOServer(server, {
cors: {
origin: (origin, callback) => {
if (!origin || allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
}
},
methods: ["GET", "POST"],
allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept"],
credentials: true,
origin: "*",
},
});

Expand All @@ -50,16 +41,7 @@ app.use(express.urlencoded({ extended: true }));

app.use(
cors({
origin: (origin, callback) => {
if (!origin || allowedOrigins.includes(origin)) {
callback(null, true);
} else {
callback(new Error("Not allowed by CORS"));
}
},
methods: ["GET", "POST"],
allowedHeaders: ["Origin", "X-Requested-With", "Content-Type", "Accept"],
credentials: true,
origin: "*",
}),
);

Expand Down

0 comments on commit 311597e

Please sign in to comment.