Fix: View history error handling #140
@@ -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 });
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return res.status(500).send({
|
class MissingYAxisParameterError extends Error {
|
||||||
message: "An unexpected error occured while fetching view history"
|
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();
|
||||||
|
}
|
||||||
|
|
||||||
|
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) {
|
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;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user