Files
modstagram-back/utils/followHelpers.js
payacom 3f416a7a60 full
2026-08-31 20:45:41 +03:30

47 lines
1.4 KiB
JavaScript

const UserFollowModel = require('../models/UserFollowModel')
const UserModel = require('../models/UserModel')
async function getFollowCounts (userId) {
const [followersCount, followingCount] = await Promise.all([
UserFollowModel.countDocuments({ followingId: userId }),
UserFollowModel.countDocuments({ followerId: userId })
])
return { followersCount, followingCount }
}
async function mapFollowUsers (ids, viewerId) {
if (!ids.length) return []
const users = await UserModel.find({ _id: { $in: ids } })
.select('_id user_name first_name last_name profile_image is_verified verify_badge account_status')
.lean()
const byId = Object.fromEntries(users.map((u) => [String(u._id), u]))
let followingSet = new Set()
if (viewerId) {
const rows = await UserFollowModel.find({
followerId: viewerId,
followingId: { $in: ids }
}).select('followingId').lean()
followingSet = new Set(rows.map((r) => String(r.followingId)))
}
return ids
.map((id) => byId[String(id)])
.filter(Boolean)
.map((u) => ({
_id: String(u._id),
user_name: u.user_name || '',
first_name: u.first_name || '',
last_name: u.last_name || '',
profile_image: u.profile_image || '',
is_verified: u.is_verified || 'none',
verify_badge: u.verify_badge || 'none',
is_following: followingSet.has(String(u._id))
}))
}
module.exports = {
getFollowCounts,
mapFollowUsers
}