mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-13 12:34:16 +00:00
60 lines
1.4 KiB
JavaScript
Executable File
60 lines
1.4 KiB
JavaScript
Executable File
import { Track, TrackLike } from "@db_models"
|
|
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,
|
|
})
|
|
} |