mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 02:54:15 +00:00
implement getPlaylist
in feed controller
This commit is contained in:
parent
7a378c7aa2
commit
8eabaa9654
@ -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)
|
||||
}
|
||||
}
|
||||
|
@ -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
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user