feat(playlists): add likes and playlists

This commit is contained in:
2026-05-25 21:23:56 +07:00
parent 8a03d51ccf
commit 59e4d86a3b
7 changed files with 165 additions and 0 deletions
+67
View File
@@ -0,0 +1,67 @@
import Playlist from '../models/Playlist.js';
import Track from '../models/Track.js';
export const playlistController = {
async list(req, res, next) {
try {
const playlists = await Playlist.find({ user: req.userId })
.sort({ createdAt: -1 })
.lean();
res.json({ success: true, data: playlists });
} catch (error) {
next(error);
}
},
async create(req, res, next) {
try {
const { name } = req.body;
if (!name) {
return res
.status(400)
.json({ success: false, message: 'Playlist name is required' });
}
const playlist = await Playlist.create({
name,
user: req.userId,
});
return res.json({ success: true, data: playlist });
} catch (error) {
next(error);
}
},
async addTrack(req, res, next) {
try {
const { playlistId } = req.params;
const { trackId } = req.body;
if (!trackId) {
return res
.status(400)
.json({ success: false, message: 'Track id is required' });
}
const exists = await Track.exists({ _id: trackId });
if (!exists) {
return res.status(404).json({ success: false, message: 'Track not found' });
}
const playlist = await Playlist.findOneAndUpdate(
{ _id: playlistId, user: req.userId },
{ $addToSet: { tracks: trackId } },
{ new: true }
).lean();
if (!playlist) {
return res.status(404).json({ success: false, message: 'Playlist not found' });
}
return res.json({ success: true, data: playlist });
} catch (error) {
next(error);
}
},
};