From ece7b6370b92d15e96c696da7bf8d85fe8bf1e07 Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 09:50:44 +0100 Subject: [PATCH 1/8] [add] getImage method --- src/__tests__/movieService/details.ts | 7 +++++++ src/services/movie.ts | 24 ++++++++++++++++++++---- src/types/generic.ts | 12 +++++++++++- src/types/movie.ts | 26 +++++++++++++++++++++++++- 4 files changed, 63 insertions(+), 6 deletions(-) diff --git a/src/__tests__/movieService/details.ts b/src/__tests__/movieService/details.ts index 3ae625f..8b6932a 100644 --- a/src/__tests__/movieService/details.ts +++ b/src/__tests__/movieService/details.ts @@ -96,3 +96,10 @@ test('get watch providers for movie', async () => { expect(clientRes).toStrictEqual(httpRes.data); }); + +test('get images', async () => { + const clientRes = await client.movies.getImages(299564); + const httpRes = await client.$http.get('/movie/299564/images'); + + expect(clientRes).toStrictEqual(httpRes.data); +}); diff --git a/src/services/movie.ts b/src/services/movie.ts index 313ab30..af8617e 100644 --- a/src/services/movie.ts +++ b/src/services/movie.ts @@ -20,6 +20,8 @@ import { PopularInput, TopRatedInput, UpcomingInput, + AppendToResponseMovie, + ImagesResult, } from '../types/movie'; class MovieService { @@ -53,10 +55,14 @@ class MovieService { }; } - // TODO: add append_to_response parameter - - async getMovie(id: number): Promise { - const { data } = await this.$http.get(`/movie/${id}`, { params: { ...this.$http.defaults.params, language: this.language } }); + async getMovie(id: number, appendToResponse ?: AppendToResponseMovie[]): Promise { + const { data } = await this.$http.get(`/movie/${id}`, { + params: { + ...this.$http.defaults.params, + language: this.language, + append_to_response: appendToResponse?.join(','), + }, + }); return Movie.fromJson(data); } @@ -165,6 +171,16 @@ class MovieService { } // TODO Images Go Here + async getImages(movieId: number, includeImageLanguage ?: Language[]): Promise { + const { data } = await this.$http.get(`/movie/${movieId}/images`, { + params: { + ...this.$http.defaults.params, + language: this.language, + include_image_language: includeImageLanguage?.join(','), + }, + }); + return data as ImagesResult; + } async getKeyword(movieId: number): Promise { const { data } = await this.$http.get(`/movie/${movieId}/keywords`); diff --git a/src/types/generic.ts b/src/types/generic.ts index c52fa10..d10f0ae 100644 --- a/src/types/generic.ts +++ b/src/types/generic.ts @@ -286,7 +286,17 @@ interface GenericListResult { results: T[] } +interface Image { + aspect_ration: number; + file_path: string; + height: number; + iso_639_1: Language | null; + vote_average: number; + vote_count: number; + width: number +} + export { TrendingTimeSpan, Language, KeywordResult, List, Country, Response, - GenericListResult, + GenericListResult, Image, }; diff --git a/src/types/movie.ts b/src/types/movie.ts index fc2eb23..0d1cab7 100644 --- a/src/types/movie.ts +++ b/src/types/movie.ts @@ -1,9 +1,26 @@ import Movie from '../models/movie/Movie'; import Video from '../models/Video'; -import { Country, Language, List } from './generic'; +import { + Country, Image, Language, List, +} from './generic'; type MovieStatus = 'Rumored' | 'Planned' | 'In Production' | 'Post Production' | 'Released' | 'Canceled' | 'Unknown'; +type AppendToResponseMovie = 'account_states' +| 'alternative_titles' +| 'changes' +| 'credits' +| 'external_ids' +| 'images' +| 'keywords' +| 'lists' +| 'recommendations' +| 'release_dates' +| 'reviews' +| 'similar' +| 'translations' +| 'videos' + interface SearchMovieInput { query: string; page?: number; @@ -416,10 +433,17 @@ interface UpcomingInput { region?: Country; } +interface ImagesResult { + id: number; + backdrops: Image[], + posters: Image[] +} + export { MovieStatus, SearchMovieInput, NowPlayingMovieResult, AlternativeTitlesResult, AlternativeTitlesInput, ChangesInput, ChangesResult, ExternalIdsResult, ListResult, MoviePageInput, ReleaseDateResults, TranslationResults, VideoResults, WatchProvidersResult, PopularInput, TopRatedInput, UpcomingInput, + AppendToResponseMovie, ImagesResult, }; From fa503d3fe563025a9c58d00bdb7b68c907b539a6 Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 09:51:15 +0100 Subject: [PATCH 2/8] [add] append_to_response for movie --- package.json | 2 +- src/models/movie/Movie.ts | 5 +++-- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/package.json b/package.json index a743f86..df3a599 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@matfire/the_movie_wrapper", - "version": "0.2.0", + "version": "0.2.1", "description": "", "scripts": { "build": "npx tsc -p tsconfig.build.json", diff --git a/src/models/movie/Movie.ts b/src/models/movie/Movie.ts index 7849c01..6f8fb9a 100644 --- a/src/models/movie/Movie.ts +++ b/src/models/movie/Movie.ts @@ -3,7 +3,7 @@ import { MovieStatus } from '../../types/movie'; import Genre from '../Genre'; interface IMovieBasicData { - id: string; + id: number; poster_path: string; title: string; original_title: string @@ -31,7 +31,7 @@ interface IMovieExtraData { } class Movie implements IMovieBasicData, IMovieExtraData { - id: string; + id: number; poster_path: string; @@ -107,6 +107,7 @@ class Movie implements IMovieBasicData, IMovieExtraData { this.vote_count = data.vote_count; } + // TODO handle append_to_response data static fromJson(data: any): Movie { const initialData: IMovieBasicData = { ...data }; From 132e915d66fe471e38796c73990e471294c605bf Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 10:04:40 +0100 Subject: [PATCH 3/8] [add] getReviews --- src/__tests__/movieService/details.ts | 7 +++++++ src/services/movie.ts | 12 ++++++++++-- src/types/generic.ts | 9 ++++++++- src/types/movie.ts | 19 +++++++++++++++++-- 4 files changed, 42 insertions(+), 5 deletions(-) diff --git a/src/__tests__/movieService/details.ts b/src/__tests__/movieService/details.ts index 8b6932a..82b81b2 100644 --- a/src/__tests__/movieService/details.ts +++ b/src/__tests__/movieService/details.ts @@ -103,3 +103,10 @@ test('get images', async () => { expect(clientRes).toStrictEqual(httpRes.data); }); + +test('get reviews', async () => { + const clientRes = await client.movies.getReviews({ movieId: 299564 }); + const httpRes = await client.$http.get('/movie/299564/reviews'); + + expect(clientRes).toStrictEqual(httpRes.data); +}); diff --git a/src/services/movie.ts b/src/services/movie.ts index af8617e..4e46f8b 100644 --- a/src/services/movie.ts +++ b/src/services/movie.ts @@ -22,6 +22,7 @@ import { UpcomingInput, AppendToResponseMovie, ImagesResult, + MovieReviewResult, } from '../types/movie'; class MovieService { @@ -170,7 +171,6 @@ class MovieService { return data as ExternalIdsResult; } - // TODO Images Go Here async getImages(movieId: number, includeImageLanguage ?: Language[]): Promise { const { data } = await this.$http.get(`/movie/${movieId}/images`, { params: { @@ -207,7 +207,15 @@ class MovieService { return data as ReleaseDateResults; } - // TODO Reviews Go Here + async getReviews(reviewsData: MoviePageInput): Promise { + const { data } = await this.$http.get(`/movie/${reviewsData.movieId}/reviews`, { + params: { + ...this.$http.defaults.params, + page: reviewsData.page, + }, + }); + return data as MovieReviewResult; + } async getSimilar(similarData: MoviePageInput): Promise> { const { data } = await this.$http.get(`/movie/${similarData.movieId}/similar`, { params: { ...this.$http.defaults.params, language: this.language, page: similarData.page } }); diff --git a/src/types/generic.ts b/src/types/generic.ts index d10f0ae..c23c76b 100644 --- a/src/types/generic.ts +++ b/src/types/generic.ts @@ -296,7 +296,14 @@ interface Image { width: number } +interface Author { + name: string; + username: string; + avatar_path : string | null; + rating: number | null; +} + export { TrendingTimeSpan, Language, KeywordResult, List, Country, Response, - GenericListResult, Image, + GenericListResult, Image, Author, }; diff --git a/src/types/movie.ts b/src/types/movie.ts index 0d1cab7..53bf4bb 100644 --- a/src/types/movie.ts +++ b/src/types/movie.ts @@ -1,7 +1,8 @@ import Movie from '../models/movie/Movie'; import Video from '../models/Video'; import { - Country, Image, Language, List, + Author, + Country, GenericListResult, GenericListResult, Image, Language, List, } from './generic'; type MovieStatus = 'Rumored' | 'Planned' | 'In Production' | 'Post Production' | 'Released' | 'Canceled' | 'Unknown'; @@ -439,11 +440,25 @@ interface ImagesResult { posters: Image[] } +interface MovieReview { + author: string; + author_details: Author; + content: string; + created_at: Date; + id: string; + updated_at: Date; + url: string; +} + +interface MovieReviewResult extends GenericListResult { + id: string; +}; + export { MovieStatus, SearchMovieInput, NowPlayingMovieResult, AlternativeTitlesResult, AlternativeTitlesInput, ChangesInput, ChangesResult, ExternalIdsResult, ListResult, MoviePageInput, ReleaseDateResults, TranslationResults, VideoResults, WatchProvidersResult, PopularInput, TopRatedInput, UpcomingInput, - AppendToResponseMovie, ImagesResult, + AppendToResponseMovie, ImagesResult, MovieReviewResult, }; From 770441f5c74cd2740a1e049fae0b01ce45483349 Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 10:04:54 +0100 Subject: [PATCH 4/8] [fix] lint --- src/types/movie.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/types/movie.ts b/src/types/movie.ts index 53bf4bb..a9550c7 100644 --- a/src/types/movie.ts +++ b/src/types/movie.ts @@ -2,7 +2,7 @@ import Movie from '../models/movie/Movie'; import Video from '../models/Video'; import { Author, - Country, GenericListResult, GenericListResult, Image, Language, List, + Country, GenericListResult, Image, Language, List, } from './generic'; type MovieStatus = 'Rumored' | 'Planned' | 'In Production' | 'Post Production' | 'Released' | 'Canceled' | 'Unknown'; @@ -452,7 +452,7 @@ interface MovieReview { interface MovieReviewResult extends GenericListResult { id: string; -}; +} export { MovieStatus, SearchMovieInput, NowPlayingMovieResult, From 08cf2a3e36453a354d153560250b0df19566584e Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 12:10:58 +0100 Subject: [PATCH 5/8] [add] getCredits --- src/__tests__/movieService/details.ts | 7 +++ src/models/Cast.ts | 63 --------------------------- src/models/Crew.ts | 59 ------------------------- src/services/movie.ts | 11 ++++- src/types/generic.ts | 25 ++++++++++- src/types/movie.ts | 10 ++++- 6 files changed, 50 insertions(+), 125 deletions(-) delete mode 100644 src/models/Cast.ts delete mode 100644 src/models/Crew.ts diff --git a/src/__tests__/movieService/details.ts b/src/__tests__/movieService/details.ts index 82b81b2..f6a3cf0 100644 --- a/src/__tests__/movieService/details.ts +++ b/src/__tests__/movieService/details.ts @@ -110,3 +110,10 @@ test('get reviews', async () => { expect(clientRes).toStrictEqual(httpRes.data); }); + +test('get credits', async () => { + const clientRes = await client.movies.getCredits(299564); + const httpRes = await client.$http.get('/movie/299564/credits'); + + expect(clientRes).toStrictEqual(httpRes.data); +}); diff --git a/src/models/Cast.ts b/src/models/Cast.ts deleted file mode 100644 index ed72ff1..0000000 --- a/src/models/Cast.ts +++ /dev/null @@ -1,63 +0,0 @@ -interface ICastData { - adult: boolean; - gender ?: number; - id: number; - known_for_department : string; - name: string; - original_name: string; - popularity: number; - profile_path ?: string; - cast_id: number; - character: string; - credit_id: string; - order: number; -} - -class Cast implements ICastData { - gender?: number | undefined; - - id: number; - - known_for_department: string; - - name: string; - - original_name: string; - - popularity: number; - - profile_path?: string | undefined; - - cast_id: number; - - character: string; - - credit_id: string; - - order: number; - - adult: boolean; - - constructor(data: ICastData) { - this.gender = data.gender; - this.id = data.id; - this.known_for_department = data.known_for_department; - this.name = data.name; - this.original_name = data.original_name; - this.popularity = data.popularity; - this.profile_path = data.profile_path; - this.cast_id = data.cast_id; - this.character = data.character; - this.credit_id = data.credit_id; - this.order = data.order; - this.adult = data.adult; - } - - static fromJson(data:any): Cast { - const converted: ICastData = data as ICastData; - - return new Cast(converted); - } -} - -export default Cast; diff --git a/src/models/Crew.ts b/src/models/Crew.ts deleted file mode 100644 index 2cd158b..0000000 --- a/src/models/Crew.ts +++ /dev/null @@ -1,59 +0,0 @@ -interface ICrewData { - adult: boolean; - gender: number; - id: number; - known_for_department: string; - name: string; - original_name: string; - popularity: number; - profile_path ?: string; - credit_id: number; - department: string; - job: string; -} - -class Crew implements ICrewData { - adult: boolean; - - gender: number; - - id: number; - - known_for_department: string; - - name: string; - - original_name: string; - - popularity: number; - - profile_path?: string | undefined; - - credit_id: number; - - department: string; - - job: string; - - constructor(data: ICrewData) { - this.adult = data.adult; - this.gender = data.gender; - this.id = data.id; - this.known_for_department = data.known_for_department; - this.name = data.name; - this.original_name = data.original_name; - this.popularity = data.popularity; - this.profile_path = data.profile_path; - this.credit_id = data.credit_id; - this.department = data.department; - this.job = data.job; - } - - static fromJson(data: any): Crew { - const converted: ICrewData = data as ICrewData; - - return new Crew(converted); - } -} - -export default Crew; diff --git a/src/services/movie.ts b/src/services/movie.ts index 4e46f8b..26979d8 100644 --- a/src/services/movie.ts +++ b/src/services/movie.ts @@ -23,6 +23,7 @@ import { AppendToResponseMovie, ImagesResult, MovieReviewResult, + CreditsResult, } from '../types/movie'; class MovieService { @@ -164,7 +165,15 @@ class MovieService { }; } - // TODO Credits Go Here + async getCredits(movieId: number): Promise { + const { data } = await this.$http.get(`/movie/${movieId}/credits`, { + params: { + ...this.$http.defaults.params, + language: this.language, + }, + }); + return data as CreditsResult; + } async getExternalIds(movieId: number): Promise { const { data } = await this.$http.get(`/movie/${movieId}/external_ids`); diff --git a/src/types/generic.ts b/src/types/generic.ts index c23c76b..61d3735 100644 --- a/src/types/generic.ts +++ b/src/types/generic.ts @@ -303,7 +303,30 @@ interface Author { rating: number | null; } +interface Person { + adult: boolean; + gender: number | null; + id: number; + known_for_department: string; + name: string; + original_name: string; + popularity: number; + profile_path: string | null; + credit_id: number; +} + +interface Cast extends Person { + cast_id: number; + character: string; + order: number; +} + +interface Crew extends Person { + department: string; + job: string; +} + export { TrendingTimeSpan, Language, KeywordResult, List, Country, Response, - GenericListResult, Image, Author, + GenericListResult, Image, Author, Cast, Crew, }; diff --git a/src/types/movie.ts b/src/types/movie.ts index a9550c7..d041473 100644 --- a/src/types/movie.ts +++ b/src/types/movie.ts @@ -2,7 +2,8 @@ import Movie from '../models/movie/Movie'; import Video from '../models/Video'; import { Author, - Country, GenericListResult, Image, Language, List, + Cast, + Country, Crew, GenericListResult, Image, Language, List, } from './generic'; type MovieStatus = 'Rumored' | 'Planned' | 'In Production' | 'Post Production' | 'Released' | 'Canceled' | 'Unknown'; @@ -454,6 +455,12 @@ interface MovieReviewResult extends GenericListResult { id: string; } +interface CreditsResult { + id: number; + cast: Cast[]; + crew: Crew[] +} + export { MovieStatus, SearchMovieInput, NowPlayingMovieResult, AlternativeTitlesResult, AlternativeTitlesInput, ChangesInput, ChangesResult, @@ -461,4 +468,5 @@ export { TranslationResults, VideoResults, WatchProvidersResult, PopularInput, TopRatedInput, UpcomingInput, AppendToResponseMovie, ImagesResult, MovieReviewResult, + CreditsResult, }; From 3a159cddfd8934eecfbc560d914c0f0f807a23aa Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 13:06:37 +0100 Subject: [PATCH 6/8] [add] append_to_response --- src/__tests__/movieService/details.ts | 20 +++- src/models/Video.ts | 55 ---------- src/models/movie/Movie.ts | 150 +++++++++++++++++++++++++- src/services/movie.ts | 6 +- src/types/generic.ts | 15 ++- src/types/movie.ts | 15 +-- 6 files changed, 186 insertions(+), 75 deletions(-) delete mode 100644 src/models/Video.ts diff --git a/src/__tests__/movieService/details.ts b/src/__tests__/movieService/details.ts index f6a3cf0..f1982dc 100644 --- a/src/__tests__/movieService/details.ts +++ b/src/__tests__/movieService/details.ts @@ -1,7 +1,6 @@ /* eslint-disable no-undef */ import API from '../../index'; -import Video from '../../models/Video'; -import { Country } from '../../types/generic'; +import { Country, Video } from '../../types/generic'; let client: API; @@ -86,8 +85,9 @@ test('get translations for movie', async () => { }); test('get videos for movie', async () => { - const res = await client.movies.getVideos(299534); - expect(res.results.pop()).toBeInstanceOf(Video); + const clientRes = await client.movies.getVideos(299534); + const httpRes = await client.$http.get('/movie/299534/videos'); + expect(clientRes).toStrictEqual(httpRes.data); }); test('get watch providers for movie', async () => { @@ -117,3 +117,15 @@ test('get credits', async () => { expect(clientRes).toStrictEqual(httpRes.data); }); + +test('append to response', async () => { + const clientRes = await client.movies.getMovie(299564, ['images', 'keywords']); + const httpRes = await client.$http.get('/movie/299564', { + params: { + ...client.$http.defaults.params, + append_to_response: 'images,keywords', + }, + }); + expect(clientRes.images).toStrictEqual(httpRes.data.images); + expect(clientRes.keywords).toStrictEqual(httpRes.data.keywords.keywords); +}); diff --git a/src/models/Video.ts b/src/models/Video.ts deleted file mode 100644 index 11819d4..0000000 --- a/src/models/Video.ts +++ /dev/null @@ -1,55 +0,0 @@ -import { Country, Language } from '../types/generic'; - -interface VideoInput { - iso_639_1: Language; -iso_3166_1: Country; -name: string -key: string -site: string -size: number -type: string -official: boolean -published_at: Date -id : string -} - -class Video implements VideoInput { - iso_639_1: Language; - - iso_3166_1: Country; - - name: string; - - key: string; - - site: string; - - size: number; - - type: string; - - official: boolean; - - published_at: Date; - - id: string; - - constructor(data: VideoInput) { - this.iso_639_1 = data.iso_639_1; - this.iso_3166_1 = data.iso_3166_1; - this.name = data.name; - this.key = data.key; - this.site = data.site; - this.size = data.size; - this.type = data.type; - this.official = data.official; - this.published_at = data.published_at; - this.id = data.id; - } - - static fromJson(data:any): Video { - return new Video(data as VideoInput); - } -} - -export default Video; diff --git a/src/models/movie/Movie.ts b/src/models/movie/Movie.ts index 6f8fb9a..14f6b17 100644 --- a/src/models/movie/Movie.ts +++ b/src/models/movie/Movie.ts @@ -1,7 +1,46 @@ -import { Language } from '../../types/generic'; -import { MovieStatus } from '../../types/movie'; +import { + Cast, Country, Crew, GenericListResult, Image, Language, List, Video, +} from '../../types/generic'; +import { MovieReview, MovieStatus, Translation } from '../../types/movie'; import Genre from '../Genre'; +interface Credits { + cast: Cast[], + crew: Crew[] +} + +interface Images { + backdrops: Image[], + posters: Image[], + logos: Image[] +} + +interface AccountStates { + favorite: boolean, + rated: { + value: number + } | boolean, + watchlist: boolean, +} + +interface Title { + iso_3166_1: Country, + title: string, + type: string +} + +interface ExternalIds { + imdb_id?: string, + facebook_id?: string, + instagram_id?: string, + twitter_id?: string +} + +interface Keyword { + id: number; + name: string; +} + interface IMovieBasicData { id: number; poster_path: string; @@ -30,6 +69,29 @@ interface IMovieExtraData { vote_count?: number; } +interface Change { + key: string; + items: { + id: string; + action: string; + time: Date; + iso_639_1: Language; + value: string; + original_value: string; + }[] +} + +interface ReleaseDate { + iso_3166_1: Country, + release_dates: { + certification: string; + iso_639_1: Language; + note: string; + release_date: Date; + type: number; + }[] +} + class Movie implements IMovieBasicData, IMovieExtraData { id: number; @@ -77,6 +139,36 @@ class Movie implements IMovieBasicData, IMovieExtraData { rating?: number; + credits: Credits | undefined; + + images: Images | undefined; + + videos: Video[] | undefined; + + account_states: AccountStates | undefined; + + alternative_titles: Title[] | undefined; + + external_ids: ExternalIds | undefined; + + changes: Change[] | undefined; + + keywords: Keyword[] | undefined; + + lists: GenericListResult | undefined; + + // eslint-disable-next-line no-use-before-define + recommendations: GenericListResult | undefined; + + release_dates: ReleaseDate[] | undefined; + + reviews: GenericListResult | undefined; + + // eslint-disable-next-line no-use-before-define + similar: GenericListResult | undefined; + + translations: Translation[] | undefined; + constructor(initialData: IMovieBasicData, extraData ?: IMovieExtraData) { this.id = initialData.id; this.poster_path = initialData.poster_path; @@ -107,12 +199,64 @@ class Movie implements IMovieBasicData, IMovieExtraData { this.vote_count = data.vote_count; } + private appendToResponse(data: any) { + if (data.external_ids) { + this.external_ids = data.external_ids; + } + if (data.account_states) { + this.account_states = data.account_states; + } + if (data.alternative_titles) { + this.alternative_titles = data.alternative_titles?.titles; + } + if (data.credits) { + this.credits = data.credits; + } + if (data.images) { + this.images = data.images; + } + if (data.videos) { + this.videos = data?.videos?.results; + } + if (data.changes) { + this.changes = data?.changes?.changes; + } + if (data.keywords) { + this.keywords = data.keywords?.keywords; + } + if (data.lists) { + this.lists = data.lists; + } + if (data.recommendations) { + this.recommendations = { + ...data.recommendations, + results: data.recommendations.results.map((e:any) => Movie.fromJson(e)), + }; + } + if (data.release_dates) { + this.release_dates = data.release_dates; + } + if (data.reviews) { + this.reviews = data.reviews; + } + if (data.similar) { + this.similar = { + ...data.similar, + results: data.similar.results.map((e:any) => Movie.fromJson(e)), + }; + } + if (data.translations) { + this.translations = data.translations?.translations; + } + return this; + } + // TODO handle append_to_response data static fromJson(data: any): Movie { const initialData: IMovieBasicData = { ...data }; const extraData: IMovieExtraData = { ...data }; - return new Movie(initialData, extraData); + return new Movie(initialData, extraData).appendToResponse(data); } addRating(r: number): Movie { diff --git a/src/services/movie.ts b/src/services/movie.ts index 26979d8..7768d66 100644 --- a/src/services/movie.ts +++ b/src/services/movie.ts @@ -1,6 +1,5 @@ import { AxiosInstance } from 'axios'; import Movie from '../models/movie/Movie'; -import Video from '../models/Video'; import { GenericListResult, KeywordResult, Language, Response, TrendingTimeSpan, @@ -243,10 +242,7 @@ class MovieService { async getVideos(movieId: number): Promise { const { data } = await this.$http.get(`/movie/${movieId}/videos`, { params: { ...this.$http.defaults.params, language: this.language } }); - return { - id: data.id, - results: data.results.map((e:any) => Video.fromJson(e)), - }; + return data as VideoResults; } async getWatchProviders(movieId: number): Promise { diff --git a/src/types/generic.ts b/src/types/generic.ts index 61d3735..91717ef 100644 --- a/src/types/generic.ts +++ b/src/types/generic.ts @@ -326,7 +326,20 @@ interface Crew extends Person { job: string; } +interface Video { + iso_639_1: Language; +iso_3166_1: Country; +name: string +key: string +site: string +size: number +type: string +official: boolean +published_at: Date +id : string +} + export { TrendingTimeSpan, Language, KeywordResult, List, Country, Response, - GenericListResult, Image, Author, Cast, Crew, + GenericListResult, Image, Author, Cast, Crew, Video, }; diff --git a/src/types/movie.ts b/src/types/movie.ts index d041473..a0e03a1 100644 --- a/src/types/movie.ts +++ b/src/types/movie.ts @@ -1,9 +1,8 @@ import Movie from '../models/movie/Movie'; -import Video from '../models/Video'; import { Author, Cast, - Country, Crew, GenericListResult, Image, Language, List, + Country, Crew, GenericListResult, Image, Language, List, Video, } from './generic'; type MovieStatus = 'Rumored' | 'Planned' | 'In Production' | 'Post Production' | 'Released' | 'Canceled' | 'Unknown'; @@ -111,9 +110,7 @@ interface ReleaseDateResults { }[] } -interface TranslationResults { - id: number; - translations: { +interface Translation { iso_3166_1: Country; iso_639_1: Language; name: string; @@ -123,7 +120,11 @@ interface TranslationResults { overview: string; homepage: string; } - }[] + } + +interface TranslationResults { + id: number; + translations: Translation[] } interface VideoResults { @@ -468,5 +469,5 @@ export { TranslationResults, VideoResults, WatchProvidersResult, PopularInput, TopRatedInput, UpcomingInput, AppendToResponseMovie, ImagesResult, MovieReviewResult, - CreditsResult, + CreditsResult, MovieReview, Translation, }; From ecd25010029152b7a1f3ca4882a802d707eea61b Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 13:07:08 +0100 Subject: [PATCH 7/8] [fix] lint --- src/__tests__/movieService/details.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/__tests__/movieService/details.ts b/src/__tests__/movieService/details.ts index f1982dc..718c34b 100644 --- a/src/__tests__/movieService/details.ts +++ b/src/__tests__/movieService/details.ts @@ -1,6 +1,6 @@ /* eslint-disable no-undef */ import API from '../../index'; -import { Country, Video } from '../../types/generic'; +import { Country } from '../../types/generic'; let client: API; From 9342f25e30d47c83012971fa3903f8b8b67ea378 Mon Sep 17 00:00:00 2001 From: Matteo Gassend Date: Thu, 17 Mar 2022 13:08:58 +0100 Subject: [PATCH 8/8] [add] version bump for release --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index df3a599..d5e38d3 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "@matfire/the_movie_wrapper", - "version": "0.2.1", + "version": "0.3.0", "description": "", "scripts": { "build": "npx tsc -p tsconfig.build.json",