asmer@controller 3 år sedan
förälder
incheckning
a89378eaf9
2 ändrade filer med 17 tillägg och 12 borttagningar
  1. 12 8
      index.js
  2. 5 4
      models.js

+ 12 - 8
index.js

@@ -164,24 +164,28 @@ const upload  = require('multer')({ dest: uploadPath })
             if (user.chats.some(chat => chat._id.toString() === msg.chat._id.toString())){
                 let {_id, createdAt, text, chat, media, replyTo, forwarded, owner} = msg
                 await chat;
-                await media;
+                await Promise.all(media || []);
                 await replyTo;
                 await forwarded;
                 owner = await owner;
-                socket.emit('msg', {_id, createdAt, text, chat: chat && {_id: chat._id, title: chat.title},
-                                                          media: media && {_id: media._id, url: media.url},
+                await owner.avatar
+                console.log('MEDIA', media)
+                socket.emit('msg', {_id, createdAt: createdAt.getTime(), text, chat: chat && {_id: chat._id, title: chat.title},
+                                                          media: media && media.map(media => ({_id: media._id, url: media.url, type: media.type})),
                                                           replyTo: replyTo && {_id: replyTo._id, text: replyTo.text},
                                                           forwarded: forwarded && {_id: forwarded._id, text: forwarded.text},
-                                                          owner: {_id: owner._id, login: owner.login, nick: owner.nick}})
+                                                          owner: {_id: owner._id, login: owner.login, nick: owner.nick, avatar: owner.avatar && {url: owner.avatar.url}}})
             }
         }
     }
 
-    async function chatWatcher({members, _id, createdAt, title, messages, avatar, lastModified}){
+    async function chatWatcher({_loadRelations, members, _id, createdAt, title, messages, avatar, lastModified}){
 
         console.log('CHAT SAVE', _id, title)
         for (let [id,{user, socket}] of Object.entries(sockets)){
-            if (members.some(member => member._id.toString() === user._id.toString())){
+            const isMember = members.some(member => member._id.toString() === user._id.toString())
+            const wasMember  =(_loadRelations.members && _loadRelations.members.some(member => member._id.toString() === user._id.toString())) 
+            if (isMember || wasMember){
                 //await chat;
                 //await media;
                 //await replyTo;
@@ -189,8 +193,8 @@ const upload  = require('multer')({ dest: uploadPath })
                 await avatar;
                 await Promise.all(members)
                 //owner = await owner;
-                console.log('EMIT', _id, createdAt, title)
-                socket.emit('chat', {_id, createdAt, title, avatar: avatar && {_id: avatar._id, url: avatar.url}, members: members.map(({_id, login, nick}) => ({_id, login, nick})), lastModified})
+                console.log('EMIT', _id, createdAt.getTime(), title)
+                socket.emit(isMember ? 'chat' : 'chat_left', {_id, createdAt: createdAt.getTime(), title, avatar: avatar && {_id: avatar._id, url: avatar.url}, members: members.map(({_id, login, nick}) => ({_id, login, nick})), lastModified})
             }
         }
     }

+ 5 - 4
models.js

@@ -6,7 +6,7 @@ module.exports = async (dbName='graphql-chat') => {
 
     async function getModels({id, acl}, onMsgSave, onChatSave){
         const thisUser = id !== 'anon' && await Savable.m.User.findOne({_id: ObjectID(id)})
-        const chatACL  = thisUser && thisUser.chats.map(c => c._id.toString())
+        const chatACL  = thisUser && thisUser.chats && thisUser.chats.map && thisUser.chats.map(c => c._id.toString())
 
         const SlicedSavable = slice(id === 'anon' ? [id] : [...acl, ...chatACL])
 
@@ -15,6 +15,7 @@ module.exports = async (dbName='graphql-chat') => {
                 super(...params)
 
                 this.originalACL = this.acl && [...this.acl]
+                this.chats = Savable.arrize(this.chats)
             }
 
             async save(...params){
@@ -131,8 +132,8 @@ module.exports = async (dbName='graphql-chat') => {
                 let result =  await super.save(...params)
 
                 await this.chat
-                this.chat.lastModified = this.createdAt.toISOString()
-                await this.chat.save()
+                this.chat.lastModified = this.createdAt.getTime()
+                await Savable.prototype.save.call(this.chat)
 
 
                 onMsgSave(this)
@@ -175,7 +176,7 @@ module.exports = async (dbName='graphql-chat') => {
                 if (!this._id){
                     this.members.push(thisUser)
                     await super.save(...params)
-                    this.lastModified = this.createdAt.toISOString()
+                    this.lastModified = this.createdAt.getTime()
                     this.___permissions.read.push(this._id.toString())
                 }
                 onChatSave(this)