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 convertTmdbToShow = require('src/tmdb/convertTmdbToShow');
|
||||||
const convertTmdbToPerson = require('src/tmdb/convertTmdbToPerson');
|
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')
|
// const { tmdbInfo } = require('src/tmdb/types')
|
||||||
|
|
||||||
class TMDB {
|
class TMDB {
|
||||||
@@ -17,6 +17,7 @@ class TMDB {
|
|||||||
personSearch: 'ps',
|
personSearch: 'ps',
|
||||||
movieInfo: 'mi',
|
movieInfo: 'mi',
|
||||||
movieCredits: 'mc',
|
movieCredits: 'mc',
|
||||||
|
movieReleaseDates: 'mrd',
|
||||||
showInfo: 'si',
|
showInfo: 'si',
|
||||||
personInfo: 'pi',
|
personInfo: 'pi',
|
||||||
miscNowPlayingMovies: 'npm',
|
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) {
|
movieCredits(identifier) {
|
||||||
const query = { id: identifier }
|
const query = { id: identifier }
|
||||||
const cacheKey = `${this.cacheTags.movieCredits}:${identifier}`
|
const cacheKey = `${this.cacheTags.movieCredits}:${identifier}`
|
||||||
@@ -139,6 +159,17 @@ class TMDB {
|
|||||||
.then(credits => this.cache.set(cacheKey, credits, 86400))
|
.then(credits => this.cache.set(cacheKey, credits, 86400))
|
||||||
.then(credits => Credits.convertFromTmdbResponse(credits))
|
.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.
|
* Retrieve a specific show by id from TMDB.
|
||||||
|
|||||||
@@ -2,5 +2,6 @@ import Movie from './types/movie.js'
|
|||||||
import Show from './types/show.js'
|
import Show from './types/show.js'
|
||||||
import Person from './types/person.js'
|
import Person from './types/person.js'
|
||||||
import Credits from './types/credits.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/popular', listController.popularShows);
|
||||||
router.get('/v2/show/top_rated', listController.topRatedShows);
|
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/movie/:id', require('./controllers/info/movieInfo.js'));
|
||||||
router.get('/v2/show/:id', require('./controllers/info/showInfo.js'));
|
router.get('/v2/show/:id', require('./controllers/info/showInfo.js'));
|
||||||
router.get('/v2/person/:id', require('./controllers/info/personInfo.js'));
|
router.get('/v2/person/:id', require('./controllers/info/personInfo.js'));
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Plex
|
* 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