Fix: View history error handling #140
@@ -6,16 +6,40 @@ const ip = configuration.get("tautulli", "ip");
|
||||
const port = configuration.get("tautulli", "port");
|
||||
const tautulli = new Tautulli(apiKey, ip, port);
|
||||
|
||||
function handleError(error, res) {
|
||||
const { status, message } = error;
|
||||
class MissingDaysParameterError extends Error {
|
||||
constructor() {
|
||||
const message = "Missing parameter: days (number)";
|
||||
super(message);
|
||||
|
||||
if (status && message) {
|
||||
return res.status(status).send({ success: false, message });
|
||||
this.statusCode = 422;
|
||||
}
|
||||
}
|
||||
|
||||
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({
|
||||
message: "An unexpected error occured while fetching view history"
|
||||
});
|
||||
const allowedYAxisDataType = ["plays", "duration"];
|
||||
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) {
|
||||
@@ -30,7 +54,15 @@ function watchTimeStatsController(req, res) {
|
||||
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) {
|
||||
@@ -38,8 +70,8 @@ function getPlaysByDayOfWeekController(req, res) {
|
||||
const days = req.query?.days;
|
||||
const yAxis = req.query?.y_axis;
|
||||
|
||||
return tautulli
|
||||
.getPlaysByDayOfWeek(user.plexUserId, days, yAxis)
|
||||
return requiredPlaysByDayParams(req)
|
||||
.then(() => tautulli.getPlaysByDayOfWeek(user.plexUserId, days, yAxis))
|
||||
.then(data =>
|
||||
res.send({
|
||||
success: true,
|
||||
@@ -47,7 +79,15 @@ function getPlaysByDayOfWeekController(req, res) {
|
||||
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) {
|
||||
@@ -55,30 +95,23 @@ function getPlaysByDaysController(req, res) {
|
||||
const days = req.query?.days;
|
||||
const yAxis = req.query?.y_axis;
|
||||
|
||||
if (days === undefined) {
|
||||
return res.status(422).send({
|
||||
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)
|
||||
return requiredPlaysByDayParams(req, res)
|
||||
.then(() => tautulli.getPlaysByDays(user.plexUserId, days, yAxis))
|
||||
.then(data =>
|
||||
res.send({
|
||||
success: true,
|
||||
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) {
|
||||
@@ -96,7 +129,15 @@ function userViewHistoryController(req, res) {
|
||||
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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user