mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 19:14:16 +00:00
71 lines
1.7 KiB
JavaScript
Executable File
71 lines
1.7 KiB
JavaScript
Executable File
import { Post, User, Comment, SavedPost } from "../../../models"
|
|
import fullfillPostsData from "../../../utils/fullfillPostsData"
|
|
|
|
export default async (payload) => {
|
|
let {
|
|
from_user_id,
|
|
for_user_id,
|
|
post_id,
|
|
query = {},
|
|
skip = 0,
|
|
limit = 20,
|
|
sort = { created_at: -1 },
|
|
savedOnly = false,
|
|
} = payload
|
|
|
|
let posts = []
|
|
let savedPostsIds = []
|
|
|
|
// if for_user_id is provided, get saved posts
|
|
if (for_user_id) {
|
|
const savedPosts = await SavedPost.find({ user_id: for_user_id })
|
|
.sort({ saved_at: -1 })
|
|
|
|
savedPostsIds = savedPosts.map((savedPost) => savedPost.post_id)
|
|
}
|
|
|
|
// if from_user_id is provided, get posts from that user
|
|
if (from_user_id) {
|
|
query.user_id = from_user_id
|
|
}
|
|
|
|
// if savedOnly is true,set to query to get only saved posts
|
|
if (savedOnly) {
|
|
query._id = { $in: savedPostsIds }
|
|
}
|
|
|
|
if (post_id) {
|
|
const post = await Post.findById(post_id).catch(() => false)
|
|
|
|
posts = [post]
|
|
} else {
|
|
posts = await Post.find({ ...query })
|
|
.sort(sort)
|
|
.skip(skip)
|
|
.limit(limit)
|
|
}
|
|
|
|
// short posts if is savedOnly argument
|
|
if (savedOnly) {
|
|
posts.sort((a, b) => {
|
|
return (
|
|
savedPostsIds.indexOf(a._id.toString()) -
|
|
savedPostsIds.indexOf(b._id.toString())
|
|
)
|
|
})
|
|
}
|
|
|
|
// fullfill data
|
|
posts = await fullfillPostsData({
|
|
posts,
|
|
for_user_id,
|
|
skip,
|
|
})
|
|
|
|
// if post_id is specified, return only one post
|
|
if (post_id) {
|
|
return posts[0]
|
|
}
|
|
|
|
return posts
|
|
} |