implement getPlaylist in feed controller

This commit is contained in:
SrGooglo 2022-12-13 11:55:15 +00:00
parent 7a378c7aa2
commit 8eabaa9654
2 changed files with 69 additions and 0 deletions

View File

@ -1,6 +1,7 @@
import { Controller } from "linebridge/dist/server"
import getPosts from "./methods/getPosts"
import getPlaylists from "./methods/getPlaylists"
export default class FeedController extends Controller {
static refName = "FeedController"
@ -29,6 +30,31 @@ export default class FeedController extends Controller {
feed = feed.concat(posts)
return res.json(feed)
}
},
"/playlists": {
middlewares: ["withAuthentication"],
fn: async (req, res) => {
const for_user_id = req.user?._id.toString()
if (!for_user_id) {
return res.status(400).json({
error: "Invalid user id"
})
}
let feed = []
// fetch playlists
const playlists = await getPlaylists({
for_user_id,
limit: req.query?.limit,
skip: req.query?.trim,
})
feed = feed.concat(playlists)
return res.json(feed)
}
}

View File

@ -0,0 +1,43 @@
import { User, Playlist, UserFollow } from "../../../models"
export default async (payload) => {
const {
for_user_id,
limit = 20,
skip = 0,
} = payload
// get post from users that the user follows
const followingUsers = await UserFollow.find({
user_id: for_user_id
})
const followingUserIds = followingUsers.map((followingUser) => followingUser.to)
const fetchFromUserIds = [
for_user_id,
...followingUserIds,
]
let playlists = await Playlist.find({
user_id: { $in: fetchFromUserIds }
})
.sort({ created_at: -1 })
.limit(limit)
.skip(skip)
playlists = await Promise.all(playlists.map(async (playlist) => {
// get user data
const user = await User.findById(playlist.user_id)
return {
...playlist.toObject(),
user: {
username: user.username,
avatar: user.avatar,
},
}
}))
return playlists
}