New release_dates endpoint for movie
This commit is contained in:
		| @@ -3,7 +3,7 @@ const convertTmdbToMovie = require('src/tmdb/convertTmdbToMovie'); | ||||
| const convertTmdbToShow = require('src/tmdb/convertTmdbToShow'); | ||||
| const convertTmdbToPerson = require('src/tmdb/convertTmdbToPerson'); | ||||
|  | ||||
| const { Credits } = require('src/tmdb/types'); | ||||
| const { Credits, ReleaseDates} = require('src/tmdb/types'); | ||||
| // const { tmdbInfo } = require('src/tmdb/types') | ||||
|  | ||||
| class TMDB { | ||||
| @@ -17,6 +17,7 @@ class TMDB { | ||||
|       personSearch: 'ps', | ||||
|       movieInfo: 'mi', | ||||
|       movieCredits: 'mc', | ||||
|       movieReleaseDates: 'mrd', | ||||
|       showInfo: 'si',  | ||||
|       personInfo: 'pi', | ||||
|       miscNowPlayingMovies: 'npm', | ||||
| @@ -129,6 +130,25 @@ class TMDB { | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   tmdbRelaseDatesError(error) { | ||||
|     if (error.status === 404) { | ||||
|       throw { | ||||
|         status: 404, | ||||
|         message: error.response.body.status_message | ||||
|       } | ||||
|     } else if (error.status === 401) { | ||||
|       throw { | ||||
|         status: 401, | ||||
|         message: error.response.body.status_message | ||||
|       } | ||||
|     } | ||||
|  | ||||
|     throw { | ||||
|       status: 500, | ||||
|       message: 'An unexpected error occured while fetching release dates from tmdb' | ||||
|     } | ||||
|   } | ||||
|  | ||||
|   movieCredits(identifier) { | ||||
|     const query = { id: identifier } | ||||
|     const cacheKey = `${this.cacheTags.movieCredits}:${identifier}` | ||||
| @@ -140,6 +160,17 @@ class TMDB { | ||||
|       .then(credits => Credits.convertFromTmdbResponse(credits)) | ||||
|   } | ||||
|  | ||||
|   movieReleaseDates(identifier) { | ||||
|     const query = { id: identifier } | ||||
|     const cacheKey = `${this.cacheTags.movieReleaseDates}:${identifier}` | ||||
|  | ||||
|     return this.cache.get(cacheKey) | ||||
|       .catch(() => this.tmdb('movieReleaseDates', query)) | ||||
|       .catch(tmdbError => this.tmdbRelaseDatesError(tmdbError)) | ||||
|       .then(releaseDates => this.cache.set(cacheKey, releaseDates, 1)) | ||||
|       .then(releaseDates => ReleaseDates.convertFromTmdbResponse(releaseDates)) | ||||
|   } | ||||
|   | ||||
|   /** | ||||
|    * Retrieve a specific show by id from TMDB. | ||||
|    * @param {Number} identifier of the show you want to retrieve | ||||
|   | ||||
| @@ -2,5 +2,6 @@ import Movie from './types/movie.js' | ||||
| import Show from './types/show.js' | ||||
| import Person from './types/person.js' | ||||
| import Credits from './types/credits.js' | ||||
| import ReleaseDates from './types/releaseDates.js' | ||||
|  | ||||
| module.exports = { Movie, Show, Person, Credits } | ||||
| module.exports = { Movie, Show, Person, ReleaseDates } | ||||
|   | ||||
							
								
								
									
										62
									
								
								seasoned_api/src/tmdb/types/releaseDates.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										62
									
								
								seasoned_api/src/tmdb/types/releaseDates.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,62 @@ | ||||
| class ReleaseDate { | ||||
|   constructor(certification, language, releaseDate, type, note) { | ||||
|     this.certification = certification; | ||||
|     this.language = language; | ||||
|     this.releaseDate = releaseDate; | ||||
|     this.type = this.releaseTypeLookup(type); | ||||
|     this.note = note; | ||||
|   } | ||||
|  | ||||
|   releaseTypeLookup(releaseTypeKey) { | ||||
|     const releaseTypeEnum = { | ||||
|       1: 'Premier', | ||||
|       2: 'Limited theatrical', | ||||
|       3: 'Theatrical', | ||||
|       4: 'Digital', | ||||
|       5: 'Physical', | ||||
|       6: 'TV' | ||||
|     } | ||||
|     if (releaseTypeKey <= Object.keys(releaseTypeEnum).length) { | ||||
|       return releaseTypeEnum[releaseTypeKey] | ||||
|     } else { | ||||
|       // TODO log | Release type not defined, does this need updating? | ||||
|       return null | ||||
|     } | ||||
|   } | ||||
| } | ||||
|  | ||||
| class Release {  | ||||
|   constructor(country, releaseDates) { | ||||
|     this.country = country; | ||||
|     this.releaseDates = releaseDates; | ||||
|   } | ||||
| } | ||||
|  | ||||
| class ReleaseDates {  | ||||
|   constructor(id, releases) { | ||||
|     this.id = id; | ||||
|     this.releases = releases; | ||||
|   } | ||||
|  | ||||
|   static convertFromTmdbResponse(response) { | ||||
|     console.log('this is relese dates response') | ||||
|     const { id, results } = response; | ||||
|  | ||||
|     const releases = results.map(countryRelease =>  | ||||
|       new Release( | ||||
|         countryRelease.iso_3166_1,  | ||||
|         countryRelease.release_dates.map(rd => new ReleaseDate(rd.certification, rd.iso_639_1, rd.release_date, rd.type, rd.note)) | ||||
|       )) | ||||
|  | ||||
|     return new ReleaseDates(id, releases) | ||||
|   } | ||||
|  | ||||
|   createJsonResponse() { | ||||
|     return JSON.stringify({ | ||||
|       id: this.id, | ||||
|       release_dates: this.releases | ||||
|     }) | ||||
|   } | ||||
| } | ||||
|  | ||||
| module.exports = ReleaseDates; | ||||
| @@ -79,9 +79,13 @@ router.get('/v2/show/now_playing', listController.nowPlayingShows); | ||||
| router.get('/v2/show/popular', listController.popularShows); | ||||
| router.get('/v2/show/top_rated', listController.topRatedShows); | ||||
|  | ||||
| router.get('/v2/movie/:id/credits', require('./controllers/movie/credits.js')); | ||||
| router.get('/v2/movie/:id/release_dates', require('./controllers/movie/releaseDates.js')); | ||||
|  | ||||
| router.get('/v2/movie/:id', require('./controllers/info/movieInfo.js')); | ||||
| router.get('/v2/show/:id', require('./controllers/info/showInfo.js')); | ||||
| router.get('/v2/person/:id', require('./controllers/info/personInfo.js')); | ||||
|  | ||||
| /** | ||||
|  * Plex | ||||
|  */ | ||||
|   | ||||
							
								
								
									
										26
									
								
								seasoned_api/src/webserver/controllers/movie/releaseDates.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										26
									
								
								seasoned_api/src/webserver/controllers/movie/releaseDates.js
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,26 @@ | ||||
| const configuration = require('src/config/configuration').getInstance(); | ||||
| const Cache = require('src/tmdb/cache'); | ||||
| const TMDB = require('src/tmdb/tmdb'); | ||||
|  | ||||
| const cache = new Cache(); | ||||
| const tmdb = new TMDB(cache, configuration.get('tmdb', 'apiKey')); | ||||
|  | ||||
| const movieReleaseDatesController = (req, res) => { | ||||
|   const movieId = req.params.id; | ||||
|  | ||||
|   tmdb.movieReleaseDates(movieId) | ||||
|     .then(releaseDates => res.send(releaseDates)) | ||||
|     .catch(error => { | ||||
|       const { status, message } = error; | ||||
|  | ||||
|       if (status && message) { | ||||
|         res.status(error.status).send({ success: false, error: error.message }) | ||||
|       } else { | ||||
|         // TODO log unhandled errors : here our at tmdbReleaseError ? | ||||
|         console.log('error', error) | ||||
|         res.status(500).send({ message: 'An unexpected error occured while requesting movie credits' }) | ||||
|       } | ||||
|     }) | ||||
| } | ||||
|  | ||||
| module.exports = movieReleaseDatesController; | ||||
		Reference in New Issue
	
	Block a user