Selaa lähdekoodia

add db private messages

serg1557733 1 vuosi sitten
vanhempi
commit
0d484e2918

+ 14 - 6
backend/app.js

@@ -6,6 +6,7 @@ const mongoose = require('mongoose');
 const socket = require("socket.io");
 const User = require('./db/models/User');
 const Message = require('./db/models/Message');
+const PrivateMessage = require('./db/models/PrivateMessage')
 const jwt = require('jsonwebtoken');
 const bcrypt = require('bcrypt');
 require('dotenv').config(); // add dotnv for config
@@ -325,6 +326,7 @@ io.on("connection", async (socket) => {
 
         });
             console.log(`user :${socket.user.userName} , connected to socket`); 
+
         socket.on("muteUser",async (data) => {
             if(!socket.user.isAdmin){
                 return;
@@ -343,13 +345,19 @@ io.on("connection", async (socket) => {
                 // }
            });
 
-        socket.on("private message", ({ from, message, to }) => {
-            console.log(from,  to)
-            socket.to(to).emit("private message", {
-              message,
-              from,
-              createDate: Date.now(),
+        socket.on("private message", async ({ fromUser, from, message, toUser , to}) => {
+            console.log(fromUser)
+            
+            const privateMessage = new PrivateMessage({
+                text:  message,
+                createDate: Date.now(),
+                fromUser,
+                toUser
             });
+            await privateMessage.save()
+
+          
+            socket.to(to).emit("private message", {privateMessage, fromUser});
           });
 
 

+ 13 - 0
backend/db/models/PrivateMessage.js

@@ -0,0 +1,13 @@
+const {model, Schema} = require('mongoose');
+
+const PrivateMessage = new Schema({
+    text: {type: String, required: true},
+    createDate: {type: Date, required: true},
+    fromUser:{ type: Schema.Types.ObjectId, ref: 'User' },
+    toUser:{ type: Schema.Types.ObjectId, ref: 'User' },
+    file: {type: String} , // not in use
+    fileType: {type: String} //not in use
+
+})
+
+module.exports = model('PrivateMessage', PrivateMessage)

+ 5 - 3
frontend/src/components/chatPage/ChatPage.jsx

@@ -30,7 +30,8 @@ export const ChatPage = () => {
     const socket = useSelector(state => state.getUserSocketReducer.socket)
     const editOldMessage = useSelector(state => state.messageReducer.editMessage)
     let showUserInfoBox = useSelector(state => state.messageReducer.showUserInfoBox)// || localStorage.getItem('showBox');
-    const chatId = useSelector(state => state.userDataReducer.chatId)
+    const toUser = useSelector(state => state.userDataReducer.toUser)
+    const chatId = useSelector(state => state.userDataReducer.toUser.socketId)
     const isPrivatChat = useSelector(state => state.userDataReducer.isPrivatChat)
 
     const [message, setMessage] = useState({message: ''});
@@ -74,9 +75,10 @@ export const ChatPage = () => {
 
     const sendPrivateMessage = () => {
         socket.emit("private message", {
-            from: socket.id,
-            message,
+            fromUser: user,
+            message: message.message,
             to: chatId,
+            toUser
           })
     }
 

+ 3 - 2
frontend/src/components/chatPage/generalChat/UserInfoButton.jsx

@@ -12,7 +12,7 @@ export const UserInfoButton = ({item, i}) => {
     const user = useSelector(state => state.getUserSocketReducer.socketUserData)
     const socket = useSelector(state => state.getUserSocketReducer.socket)
     const isPrivatChat = useSelector(state => state.userDataReducer.isPrivatChat)
-    const chatId = useSelector(state => state.userDataReducer.chatId)
+    const chatId = useSelector(state => state.userDataReducer.toUser.socketId)
     const storeUserAvatar = useSelector(state => state.userDataReducer.avatar)
 
     let userAvatarUrl = storeUserAvatar || user.avatar;
@@ -23,10 +23,11 @@ export const UserInfoButton = ({item, i}) => {
         className={isPrivatChat&&(chatId === item.socketId)? 'online active' :'online' }                       
         onClick={() => {
             console.log(item.socketId, chatId)
-            store.dispatch(privateMessage({chatId: item.socketId}))
+            store.dispatch(privateMessage({toUser: item}))
             socket.emit('privat chat', {
                 user,
                 to: item.socketId,
+                toUser: item
               })
         }
         }

+ 2 - 8
frontend/src/components/chatPage/privateChat/PrivateChat.jsx

@@ -25,14 +25,8 @@ export const PrivateChat = () => {
     const storeMessageId = useSelector(state => state.messageReducer.messageId)
     const newMessages = useSelector(state => state.getUserSocketReducer.newMessages)
 
-    socket.on("private message", ({ message,createDate, from }) => {
-        console.log(message, from, createDate )
-        const newPrivatMessage = {
-            text: message,
-            from,
-            createDate:createDate
-        }
-        startMessages.push(newPrivatMessage)
+    socket.on("private message", ({privateMessage, fromUser}) => {
+        console.log(privateMessage , fromUser)
       });
 
 

+ 2 - 2
frontend/src/reducers/userDataReducer.js

@@ -14,7 +14,7 @@ const initialState = {
     responseMessage: '',
     showUserInfoBox: false,
     isPrivatChat: false,
-    chatId: '',
+    toUser: {},
     avatar: ''
 }
 const SERVER_URL =  process.env.REACT_APP_SERVER_URL
@@ -62,7 +62,7 @@ const getUserDataSlice = createSlice({
     reducers: {
         privateMessage: (state, action)=> {
             state.isPrivatChat = true;
-            state.chatId = action.payload.chatId
+            state.toUser = action.payload.toUser
         },
         generalMessage: (state, action)=> {
             state.isPrivatChat = false;