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 }); |   } | ||||||
|  | } | ||||||
|  |  | ||||||
|  | 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; | ||||||
| } | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user