71 lines
1.8 KiB
JavaScript
71 lines
1.8 KiB
JavaScript
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
|
|
}
|