diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index 92fcdd6..d5e4f68 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -1,10 +1,10 @@ -import { PersonDetail, PersonMovieCredit, PersonTvShowCredit } from '../types'; +import { ChangeOptions, ExternalIds, Image, PeopleTranslations, PersonChanges, PersonCombinedCredits, PersonDetail, PersonMovieCredit, PersonTvShowCredit, PopularPersons, TaggedImages } from '../types'; import { BaseEndpoint } from './base'; +import querystring from 'querystring'; const BASE_PERSON = '/person'; - export class PeopleEndpoint extends BaseEndpoint { constructor(accessToken: string) { super(accessToken); @@ -14,19 +14,46 @@ export class PeopleEndpoint extends BaseEndpoint { return await this.api.get(`${BASE_PERSON}/${id}`); } - async movieCredits( - id: number - ): Promise { - return await this.api.get( - `${BASE_PERSON}/${id}/movie_credits` - ); + async changes(id: number, options? : ChangeOptions): Promise { + const params = querystring.encode(options); + return await this.api.get(`${BASE_PERSON}/${id}/changes?${params}`); } - async tvShowCredits( - id: number - ): Promise { - return await this.api.get( - `${BASE_PERSON}/${id}/tv_credits` - ); + async movieCredits(id: number): Promise { + return await this.api.get(`${BASE_PERSON}/${id}/movie_credits`); + } + + async tvShowCredits(id: number): Promise { + return await this.api.get(`${BASE_PERSON}/${id}/tv_credits`); + } + + async combinedCredits(id: number) : Promise { + return await this.api.get(`${BASE_PERSON}/${id}/combined_credits`) + } + + async externalId(id: number): Promise{ + return await this.api.get(`${BASE_PERSON}/${id}/external_ids`) + } + + async images(id: number): Promise<{id: number, profiles: Image[]}>{ + return await this.api.get<{id: number, profiles: Image[]}>(`${BASE_PERSON}/${id}/images`) + } + + async taggedImages(id: number, options?: {page?: number}): Promise{ + const params = querystring.encode(options); + return await this.api.get(`${BASE_PERSON}/${id}/tagged_images?${params}`); + } + + async translation(id: number) : Promise{ + return await this.api.get(`${BASE_PERSON}/${id}/translations`) + } + + async latest(): Promise{ + return await this.api.get(`${BASE_PERSON}/latest`); + } + + async popular(options?: {page?: number}): Promise{ + const params = querystring.encode(options); + return await this.api.get(`${BASE_PERSON}/popular?${params}`); } } diff --git a/src/types/index.ts b/src/types/index.ts index f3fb230..7b3e0c4 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -197,3 +197,13 @@ export interface Translations { id: number; translations: Translation[]; } + +export interface Image{ + aspect_ratio: number; + file_path: string; + height: number; + iso_639_1: string; + vote_average: number; + vote_count: number; + width: number; +} \ No newline at end of file diff --git a/src/types/people.ts b/src/types/people.ts index a19c509..6e9ebc0 100644 --- a/src/types/people.ts +++ b/src/types/people.ts @@ -1,3 +1,5 @@ +import { Movie, Person, TV, TvShowItem } from "."; + interface Cast { character: string; credit_id: string; @@ -71,6 +73,12 @@ export interface PersonTvShowCredit { id: number; } +export interface PersonCombinedCredits { + cast: (PersonMovieCast & PersonTvShowCast)[]; + crew: (PersonMovieCrew & PersonTvShowCrew)[]; + id: number; +} + export interface PersonDetail { birthday: string, known_for_department: string, @@ -86,4 +94,62 @@ export interface PersonDetail { adult: boolean, imdb_id: string, homepage: string - } \ No newline at end of file +} + +export interface PersonChange{ + id: string; + action: string; + time: string; + iso_639_1: string; + iso_3166_1: string; + value: string | { profile: { file_path: string;} }; + original_value: string | { profile: { file_path: string; } }; +} + +export interface PersonChanges { + changes: { + key: string; + items: PersonChange[]; + }[]; +} + +export interface PopularPersons{ + page: number; + results: Person[]; + total_results: number; + total_pages: number; +} + +export interface TaggedImage{ + aspect_ratio: number; + file_path: string; + height: number; + id: string; + iso_639_1: string; + vote_average: number; + vote_count: number; + width: number; + image_type: string; + media_type: string; + media: Movie | TV +} + +export interface TaggedImages{ + page: number; + results: TaggedImage[]; + total_results: number; + total_pages: number; +} + +export interface PeopleTranslations{ + id: number; + translations: { + iso_3166_1: string; + iso_639_1: string; + name: string; + english_name: string; + data: { + biography: string + }; + } +} \ No newline at end of file