full
This commit is contained in:
70
utils/storyChatMessage.js
Normal file
70
utils/storyChatMessage.js
Normal file
@@ -0,0 +1,70 @@
|
||||
const MessageModel = require('../models/MessageModel')
|
||||
const UserModel = require('../models/UserModel')
|
||||
const { enrichMessage, emitChatEvents } = require('../helpers/chatHelpers')
|
||||
const { viewerIsBlockedBy } = require('./blockVisibility')
|
||||
|
||||
function storyMediaUrl (storagePath) {
|
||||
if (!storagePath) return ''
|
||||
const normalized = storagePath.replace(/\\/g, '/')
|
||||
const idx = normalized.indexOf('/storage/')
|
||||
if (idx >= 0) return normalized.slice(idx)
|
||||
return normalized.replace('/root/modstagram-back/storage', '/storage')
|
||||
}
|
||||
|
||||
async function sendStoryReactionMessage ({
|
||||
io,
|
||||
senderId,
|
||||
receiverId,
|
||||
story,
|
||||
owner,
|
||||
reactionType,
|
||||
commentText
|
||||
}) {
|
||||
if (!senderId || !receiverId || !story) return false
|
||||
if (String(senderId) === String(receiverId)) return false
|
||||
|
||||
const receiver = await UserModel.findById(receiverId)
|
||||
.select('blocked_users')
|
||||
.lean()
|
||||
if (!receiver) return false
|
||||
if (viewerIsBlockedBy(receiver, senderId)) return false
|
||||
if (owner && viewerIsBlockedBy(owner, senderId)) return false
|
||||
|
||||
const sharedStory = {
|
||||
storyId: String(story._id),
|
||||
mediaType: story.media_type,
|
||||
preview: storyMediaUrl(story.media_path),
|
||||
ownerUserName: owner?.user_name || '',
|
||||
ownerDisplayName:
|
||||
`${owner?.first_name || ''} ${owner?.last_name || ''}`.trim() ||
|
||||
owner?.user_name ||
|
||||
'کاربر',
|
||||
reactionType
|
||||
}
|
||||
|
||||
const suffix =
|
||||
reactionType === 'like'
|
||||
? '❤️'
|
||||
: (commentText || '').trim()
|
||||
|
||||
const content = `${JSON.stringify({ sharedStory })}\n${suffix}`
|
||||
|
||||
const newMessage = new MessageModel({
|
||||
senderId,
|
||||
receiverId,
|
||||
content
|
||||
})
|
||||
await newMessage.save()
|
||||
|
||||
if (io) {
|
||||
const formatted = await enrichMessage(newMessage)
|
||||
emitChatEvents(io, formatted, senderId, receiverId)
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
sendStoryReactionMessage,
|
||||
storyMediaUrl
|
||||
}
|
||||
Reference in New Issue
Block a user