2024-03-05 10:20:36 +00:00

60 lines
1.5 KiB
JavaScript
Executable File

import { Track, TrackLike } from "@shared-classes/DbModels"
import { AuthorizationError } from "@shared-classes/Errors"
// TODO: Fetch from external linked services (like tidal, spotify, ...)
export default async (req, res) => {
if (!req.session) {
return new AuthorizationError(req, res)
}
const { limit = 100, offset = 0 } = req.query
let totalLikedTracks = await TrackLike.count({
user_id: req.session.user_id,
})
let likedTracks = await TrackLike.find({
user_id: req.session.user_id,
})
.limit(Number(limit))
.skip(Number(offset))
.sort({ created_at: -1 })
const likedTracksIds = likedTracks.map((item) => {
return item.track_id
})
let tracks = await Track.find({
_id: likedTracksIds,
//public: true,
})
.catch((err) => {
return []
})
tracks = tracks.map((item) => {
item = item.toObject()
const likeIndex = likedTracksIds.indexOf(item._id.toString())
if (likeIndex !== -1) {
item.liked_at = new Date(likedTracks[likeIndex].created_at).getTime()
}
item.liked = true
return item
})
tracks.sort((a, b) => {
const indexA = likedTracksIds.indexOf(a._id.toString())
const indexB = likedTracksIds.indexOf(b._id.toString())
return indexA - indexB
})
return res.json({
total_length: totalLikedTracks,
tracks,
})
}