feat: add Album model, artist/search/upload controllers, requireArtist middleware

This commit is contained in:
2026-05-26 07:01:11 +07:00
parent 59e4d86a3b
commit b0c29765a9
14 changed files with 278 additions and 7 deletions
+42
View File
@@ -0,0 +1,42 @@
import Track from '../models/Track.js';
export const searchController = {
async search(req, res, next) {
try {
const query = (req.query.q || '').trim();
if (!query) {
return res.json({
success: true,
data: { tracks: [], artists: [], albums: [] },
});
}
const regex = new RegExp(query.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'), 'i');
const tracks = await Track.find({
$or: [
{ title: regex },
{ artist: regex },
{ album: regex },
],
})
.select('-__v')
.sort({ createdAt: -1 })
.limit(50)
.lean();
const artistNames = [...new Set(tracks.map(t => t.artist))];
const artists = artistNames.map(name => ({ name }));
const albumNames = [...new Set(tracks.map(t => t.album))];
const albums = albumNames.map(name => ({ name }));
const data = { tracks, artists, albums };
return res.json({ success: true, data });
} catch (error) {
return next(error);
}
},
};