improve music feed endpoints

This commit is contained in:
SrGooglo 2023-04-04 10:49:54 +00:00
parent 47032ea0ff
commit 7661611c66
3 changed files with 97 additions and 3 deletions

View File

@ -1,7 +1,8 @@
import { Controller } from "linebridge/dist/server"
import getPosts from "./services/getPosts"
import getPlaylists from "./services/getPlaylists"
import getPlaylistsFromFollowing from "./services/getPlaylistsFromFollowing"
import getPlaylistsFromGlobal from "./services/getPlaylistsFromGlobal"
export default class FeedController extends Controller {
static refName = "FeedController"
@ -28,7 +29,7 @@ export default class FeedController extends Controller {
})
// fetch playlists
let playlists = await getPlaylists({
let playlists = await getPlaylistsFromFollowing({
for_user_id,
limit: req.query?.limit,
skip: req.query?.trim,
@ -61,6 +62,64 @@ export default class FeedController extends Controller {
return res.json(feed)
}
},
"/music/global": {
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"
})
}
// fetch playlists from global
const result = await getPlaylistsFromGlobal({
for_user_id,
limit: req.query?.limit,
skip: req.query?.trim,
})
return res.json(result)
}
},
"/music": {
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 = {
followingArtists: [],
global: [],
mayLike: [],
}
// fetch playlists from following
const followingArtistsPlaylists = await getPlaylistsFromFollowing({
for_user_id,
limit: req.query?.limit,
skip: req.query?.trim,
})
// fetch playlists from global
const globalPlaylists = await getPlaylistsFromGlobal({
for_user_id,
limit: req.query?.limit,
skip: req.query?.trim,
})
feed.followingArtists = followingArtistsPlaylists
feed.global = globalPlaylists
return res.json(feed)
}
},
"/posts": {
middlewares: ["withAuthentication"],
fn: async (req, res) => {
@ -100,7 +159,7 @@ export default class FeedController extends Controller {
let feed = []
// fetch playlists
const playlists = await getPlaylists({
const playlists = await getPlaylistsFromFollowing({
for_user_id,
limit: req.query?.limit,
skip: req.query?.trim,

View File

@ -0,0 +1,35 @@
import { User, Playlist } from "@models"
import getTrackDataById from "../../TracksController/services/getTrackDataById"
export default async (payload) => {
const {
limit = 20,
skip = 0,
} = payload
let playlists = await Playlist.find()
.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)
playlist.list = await Promise.all(playlist.list.map(async (track_id) => {
return await getTrackDataById(track_id)
})).catch((err) => {
return []
})
return {
...playlist.toObject(),
user: {
username: user.username,
avatar: user.avatar,
},
}
}))
return playlists
}