From 33830afe92896ad7f7568dd663f085b9d71a5c25 Mon Sep 17 00:00:00 2001 From: DerPenz Date: Sat, 6 May 2023 19:22:40 +0200 Subject: [PATCH] refactored change type --- src/endpoints/changes.ts | 8 +- src/endpoints/movies.ts | 7 +- src/endpoints/people.ts | 12 ++- src/endpoints/tv-episode.ts | 161 ++++++++++++++++++------------------ src/endpoints/tv-shows.ts | 7 +- src/types/changes.ts | 20 ++--- src/types/movies.ts | 11 +++ src/types/options.ts | 23 ++++-- src/types/people.ts | 23 ++---- src/types/tv-episode.ts | 20 +---- src/types/tv-shows.ts | 5 ++ 11 files changed, 150 insertions(+), 147 deletions(-) diff --git a/src/endpoints/changes.ts b/src/endpoints/changes.ts index b7521de..be3d2dd 100644 --- a/src/endpoints/changes.ts +++ b/src/endpoints/changes.ts @@ -1,20 +1,20 @@ +import { ChangeOption, MediaChanges } from '../types'; import { BaseEndpoint } from './base'; -import { ChangeOptions, MediaChanges } from '../types/changes'; export class ChangeEndpoint extends BaseEndpoint { constructor(protected readonly accessToken: string) { super(accessToken); } - async movies(options?: ChangeOptions): Promise { + async movies(options?: ChangeOption): Promise { return await this.api.get(`/movie/changes`, options); } - async tvShows(options?: ChangeOptions): Promise { + async tvShows(options?: ChangeOption): Promise { return await this.api.get(`/tv/changes`, options); } - async person(options?: ChangeOptions): Promise { + async person(options?: ChangeOption): Promise { return await this.api.get(`/person/change`, options); } } diff --git a/src/endpoints/movies.ts b/src/endpoints/movies.ts index 70d0734..e81064e 100644 --- a/src/endpoints/movies.ts +++ b/src/endpoints/movies.ts @@ -3,7 +3,7 @@ import { AlternativeTitles, AppendToResponse, AppendToResponseMovieKey, - ChangeOptions, + ChangeOption, Changes, Credits, ExternalIds, @@ -11,6 +11,7 @@ import { Keywords, LanguageOption, LatestMovie, + MovieChangeValue, MovieDetails, MovieLists, MoviesPlayingNow, @@ -57,8 +58,8 @@ export class MoviesEndpoint extends BaseEndpoint { ); } - async changes(id: number, options?: ChangeOptions): Promise { - return await this.api.get(`${BASE_MOVIE}/${id}/changes`, options); + async changes(id: number, options?: ChangeOption): Promise> { + return await this.api.get>(`${BASE_MOVIE}/${id}/changes`, options); } async credits(id: number): Promise { diff --git a/src/endpoints/people.ts b/src/endpoints/people.ts index 0d4aa70..48ae5b7 100644 --- a/src/endpoints/people.ts +++ b/src/endpoints/people.ts @@ -1,18 +1,19 @@ import { AppendToResponse, AppendToResponsePersonKey, - ChangeOptions, + ChangeOption, ExternalIds, PageOption, PeopleImages, PersonTranslations, - PersonChanges, PersonCombinedCredits, PersonDetails, PersonMovieCredit, PersonTvShowCredit, PopularPersons, TaggedImages, + Changes, + PersonChangeValue, } from '../types'; import { BaseEndpoint } from './base'; @@ -38,8 +39,11 @@ export class PeopleEndpoint extends BaseEndpoint { ); } - async changes(id: number, options?: ChangeOptions): Promise { - return await this.api.get( + async changes( + id: number, + options?: ChangeOption + ): Promise> { + return await this.api.get>( `${BASE_PERSON}/${id}/changes`, options ); diff --git a/src/endpoints/tv-episode.ts b/src/endpoints/tv-episode.ts index 5988f1b..f7e9e7d 100644 --- a/src/endpoints/tv-episode.ts +++ b/src/endpoints/tv-episode.ts @@ -1,83 +1,82 @@ import { - Episode, - EpisodeSelection, - LanguageOption, - PageOption, - ChangeOption, - TvEpisodeChanges, - TvEpisodeCredit, - ExternalIds, - Images, - TvEpisodeTranslations, - Videos, - AppendToResponseMovieKey, - AppendToResponse, - } from '..'; - import { BaseEndpoint } from './base'; - - const BASE_EPISODE = (episodeSelection: EpisodeSelection): string => { - return `/tv/${episodeSelection.tvShowID}/season/${episodeSelection.seasonNumber}/episode/${episodeSelection.episodeNumber}`; - }; - - export class TvEpisodesEndpoint extends BaseEndpoint { - constructor(accessToken: string) { - super(accessToken); - } - - async details( - episodeSelection: EpisodeSelection, - appendToResponse?: T, - options?: LanguageOption - ) { - const combinedOptions = { - append_to_response: appendToResponse - ? appendToResponse.join(',') - : undefined, - ...options, - }; - - return await this.api.get< - AppendToResponse, T, 'movie'> - >(`${BASE_EPISODE(episodeSelection)}`, combinedOptions); - } - - async changes(episodeID: number, options?: PageOption & ChangeOption) { - return await this.api.get( - `/tv/episode/${episodeID}/changes`, - options - ); - } - - async credits(episodeSelection: EpisodeSelection, options?: LanguageOption) { - return await this.api.get( - `${BASE_EPISODE(episodeSelection)}/credits`, - options - ); - } - - async externalIds(episodeSelection: EpisodeSelection) { - return await this.api.get( - `${BASE_EPISODE(episodeSelection)}/external_ids` - ); - } - - async images(episodeSelection: EpisodeSelection) { - return await this.api.get( - `${BASE_EPISODE(episodeSelection)}/images` - ); - } - - async translations(episodeSelection: EpisodeSelection) { - return await this.api.get( - `${BASE_EPISODE(episodeSelection)}/translations` - ); - } - - async videos(episodeSelection: EpisodeSelection, options?: LanguageOption) { - return await this.api.get( - `${BASE_EPISODE(episodeSelection)}/videos`, - options - ); - } + Episode, + EpisodeSelection, + LanguageOption, + ChangeOption, + TvEpisodeCredit, + ExternalIds, + Images, + TvEpisodeTranslations, + Videos, + AppendToResponseMovieKey, + AppendToResponse, + Changes, + TvEpisodeChangeValue, +} from '..'; +import { BaseEndpoint } from './base'; + +const BASE_EPISODE = (episodeSelection: EpisodeSelection): string => { + return `/tv/${episodeSelection.tvShowID}/season/${episodeSelection.seasonNumber}/episode/${episodeSelection.episodeNumber}`; +}; + +export class TvEpisodesEndpoint extends BaseEndpoint { + constructor(accessToken: string) { + super(accessToken); } - \ No newline at end of file + + async details( + episodeSelection: EpisodeSelection, + appendToResponse?: T, + options?: LanguageOption + ) { + const combinedOptions = { + append_to_response: appendToResponse + ? appendToResponse.join(',') + : undefined, + ...options, + }; + + return await this.api.get< + AppendToResponse, T, 'movie'> + >(`${BASE_EPISODE(episodeSelection)}`, combinedOptions); + } + + async changes(episodeID: number, options?: ChangeOption) { + return await this.api.get>( + `/tv/episode/${episodeID}/changes`, + options + ); + } + + async credits(episodeSelection: EpisodeSelection, options?: LanguageOption) { + return await this.api.get( + `${BASE_EPISODE(episodeSelection)}/credits`, + options + ); + } + + async externalIds(episodeSelection: EpisodeSelection) { + return await this.api.get( + `${BASE_EPISODE(episodeSelection)}/external_ids` + ); + } + + async images(episodeSelection: EpisodeSelection) { + return await this.api.get( + `${BASE_EPISODE(episodeSelection)}/images` + ); + } + + async translations(episodeSelection: EpisodeSelection) { + return await this.api.get( + `${BASE_EPISODE(episodeSelection)}/translations` + ); + } + + async videos(episodeSelection: EpisodeSelection, options?: LanguageOption) { + return await this.api.get( + `${BASE_EPISODE(episodeSelection)}/videos`, + options + ); + } +} diff --git a/src/endpoints/tv-shows.ts b/src/endpoints/tv-shows.ts index 738d4e2..4073dc8 100644 --- a/src/endpoints/tv-shows.ts +++ b/src/endpoints/tv-shows.ts @@ -3,7 +3,7 @@ import { AlternativeTitles, AppendToResponse, AppendToResponseTvKey, - ChangeOptions, + ChangeOption, Changes, ContentRatings, Credits, @@ -24,6 +24,7 @@ import { SimilarTvShows, TopRatedTvShows, Translations, + TvShowChangeValue, TvShowDetails, TvShowsAiringToday, Videos, @@ -58,8 +59,8 @@ export class TvShowsEndpoint extends BaseEndpoint { ); } - async changes(id: number, options?: ChangeOptions): Promise { - return await this.api.get(`${BASE_TV}/${id}/changes`, options); + async changes(id: number, options?: ChangeOption): Promise> { + return await this.api.get>(`${BASE_TV}/${id}/changes`, options); } async contentRatings(id: number): Promise { diff --git a/src/types/changes.ts b/src/types/changes.ts index 3c5f786..62151e9 100644 --- a/src/types/changes.ts +++ b/src/types/changes.ts @@ -10,26 +10,20 @@ export interface MediaChanges { total_results: number; } -export interface ChangeOptions { - end_date?: string; - start_date?: string; - page?: number; +export interface Changes { + changes: Change[]; } -export interface Changes { - changes: Change[]; -} - -export interface Change { +export interface Change { key: string; - items: ChangeItem[]; + items: ChangeItem[]; } -export interface ChangeItem { +export interface ChangeItem { id: string; action: string; time: string; - value: Array; + value: T; iso_639_1: string; - original_value: Array; + original_value: T; } diff --git a/src/types/movies.ts b/src/types/movies.ts index 77789b9..15fce6e 100644 --- a/src/types/movies.ts +++ b/src/types/movies.ts @@ -155,3 +155,14 @@ export interface UpcomingMovies { total_results: number; total_pages: number; } + +export type MovieChangeValue = + | string + | { + person_id: number; + character: string; + order: number; + cast_id: number; + credit_id: string; + } + | unknown; diff --git a/src/types/options.ts b/src/types/options.ts index 11556bc..bdff84d 100644 --- a/src/types/options.ts +++ b/src/types/options.ts @@ -10,7 +10,6 @@ import { MovieLists, PeopleImages, PersonTranslations, - PersonChanges, PersonCombinedCredits, PersonMovieCredit, PersonTvShowCredit, @@ -24,6 +23,10 @@ import { Translations, Videos, WatchProviders, + PersonChangeValue, + MovieChangeValue, + TvShowChangeValue, + TvEpisodeChangeValue, } from '.'; export interface LanguageOption { @@ -125,9 +128,14 @@ export type AppendToResponse< : object) & ('changes' extends T[number] ? { - changes: Omit< - Media extends 'person' ? PersonChanges : Changes, - 'id' + changes: Changes< + Media extends 'person' + ? PersonChangeValue + : Media extends 'movie' + ? MovieChangeValue + : Media extends 'tvShow' + ? TvShowChangeValue + : TvEpisodeChangeValue >; } : object) & @@ -147,7 +155,12 @@ export type AppendToResponse< ? { external_ids: Omit } : object) & ('translations' extends T[number] - ? { translations: Omit } + ? { + translations: Omit< + Media extends 'person' ? PersonTranslations : Translations, + 'id' + >; + } : object) & ('watch/providers' extends T[number] ? { 'watch/providers': Omit } diff --git a/src/types/people.ts b/src/types/people.ts index 333c1ba..cb34952 100644 --- a/src/types/people.ts +++ b/src/types/people.ts @@ -96,22 +96,13 @@ export interface PersonDetails { homepage: string; } -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 type PersonChangeValue = + | string + | { + profile: { + file_path: string; + }; + }; export interface PopularPersons { page: number; diff --git a/src/types/tv-episode.ts b/src/types/tv-episode.ts index fc7819e..8212d2e 100644 --- a/src/types/tv-episode.ts +++ b/src/types/tv-episode.ts @@ -37,24 +37,6 @@ export interface GuestStar { profile_path: string | null; } -export interface TvEpisodeChangeItem { - id: string; - action: string; - time: string; - iso_639_1: string; - iso_3166_1: string; - value: string; -} - -export interface TvEpisodeChange { - key: string; - items: TvEpisodeChangeItem[]; -} - -export interface TvEpisodeChanges { - changes: TvEpisodeChange[]; -} - export interface TvEpisodeCredit extends Credits { guest_stars: GuestStar[]; } @@ -72,3 +54,5 @@ export interface TvEpisodeTranslations { }; }; } + +export type TvEpisodeChangeValue = string | unknown; \ No newline at end of file diff --git a/src/types/tv-shows.ts b/src/types/tv-shows.ts index 6fa34a2..eba1193 100644 --- a/src/types/tv-shows.ts +++ b/src/types/tv-shows.ts @@ -279,3 +279,8 @@ export interface TopRatedTvShows { total_results: number; total_pages: number; } + +export interface TvShowChangeValue { + season_id: number; + season_number: number; +}