From 879a02b38809b406ea78b1f0e3e3e20503cff61b Mon Sep 17 00:00:00 2001 From: KevinMidboe Date: Sun, 3 Nov 2019 16:01:19 +0100 Subject: [PATCH] Finished movie credits and release dates --- seasoned_api/src/tmdb/tmdb.js | 14 +++- seasoned_api/src/tmdb/types.js | 2 +- seasoned_api/src/tmdb/types/credits.js | 4 +- seasoned_api/src/tmdb/types/releaseDates.js | 78 +++++++++++-------- .../webserver/controllers/movie/credits.js | 1 + .../controllers/movie/releaseDates.js | 4 +- 6 files changed, 65 insertions(+), 38 deletions(-) diff --git a/seasoned_api/src/tmdb/tmdb.js b/seasoned_api/src/tmdb/tmdb.js index 80ea986..a6eb35d 100644 --- a/seasoned_api/src/tmdb/tmdb.js +++ b/seasoned_api/src/tmdb/tmdb.js @@ -3,7 +3,7 @@ const convertTmdbToMovie = require('src/tmdb/convertTmdbToMovie'); const convertTmdbToShow = require('src/tmdb/convertTmdbToShow'); const convertTmdbToPerson = require('src/tmdb/convertTmdbToPerson'); -const { Credits, ReleaseDates} = require('src/tmdb/types'); +const { Credits, ReleaseDates } = require('src/tmdb/types'); // const { tmdbInfo } = require('src/tmdb/types') class TMDB { @@ -149,6 +149,11 @@ class TMDB { } } + /** + * Retrieve credits for a movie + * @param {Number} identifier of the movie to get credits for + * @returns {Promise} movie cast object + */ movieCredits(identifier) { const query = { id: identifier } const cacheKey = `${this.cacheTags.movieCredits}:${identifier}` @@ -160,6 +165,11 @@ class TMDB { .then(credits => Credits.convertFromTmdbResponse(credits)) } + /** + * Retrieve release dates for a movie + * @param {Number} identifier of the movie to get release dates for + * @returns {Promise} movie release dates object + */ movieReleaseDates(identifier) { const query = { id: identifier } const cacheKey = `${this.cacheTags.movieReleaseDates}:${identifier}` @@ -167,7 +177,7 @@ class TMDB { 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 => this.cache.set(cacheKey, releaseDates, 86400)) .then(releaseDates => ReleaseDates.convertFromTmdbResponse(releaseDates)) } diff --git a/seasoned_api/src/tmdb/types.js b/seasoned_api/src/tmdb/types.js index 9b096c4..7bbd2b0 100644 --- a/seasoned_api/src/tmdb/types.js +++ b/seasoned_api/src/tmdb/types.js @@ -4,4 +4,4 @@ import Person from './types/person.js' import Credits from './types/credits.js' import ReleaseDates from './types/releaseDates.js' -module.exports = { Movie, Show, Person, ReleaseDates } +module.exports = { Movie, Show, Person, Credits, ReleaseDates } diff --git a/seasoned_api/src/tmdb/types/credits.js b/seasoned_api/src/tmdb/types/credits.js index 262093b..9762799 100644 --- a/seasoned_api/src/tmdb/types/credits.js +++ b/seasoned_api/src/tmdb/types/credits.js @@ -20,8 +20,8 @@ class Credits { createJsonResponse() { return { id: this.id, - cast: this.cast, - crew: this.crew + cast: this.cast.map(cast => cast.createJsonResponse()), + crew: this.crew.map(crew => crew.createJsonResponse()) } } } diff --git a/seasoned_api/src/tmdb/types/releaseDates.js b/seasoned_api/src/tmdb/types/releaseDates.js index 3959922..8ce749a 100644 --- a/seasoned_api/src/tmdb/types/releaseDates.js +++ b/seasoned_api/src/tmdb/types/releaseDates.js @@ -1,3 +1,43 @@ +class ReleaseDates { + constructor(id, releases) { + this.id = id; + this.releases = releases; + } + + static convertFromTmdbResponse(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 { + id: this.id, + results: this.releases.map(release => release.createJsonResponse()) + } + } +} + +class Release { + constructor(country, releaseDates) { + this.country = country; + this.releaseDates = releaseDates; + } + + createJsonResponse() { + return { + country: this.country, + release_dates: this.releaseDates.map(releaseDate => releaseDate.createJsonResponse()) + } + } +} + class ReleaseDate { constructor(certification, language, releaseDate, type, note) { this.certification = certification; @@ -23,39 +63,15 @@ class ReleaseDate { 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 - }) + return { + certification: this.certification, + language: this.language, + releaseDate: this.releaseDate, + type: this.type, + note: this.note + } } } diff --git a/seasoned_api/src/webserver/controllers/movie/credits.js b/seasoned_api/src/webserver/controllers/movie/credits.js index cd31924..5ca5b58 100644 --- a/seasoned_api/src/webserver/controllers/movie/credits.js +++ b/seasoned_api/src/webserver/controllers/movie/credits.js @@ -17,6 +17,7 @@ const movieCreditsController = (req, res) => { res.status(error.status).send({ success: false, error: error.message }) } else { // TODO log unhandled errors + console.log('caugth credits controller error', error) res.status(500).send({ message: 'An unexpected error occured while requesting movie credits' }) } }) diff --git a/seasoned_api/src/webserver/controllers/movie/releaseDates.js b/seasoned_api/src/webserver/controllers/movie/releaseDates.js index 7234888..01cd48e 100644 --- a/seasoned_api/src/webserver/controllers/movie/releaseDates.js +++ b/seasoned_api/src/webserver/controllers/movie/releaseDates.js @@ -9,7 +9,7 @@ const movieReleaseDatesController = (req, res) => { const movieId = req.params.id; tmdb.movieReleaseDates(movieId) - .then(releaseDates => res.send(releaseDates)) + .then(releaseDates => res.send(releaseDates.createJsonResponse())) .catch(error => { const { status, message } = error; @@ -17,7 +17,7 @@ const movieReleaseDatesController = (req, res) => { res.status(error.status).send({ success: false, error: error.message }) } else { // TODO log unhandled errors : here our at tmdbReleaseError ? - console.log('error', error) + console.log('caugth release dates controller error', error) res.status(500).send({ message: 'An unexpected error occured while requesting movie credits' }) } })