import Track from '../models/Track.js'; export const artistController = { async getProfile(req, res, next) { try { const artistName = req.params.artistName; if (!artistName) { return res.status(400).json({ success: false, message: 'Artist name is required' }); } const decodedName = decodeURIComponent(artistName); const tracks = await Track.find({ artist: decodedName }) .select('-__v') .sort({ createdAt: -1 }) .lean(); if (!tracks.length) { return res.status(404).json({ success: false, message: 'Artist not found' }); } const totalTracks = tracks.length; const genres = [...new Set(tracks.map(t => t.genre).filter(Boolean))]; const albums = [...new Set(tracks.map(t => t.album).filter(Boolean))]; const data = { name: decodedName, trackCount: totalTracks, genres, albums, imageUrl: tracks.find(t => t.coverUrl)?.coverUrl || null, topTracks: tracks.slice(0, 10), }; return res.json({ success: true, data }); } catch (error) { return next(error); } }, async getTracks(req, res, next) { try { const artistName = req.params.artistName; if (!artistName) { return res.status(400).json({ success: false, message: 'Artist name is required' }); } const decodedName = decodeURIComponent(artistName); const tracks = await Track.find({ artist: decodedName }) .select('-__v') .sort({ createdAt: -1 }) .lean(); return res.json({ success: true, data: tracks }); } catch (error) { return next(error); } }, };