Skip to content
Open
Show file tree
Hide file tree
Changes from 3 commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions controllers/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ const serverMethods = require('../helpers/server-methods');
const slack = require('../helpers/slack');
const resetScript = require('../scripts/reset');
const logger = require('../helpers/logger');
const serverErrorResponse = require('../responses/serverErrorResponse');

const { app: appConfig } = require('../config');

Expand Down Expand Up @@ -93,8 +94,7 @@ module.exports = {
data: playlist,
});
} catch (err) {
logger.error(err);
return res.status(500).send({ message: 'An error occurred' });
return serverErrorResponse(res, err);
}
},

Expand Down
10 changes: 10 additions & 0 deletions controllers/notFound.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
const clientErrorResponse = require('../responses/clientErrorResponse');

/**
* Controller for handling routes that don't exist
* @param {*} req
* @param {*} res
*/
const notFound = (req, res) => clientErrorResponse(res, 400, 'This route doesn\'t exist yet');

module.exports = notFound;
30 changes: 14 additions & 16 deletions controllers/playlist.js
Original file line number Diff line number Diff line change
@@ -1,38 +1,36 @@
const spotify = require('../helpers/spotify');
const logger = require('../helpers/logger');
const serverErrorResponse = require('../responses/serverErrorResponse');
const clientErrorResponse = require('../responses/clientErrorResponse');
const successResponse = require('../responses/successResponse');

module.exports = {

/**
* Retrieve a single playlist
*/
getPlaylistByID: async (req, res) => {
try {
const { id } = req.params;

const playlist = await spotify.findPlaylist(id);
if (!playlist) {
return res.status(404).send({
status: false,
message: 'Playlist not found',
});
return clientErrorResponse(res, 404, 'Playlist not found');
}
return res.status(200).send({
status: true,
data: playlist,
});
return successResponse(res, 200, 'Playlist retrieved', playlist);
} catch (err) {
logger.error(err);
return res.status(500).send({ status: false, message: 'An error occurred' });
return serverErrorResponse(res, err);
}
},

/**
* Retrieve all playlists
*/
getAllPlaylists: async (req, res) => {
try {
const playlists = await spotify.findAllPlaylists();
return res.status(200).send({
status: true,
data: playlists,
});
return successResponse(res, 200, 'Playlists retrieved', playlists);
} catch (err) {
return res.status(500).send({ status: false, message: 'An error occurred' });
return serverErrorResponse(res, err);
}
},
};
28 changes: 15 additions & 13 deletions controllers/track.js
Original file line number Diff line number Diff line change
@@ -1,41 +1,43 @@
const spotify = require('../helpers/spotify');
const logger = require('../helpers/logger');
const serverErrorResponse = require('../responses/serverErrorResponse');
const clientErrorResponse = require('../responses/clientErrorResponse');
const successResponse = require('../responses/successResponse');

module.exports = {

/**
* Get track audio features
*/
getTrackAudioFeatures: async (req, res) => {
try {
const { id: trackId } = req.params;

await spotify.performAuthentication();
const trackFeatures = await spotify.getAudioFeaturesForTrack(trackId);
return res.status(200).send({
status: true,
data: trackFeatures,
});

return successResponse(res, 200, 'Audio features retrieved', trackFeatures);
} catch (err) {
logger.error(err);
return res.status(500).send({ message: 'An error occurred' });
return serverErrorResponse(res, err);
}
},

/**
* Get track data
*/
getTrackData: async (req, res) => {
try {
const { track_ids: ids } = req.body;

const result = await spotify.performAuthentication();
if (result && result.code === 401) {
return res.status(401).send({ message: result.message });
return clientErrorResponse(res, result.code, result.message);
}

const data = await spotify.getTrackData(ids);

return res.status(200).send({
status: true,
data,
});
return successResponse(res, 200, 'Track data retrieved', data);
} catch (err) {
return res.status(500).send({ message: 'An error occurred' });
return serverErrorResponse(res, err);
}
},
};
11 changes: 11 additions & 0 deletions responses/clientErrorResponse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
/**
* Method to return client error responses
* @param {*} res
* @param {*} code
* @param {*} message
*/

/* eslint-disable-next-line max-len */
const clientErrorResponse = (res, code, message) => res.status(code).send({ success: false, message });

module.exports = clientErrorResponse;
15 changes: 15 additions & 0 deletions responses/serverErrorResponse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
const logger = require('../helpers/logger');
const slack = require('../helpers/slack');

/**
* Method to return 5xx errors
* @param {*} res
* @param {*} error
*/
const serverErrorResponse = (res, error, code = 500) => {
logger.error(error);
slack.sendMonitorMessage(error);
return res.status(code).send({ success: false, message: 'An error occurred' });
};

module.exports = serverErrorResponse;
12 changes: 12 additions & 0 deletions responses/successResponse.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
/**
* Handler for success responses
* @param {*} res
* @param {*} code
* @param {*} message
* @param {*} data
*/

/* eslint-disable-next-line max-len */
const successResponse = (res, code, message, data) => res.status(code).send({ success: false, message, data });

module.exports = successResponse;
9 changes: 9 additions & 0 deletions routes/notFound.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
const express = require('express');

const router = express.Router();

const notFound = require('../controllers/notFound');

router.get('/', notFound);

module.exports = router;
2 changes: 2 additions & 0 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ const logger = require('./helpers/logger');
const indexRouter = require('./routes/index');
const playlistRouter = require('./routes/playlists');
const trackRouter = require('./routes/track');
const notFoundRouter = require('./routes/notFound');

require('./config/db');

Expand All @@ -26,6 +27,7 @@ app.disable('x-powered-by');
app.use('/', indexRouter);
app.use('/playlists', playlistRouter);
app.use('/track', trackRouter);
app.use('*', notFoundRouter);

// listen for requests :)
const listener = app.listen(appConfig.port, () => {
Expand Down