Finished movie credits and release dates
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, ReleaseDates} = 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 {
 | 
				
			||||||
@@ -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) {
 | 
					  movieCredits(identifier) {
 | 
				
			||||||
    const query = { id: identifier }
 | 
					    const query = { id: identifier }
 | 
				
			||||||
    const cacheKey = `${this.cacheTags.movieCredits}:${identifier}`
 | 
					    const cacheKey = `${this.cacheTags.movieCredits}:${identifier}`
 | 
				
			||||||
@@ -160,6 +165,11 @@ class TMDB {
 | 
				
			|||||||
      .then(credits => Credits.convertFromTmdbResponse(credits))
 | 
					      .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) {
 | 
					  movieReleaseDates(identifier) {
 | 
				
			||||||
    const query = { id: identifier }
 | 
					    const query = { id: identifier }
 | 
				
			||||||
    const cacheKey = `${this.cacheTags.movieReleaseDates}:${identifier}`
 | 
					    const cacheKey = `${this.cacheTags.movieReleaseDates}:${identifier}`
 | 
				
			||||||
@@ -167,7 +177,7 @@ class TMDB {
 | 
				
			|||||||
    return this.cache.get(cacheKey)
 | 
					    return this.cache.get(cacheKey)
 | 
				
			||||||
      .catch(() => this.tmdb('movieReleaseDates', query))
 | 
					      .catch(() => this.tmdb('movieReleaseDates', query))
 | 
				
			||||||
      .catch(tmdbError => this.tmdbRelaseDatesError(tmdbError))
 | 
					      .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))
 | 
					      .then(releaseDates => ReleaseDates.convertFromTmdbResponse(releaseDates))
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 
 | 
					 
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -4,4 +4,4 @@ import Person from './types/person.js'
 | 
				
			|||||||
import Credits from './types/credits.js'
 | 
					import Credits from './types/credits.js'
 | 
				
			||||||
import ReleaseDates from './types/releaseDates.js'
 | 
					import ReleaseDates from './types/releaseDates.js'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
module.exports = { Movie, Show, Person, ReleaseDates }
 | 
					module.exports = { Movie, Show, Person, Credits, ReleaseDates }
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -20,8 +20,8 @@ class Credits {
 | 
				
			|||||||
  createJsonResponse() {
 | 
					  createJsonResponse() {
 | 
				
			||||||
    return {
 | 
					    return {
 | 
				
			||||||
      id: this.id,
 | 
					      id: this.id,
 | 
				
			||||||
      cast: this.cast,
 | 
					      cast: this.cast.map(cast => cast.createJsonResponse()),
 | 
				
			||||||
      crew: this.crew
 | 
					      crew: this.crew.map(crew => crew.createJsonResponse())
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -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 {
 | 
					class ReleaseDate {
 | 
				
			||||||
  constructor(certification, language, releaseDate, type, note) {
 | 
					  constructor(certification, language, releaseDate, type, note) {
 | 
				
			||||||
    this.certification = certification;
 | 
					    this.certification = certification;
 | 
				
			||||||
@@ -23,39 +63,15 @@ class ReleaseDate {
 | 
				
			|||||||
      return null
 | 
					      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() {
 | 
					  createJsonResponse() {
 | 
				
			||||||
    return JSON.stringify({
 | 
					    return {
 | 
				
			||||||
      id: this.id,
 | 
					      certification: this.certification,
 | 
				
			||||||
      release_dates: this.releases
 | 
					      language: this.language,
 | 
				
			||||||
    })
 | 
					      releaseDate: this.releaseDate,
 | 
				
			||||||
 | 
					      type: this.type,
 | 
				
			||||||
 | 
					      note: this.note
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -17,6 +17,7 @@ const movieCreditsController = (req, res) => {
 | 
				
			|||||||
        res.status(error.status).send({ success: false, error: error.message })
 | 
					        res.status(error.status).send({ success: false, error: error.message })
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        // TODO log unhandled errors
 | 
					        // TODO log unhandled errors
 | 
				
			||||||
 | 
					        console.log('caugth credits controller error', error)
 | 
				
			||||||
        res.status(500).send({ message: 'An unexpected error occured while requesting movie credits' })
 | 
					        res.status(500).send({ message: 'An unexpected error occured while requesting movie credits' })
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -9,7 +9,7 @@ const movieReleaseDatesController = (req, res) => {
 | 
				
			|||||||
  const movieId = req.params.id;
 | 
					  const movieId = req.params.id;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  tmdb.movieReleaseDates(movieId)
 | 
					  tmdb.movieReleaseDates(movieId)
 | 
				
			||||||
    .then(releaseDates => res.send(releaseDates))
 | 
					    .then(releaseDates => res.send(releaseDates.createJsonResponse()))
 | 
				
			||||||
    .catch(error => {
 | 
					    .catch(error => {
 | 
				
			||||||
      const { status, message } = error;
 | 
					      const { status, message } = error;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@@ -17,7 +17,7 @@ const movieReleaseDatesController = (req, res) => {
 | 
				
			|||||||
        res.status(error.status).send({ success: false, error: error.message })
 | 
					        res.status(error.status).send({ success: false, error: error.message })
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        // TODO log unhandled errors : here our at tmdbReleaseError ?
 | 
					        // 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' })
 | 
					        res.status(500).send({ message: 'An unexpected error occured while requesting movie credits' })
 | 
				
			||||||
      }
 | 
					      }
 | 
				
			||||||
    })
 | 
					    })
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user