mirror of
https://github.com/ragestudio/comty.git
synced 2025-06-10 02:54:15 +00:00
implement /search
endpoint
This commit is contained in:
parent
4fd0e33075
commit
eab439e301
@ -13,7 +13,8 @@
|
|||||||
"StorageClient": "src/shared-classes",
|
"StorageClient": "src/shared-classes",
|
||||||
"DbManager": "src/shared-classes",
|
"DbManager": "src/shared-classes",
|
||||||
"Errors": "src/shared-classes",
|
"Errors": "src/shared-classes",
|
||||||
"DbModels": "src/shared-classes"
|
"DbModels": "src/shared-classes",
|
||||||
|
"TidalAPI": "src/shared-classes"
|
||||||
},
|
},
|
||||||
"license": "MIT",
|
"license": "MIT",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
|
88
packages/music_server/src/controllers/search/index.js
Normal file
88
packages/music_server/src/controllers/search/index.js
Normal file
@ -0,0 +1,88 @@
|
|||||||
|
import { Playlist, Track } from "@shared-classes/DbModels"
|
||||||
|
import TidalAPI from "@shared-classes/TidalAPI"
|
||||||
|
|
||||||
|
async function searchRoute(req, res) {
|
||||||
|
const {
|
||||||
|
keywords,
|
||||||
|
limit = 5,
|
||||||
|
offset = 0,
|
||||||
|
useTidal = false
|
||||||
|
} = req.query
|
||||||
|
|
||||||
|
let results = {
|
||||||
|
playlists: [],
|
||||||
|
artists: [],
|
||||||
|
albums: [],
|
||||||
|
tracks: [],
|
||||||
|
}
|
||||||
|
|
||||||
|
let searchQuery = {
|
||||||
|
public: true,
|
||||||
|
}
|
||||||
|
|
||||||
|
if (keywords) {
|
||||||
|
searchQuery = {
|
||||||
|
...searchQuery,
|
||||||
|
title: {
|
||||||
|
$regex: keywords,
|
||||||
|
$options: "i",
|
||||||
|
},
|
||||||
|
// TODO: Improve searching by album or artist
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
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
|
||||||
|
})
|
||||||
|
|
||||||
|
tidalResult.tracks.items.forEach((element) => {
|
||||||
|
element._id = element.id
|
||||||
|
|
||||||
|
const coverUID = element.album.cover.replace(/-/g, "/")
|
||||||
|
|
||||||
|
element.cover = `https://resources.tidal.com/images/${coverUID}/1280x1280.jpg`
|
||||||
|
|
||||||
|
element.artist = element.artists.map(artist => artist.name).join(", ")
|
||||||
|
|
||||||
|
element.metadata = {
|
||||||
|
title: element.title,
|
||||||
|
artists: element.artists.map(artist => artist.name).join(", "),
|
||||||
|
artist: element.artists.map(artist => artist.name).join(", "),
|
||||||
|
album: element.album.title,
|
||||||
|
duration: element.duration
|
||||||
|
}
|
||||||
|
|
||||||
|
element.service = "tidal"
|
||||||
|
|
||||||
|
results.tracks.push(element)
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return res.json(results)
|
||||||
|
}
|
||||||
|
|
||||||
|
export default (router) => {
|
||||||
|
router.get("/", searchRoute)
|
||||||
|
|
||||||
|
return {
|
||||||
|
path: "/search",
|
||||||
|
router,
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user