|
@@ -5,25 +5,81 @@ const io = require('../io');
|
|
|
const cache = require('../cache');
|
|
|
const utils = require('../utils');
|
|
|
const hooks = require('./hooks');
|
|
|
+const async = require('async');
|
|
|
+const playlists = require('../playlists');
|
|
|
|
|
|
module.exports = {
|
|
|
|
|
|
- indexForUser: (session, username, cb) => {
|
|
|
- db.models.playlist.find({ username }, (err, playlists) => {
|
|
|
+ indexForUser: (session, createdBy, cb) => {
|
|
|
+ db.models.playlist.find({ createdBy }, (err, playlists) => {
|
|
|
if (err) throw err;
|
|
|
- cb(playlists);
|
|
|
+ cb({
|
|
|
+ status: 'success',
|
|
|
+ data: playlists
|
|
|
+ });
|
|
|
});
|
|
|
},
|
|
|
|
|
|
- update: hooks.adminRequired((session, _id, playlist, cb) => {
|
|
|
- db.models.playlist.findOneAndUpdate({ _id }, playlist, { upsert: true }, (err, updatedPlaylist) => {
|
|
|
+ create: (session, data, cb) => {
|
|
|
+ async.waterfall([
|
|
|
+
|
|
|
+ (next) => {
|
|
|
+ return (data) ? next() : cb({ 'status': 'failure', 'message': 'Invalid data' });
|
|
|
+ },
|
|
|
+
|
|
|
+ // check the cache for the playlist
|
|
|
+ (next) => cache.hget('playlists', data._id, next),
|
|
|
+
|
|
|
+ // if the cached version exist
|
|
|
+ (playlist, next) => {
|
|
|
+ if (playlist) return next({ 'status': 'failure', 'message': 'A playlist with that id already exists' });
|
|
|
+ db.models.playlist.findOne({ _id: data._id }, next);
|
|
|
+ },
|
|
|
+
|
|
|
+ (playlist, next) => {
|
|
|
+ if (playlist) return next({ 'status': 'failure', 'message': 'A playlist with that id already exists' });
|
|
|
+ const { _id, displayName, songs, createdBy } = data;
|
|
|
+ db.models.playlist.create({
|
|
|
+ _id,
|
|
|
+ displayName,
|
|
|
+ songs,
|
|
|
+ createdBy,
|
|
|
+ createdAt: Date.now()
|
|
|
+ }, next);
|
|
|
+ }
|
|
|
+
|
|
|
+ ], (err, playlist) => {
|
|
|
+ if (err) {console.log(err); return cb({ 'status': 'failure', 'message': 'Something went wrong'});}
|
|
|
+ cache.pub('playlist.create', data._id);
|
|
|
+ return cb(null, { 'status': 'success', 'message': 'Successfully created playlist' });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ getPlaylist: (session, id, cb) => {
|
|
|
+ playlists.getPlaylist(id, (err, playlist) => {
|
|
|
+ if (err == null) return cb({
|
|
|
+ status: 'success',
|
|
|
+ data: playlist
|
|
|
+ });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ update: (session, _id, playlist, cb) => {
|
|
|
+ db.models.playlist.findOneAndUpdate({ _id }, playlist, { upsert: true }, (err, data) => {
|
|
|
+ if (err) throw err;
|
|
|
+ return cb({ status: 'success', message: 'Playlist has been successfully updated', data });
|
|
|
+ });
|
|
|
+ },
|
|
|
+
|
|
|
+ updateDisplayName: (session, _id, displayName, cb) => {
|
|
|
+ db.models.playlist.findOneAndUpdate({ _id }, { displayName }, { upsert: true }, (err, data) => {
|
|
|
if (err) throw err;
|
|
|
- return cb({ status: 'success', message: 'Playlist has been successfully updated', data: updatedPlaylist });
|
|
|
+ return cb({ status: 'success', message: 'Playlist has been successfully updated', data });
|
|
|
});
|
|
|
- }),
|
|
|
+ },
|
|
|
|
|
|
- remove: hooks.adminRequired((session, _id, cb) => {
|
|
|
+ remove: (session, _id, cb) => {
|
|
|
db.models.playlist.remove({ _id });
|
|
|
- })
|
|
|
+ }
|
|
|
|
|
|
};
|