1
1
const express = require ( 'express' )
2
2
const { Server } = require ( 'socket.io' )
3
- const http = require ( 'http' )
3
+ const http = require ( 'http' )
4
4
const getUserDetailsFromToken = require ( '../helpers/getUserDetailsFromToken' )
5
5
const UserModel = require ( '../models/UserModel' )
6
- const { ConversationModel, MessageModel } = require ( '../models/ConversationModel' )
6
+ const { ConversationModel, MessageModel } = require ( '../models/ConversationModel' )
7
7
const getConversation = require ( '../helpers/getConversation' )
8
8
9
9
const app = express ( )
10
10
11
11
/***socket connection */
12
12
const server = http . createServer ( app )
13
- const allowedOrigins = [ `${ process . env . FRONTEND_URL } ` ] ;
14
- const io = new Server ( server , {
15
- cors : {
16
- origin : function ( origin , callback ) {
17
- if ( allowedOrigins . indexOf ( origin ) !== - 1 || ! origin ) {
18
- callback ( null , true ) ;
19
- } else {
20
- callback ( new Error ( 'Not allowed by CORS' ) ) ;
21
- }
22
- } ,
23
- credentials : true ,
13
+ const io = new Server ( server , {
14
+ cors : {
15
+ origin : 'https://chatify-ahkg.vercel.app/' ,
16
+ credentials : true
24
17
}
25
18
} )
26
19
@@ -31,9 +24,9 @@ const io = new Server(server, {
31
24
//online user
32
25
const onlineUser = new Set ( )
33
26
34
- io . on ( 'connection' , async ( socket ) => {
27
+ io . on ( 'connection' , async ( socket ) => {
35
28
36
- const token = socket . handshake . auth . token
29
+ const token = socket . handshake . auth . token
37
30
38
31
//current user details
39
32
const user = await getUserDetailsFromToken ( token )
@@ -42,123 +35,123 @@ io.on('connection', async (socket) => {
42
35
socket . join ( user ?. _id . toString ( ) )
43
36
onlineUser . add ( user ?. _id ?. toString ( ) )
44
37
45
- io . emit ( 'onlineUser' , Array . from ( onlineUser ) )
38
+ io . emit ( 'onlineUser' , Array . from ( onlineUser ) )
46
39
47
- socket . on ( 'message-page' , async ( userId ) => {
40
+ socket . on ( 'message-page' , async ( userId ) => {
48
41
const userDetails = await UserModel . findById ( userId ) . select ( "-password" )
49
-
42
+
50
43
const payload = {
51
- _id : userDetails ?. _id ,
52
- name : userDetails ?. name ,
53
- email : userDetails ?. email ,
54
- profile_pic : userDetails ?. profile_pic ,
55
- online : onlineUser . has ( userId )
44
+ _id : userDetails ?. _id ,
45
+ name : userDetails ?. name ,
46
+ email : userDetails ?. email ,
47
+ profile_pic : userDetails ?. profile_pic ,
48
+ online : onlineUser . has ( userId )
56
49
}
57
- socket . emit ( 'message-user' , payload )
50
+ socket . emit ( 'message-user' , payload )
58
51
59
52
60
- //get previous message
61
- const getConversationMessage = await ConversationModel . findOne ( {
62
- "$or" : [
63
- { sender : user ?. _id , receiver : userId } ,
64
- { sender : userId , receiver : user ?. _id }
53
+ //get previous message
54
+ const getConversationMessage = await ConversationModel . findOne ( {
55
+ "$or" : [
56
+ { sender : user ?. _id , receiver : userId } ,
57
+ { sender : userId , receiver : user ?. _id }
65
58
]
66
- } ) . populate ( 'messages' ) . sort ( { updatedAt : - 1 } )
59
+ } ) . populate ( 'messages' ) . sort ( { updatedAt : - 1 } )
67
60
68
- socket . emit ( 'message' , getConversationMessage ?. messages || [ ] )
61
+ socket . emit ( 'message' , getConversationMessage ?. messages || [ ] )
69
62
} )
70
63
71
64
72
65
//new message
73
- socket . on ( 'new message' , async ( data ) => {
66
+ socket . on ( 'new message' , async ( data ) => {
74
67
75
68
//check conversation is available both user
76
69
77
70
let conversation = await ConversationModel . findOne ( {
78
- "$or" : [
79
- { sender : data ?. sender , receiver : data ?. receiver } ,
80
- { sender : data ?. receiver , receiver : data ?. sender }
71
+ "$or" : [
72
+ { sender : data ?. sender , receiver : data ?. receiver } ,
73
+ { sender : data ?. receiver , receiver : data ?. sender }
81
74
]
82
75
} )
83
76
84
77
//if conversation is not available
85
- if ( ! conversation ) {
78
+ if ( ! conversation ) {
86
79
const createConversation = await ConversationModel ( {
87
- sender : data ?. sender ,
88
- receiver : data ?. receiver
80
+ sender : data ?. sender ,
81
+ receiver : data ?. receiver
89
82
} )
90
83
conversation = await createConversation . save ( )
91
84
}
92
-
85
+
93
86
const message = new MessageModel ( {
94
- text : data . text ,
95
- imageUrl : data . imageUrl ,
96
- videoUrl : data . videoUrl ,
97
- msgByUserId : data ?. msgByUserId ,
87
+ text : data . text ,
88
+ imageUrl : data . imageUrl ,
89
+ videoUrl : data . videoUrl ,
90
+ msgByUserId : data ?. msgByUserId ,
98
91
} )
99
92
const saveMessage = await message . save ( )
100
93
101
- const updateConversation = await ConversationModel . updateOne ( { _id : conversation ?. _id } , {
102
- "$push" : { messages : saveMessage ?. _id }
94
+ const updateConversation = await ConversationModel . updateOne ( { _id : conversation ?. _id } , {
95
+ "$push" : { messages : saveMessage ?. _id }
103
96
} )
104
97
105
98
const getConversationMessage = await ConversationModel . findOne ( {
106
- "$or" : [
107
- { sender : data ?. sender , receiver : data ?. receiver } ,
108
- { sender : data ?. receiver , receiver : data ?. sender }
99
+ "$or" : [
100
+ { sender : data ?. sender , receiver : data ?. receiver } ,
101
+ { sender : data ?. receiver , receiver : data ?. sender }
109
102
]
110
- } ) . populate ( 'messages' ) . sort ( { updatedAt : - 1 } )
103
+ } ) . populate ( 'messages' ) . sort ( { updatedAt : - 1 } )
111
104
112
105
113
- io . to ( data ?. sender ) . emit ( 'message' , getConversationMessage ?. messages || [ ] )
114
- io . to ( data ?. receiver ) . emit ( 'message' , getConversationMessage ?. messages || [ ] )
106
+ io . to ( data ?. sender ) . emit ( 'message' , getConversationMessage ?. messages || [ ] )
107
+ io . to ( data ?. receiver ) . emit ( 'message' , getConversationMessage ?. messages || [ ] )
115
108
116
109
//send conversation
117
110
const conversationSender = await getConversation ( data ?. sender )
118
111
const conversationReceiver = await getConversation ( data ?. receiver )
119
112
120
- io . to ( data ?. sender ) . emit ( 'conversation' , conversationSender )
121
- io . to ( data ?. receiver ) . emit ( 'conversation' , conversationReceiver )
113
+ io . to ( data ?. sender ) . emit ( 'conversation' , conversationSender )
114
+ io . to ( data ?. receiver ) . emit ( 'conversation' , conversationReceiver )
122
115
} )
123
116
124
117
125
118
//sidebar
126
- socket . on ( 'sidebar' , async ( currentUserId ) => {
127
- console . log ( "current user" , currentUserId )
119
+ socket . on ( 'sidebar' , async ( currentUserId ) => {
120
+ console . log ( "current user" , currentUserId )
128
121
const conversation = await getConversation ( currentUserId )
129
122
130
- socket . emit ( 'conversation' , conversation )
131
-
123
+ socket . emit ( 'conversation' , conversation )
124
+
132
125
} )
133
126
134
- socket . on ( 'seen' , async ( msgByUserId ) => {
135
-
127
+ socket . on ( 'seen' , async ( msgByUserId ) => {
128
+
136
129
let conversation = await ConversationModel . findOne ( {
137
- "$or" : [
138
- { sender : user ?. _id , receiver : msgByUserId } ,
139
- { sender : msgByUserId , receiver : user ?. _id }
130
+ "$or" : [
131
+ { sender : user ?. _id , receiver : msgByUserId } ,
132
+ { sender : msgByUserId , receiver : user ?. _id }
140
133
]
141
134
} )
142
135
143
136
const conversationMessageId = conversation ?. messages || [ ]
144
137
145
- const updateMessages = await MessageModel . updateMany (
146
- { _id : { "$in" : conversationMessageId } , msgByUserId : msgByUserId } ,
147
- { "$set" : { seen : true } }
138
+ const updateMessages = await MessageModel . updateMany (
139
+ { _id : { "$in" : conversationMessageId } , msgByUserId : msgByUserId } ,
140
+ { "$set" : { seen : true } }
148
141
)
149
142
150
143
//send conversation
151
144
const conversationSender = await getConversation ( user ?. _id ?. toString ( ) )
152
145
const conversationReceiver = await getConversation ( msgByUserId )
153
146
154
- io . to ( user ?. _id ?. toString ( ) ) . emit ( 'conversation' , conversationSender )
155
- io . to ( msgByUserId ) . emit ( 'conversation' , conversationReceiver )
147
+ io . to ( user ?. _id ?. toString ( ) ) . emit ( 'conversation' , conversationSender )
148
+ io . to ( msgByUserId ) . emit ( 'conversation' , conversationReceiver )
156
149
} )
157
150
158
151
//disconnect
159
- socket . on ( 'disconnect' , ( ) => {
152
+ socket . on ( 'disconnect' , ( ) => {
160
153
onlineUser . delete ( user ?. _id ?. toString ( ) )
161
- console . log ( 'disconnect user ' , socket . id )
154
+ console . log ( 'disconnect user ' , socket . id )
162
155
} )
163
156
} )
164
157
0 commit comments