Fix: View history error handling #140

Merged
KevinMidboe merged 1 commits from fix/view-history-error-handling into master 2022-08-25 15:20:39 +00:00

View File

@@ -6,16 +6,40 @@ const ip = configuration.get("tautulli", "ip");
const port = configuration.get("tautulli", "port"); const port = configuration.get("tautulli", "port");
const tautulli = new Tautulli(apiKey, ip, port); const tautulli = new Tautulli(apiKey, ip, port);
function handleError(error, res) { class MissingDaysParameterError extends Error {
const { status, message } = error; constructor() {
const message = "Missing parameter: days (number)";
super(message);
if (status && message) { this.statusCode = 422;
return res.status(status).send({ success: false, message }); }
}
class MissingYAxisParameterError extends Error {
constructor(message = "Missing parameter: y_axis") {
super(message);
this.statusCode = 422;
}
}
function requiredPlaysByDayParams(req) {
const days = req.query?.days;
const yAxis = req.query?.y_axis;
let error;
if (days === undefined) {
error = new MissingDaysParameterError();
} }
return res.status(500).send({ const allowedYAxisDataType = ["plays", "duration"];
message: "An unexpected error occured while fetching view history" if (!allowedYAxisDataType.includes(yAxis)) {
}); error = new MissingYAxisParameterError(
`Y axis parameter must be one of values: [${allowedYAxisDataType}]`
);
}
return error ? Promise.reject(error) : Promise.resolve();
} }
function watchTimeStatsController(req, res) { function watchTimeStatsController(req, res) {
@@ -30,7 +54,15 @@ function watchTimeStatsController(req, res) {
message: "watch time successfully fetched from tautulli" message: "watch time successfully fetched from tautulli"
}); });
}) })
.catch(error => handleError(error, res)); .catch(error => {
res.status(error?.statusCode || 500).send({
message:
error?.message ||
"An unexpected error occured while fetching watch time",
errorResponse: error?.errorResponse,
success: false
});
});
} }
function getPlaysByDayOfWeekController(req, res) { function getPlaysByDayOfWeekController(req, res) {
@@ -38,8 +70,8 @@ function getPlaysByDayOfWeekController(req, res) {
const days = req.query?.days; const days = req.query?.days;
const yAxis = req.query?.y_axis; const yAxis = req.query?.y_axis;
return tautulli return requiredPlaysByDayParams(req)
.getPlaysByDayOfWeek(user.plexUserId, days, yAxis) .then(() => tautulli.getPlaysByDayOfWeek(user.plexUserId, days, yAxis))
.then(data => .then(data =>
res.send({ res.send({
success: true, success: true,
@@ -47,7 +79,15 @@ function getPlaysByDayOfWeekController(req, res) {
message: "play by day of week successfully fetched from tautulli" message: "play by day of week successfully fetched from tautulli"
}) })
) )
.catch(error => handleError(error, res)); .catch(error => {
res.status(error?.statusCode || 500).send({
message:
error?.message ||
"An unexpected error occured while fetching plays by day of week",
errorResponse: error?.errorResponse,
success: false
});
});
} }
function getPlaysByDaysController(req, res) { function getPlaysByDaysController(req, res) {
@@ -55,30 +95,23 @@ function getPlaysByDaysController(req, res) {
const days = req.query?.days; const days = req.query?.days;
const yAxis = req.query?.y_axis; const yAxis = req.query?.y_axis;
if (days === undefined) { return requiredPlaysByDayParams(req, res)
return res.status(422).send({ .then(() => tautulli.getPlaysByDays(user.plexUserId, days, yAxis))
success: false,
message: "Missing parameter: days (number)"
});
}
const allowedYAxisDataType = ["plays", "duration"];
if (!allowedYAxisDataType.includes(yAxis)) {
return res.status(422).send({
success: false,
message: `Y axis parameter must be one of values: [${allowedYAxisDataType}]`
});
}
return tautulli
.getPlaysByDays(user.plexUserId, days, yAxis)
.then(data => .then(data =>
res.send({ res.send({
success: true, success: true,
data: data.response.data data: data.response.data
}) })
) )
.catch(error => handleError(error, res)); .catch(error => {
res.status(error?.statusCode || 500).send({
message:
error?.message ||
"An unexpected error occured while fetching plays by days",
errorResponse: error?.errorResponse,
success: false
});
});
} }
function userViewHistoryController(req, res) { function userViewHistoryController(req, res) {
@@ -96,7 +129,15 @@ function userViewHistoryController(req, res) {
message: "view history successfully fetched from tautulli" message: "view history successfully fetched from tautulli"
}); });
}) })
.catch(error => handleError(error, res)); .catch(error => {
res.status(error?.statusCode || 500).send({
message:
error?.message ||
"An unexpected error occured while fetching view history",
errorResponse: error?.errorResponse,
success: false
});
});
// const username = user.username; // const username = user.username;
} }