mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 19:14:16 +00:00
86 lines
1.9 KiB
JavaScript
Executable File
86 lines
1.9 KiB
JavaScript
Executable File
import { Release, Playlist, Track } from "@db_models"
|
|
import TidalAPI from "@shared-classes/TidalAPI"
|
|
|
|
async function searchRoute(req, res) {
|
|
try {
|
|
const {
|
|
keywords,
|
|
limit = 5,
|
|
offset = 0,
|
|
useTidal = false
|
|
} = req.query
|
|
|
|
let results = {
|
|
playlists: [],
|
|
artists: [],
|
|
tracks: [],
|
|
album: [],
|
|
ep: [],
|
|
single: [],
|
|
}
|
|
|
|
let searchQuery = {
|
|
public: true,
|
|
}
|
|
|
|
if (keywords) {
|
|
searchQuery = {
|
|
...searchQuery,
|
|
title: {
|
|
$regex: keywords,
|
|
$options: "i",
|
|
},
|
|
// TODO: Improve searching by album or artist
|
|
}
|
|
}
|
|
|
|
let releases = await Release.find(searchQuery)
|
|
.limit(limit)
|
|
.skip(offset)
|
|
|
|
if (releases && releases.length > 0) {
|
|
releases.forEach((release) => {
|
|
results[release.type].push(release)
|
|
})
|
|
}
|
|
|
|
let playlists = await Playlist.find(searchQuery)
|
|
.limit(limit)
|
|
.skip(offset)
|
|
|
|
if (playlists) {
|
|
results.playlists = playlists
|
|
}
|
|
|
|
let tracks = await Track.find(searchQuery)
|
|
.limit(limit)
|
|
.skip(offset)
|
|
|
|
if (tracks) {
|
|
results.tracks = tracks
|
|
}
|
|
|
|
if (toBoolean(useTidal)) {
|
|
const tidalResult = await TidalAPI.search({
|
|
query: keywords
|
|
})
|
|
|
|
results.tracks = [...results.tracks, ...tidalResult]
|
|
}
|
|
|
|
return res.json(results)
|
|
} catch (error) {
|
|
return res.status(500).json({
|
|
error: error.message,
|
|
})
|
|
}
|
|
}
|
|
|
|
export default (router) => {
|
|
router.get("/", searchRoute)
|
|
|
|
return {
|
|
path: "/search",
|
|
router,
|
|
}
|
|
} |