mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-11 03:24:16 +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 { Controller } from "linebridge/dist/server"
|
||||||
|
|
||||||
import getPosts from "./methods/getPosts"
|
import getPosts from "./methods/getPosts"
|
||||||
|
import getPlaylists from "./methods/getPlaylists"
|
||||||
|
|
||||||
export default class FeedController extends Controller {
|
export default class FeedController extends Controller {
|
||||||
static refName = "FeedController"
|
static refName = "FeedController"
|
||||||
@ -29,6 +30,31 @@ export default class FeedController extends Controller {
|
|||||||
|
|
||||||
feed = feed.concat(posts)
|
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)
|
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