From 718e696514eed214e52624110d7005be8e9ef05e Mon Sep 17 00:00:00 2001 From: TheSawkit <23707419+TheSawkit@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:22:43 +0200 Subject: [PATCH 1/2] Refactor : Change CATEGORY_FETCHERS to use Map for improved access and simplify fetchMoreMedia logic --- app/actions/media.ts | 52 +++++++++++++++----------------------------- 1 file changed, 17 insertions(+), 35 deletions(-) diff --git a/app/actions/media.ts b/app/actions/media.ts index 758bb07..d34ecca 100644 --- a/app/actions/media.ts +++ b/app/actions/media.ts @@ -47,28 +47,18 @@ export async function mergeMediaWithWatchlist( type CategoryFetcher = (page: number) => Promise; -const CATEGORY_FETCHERS: Record = { - popular: (page) => - getPopularMovies(page).then((r) => r.map(movieToMediaItem)), - 'top-rated': (page) => - getTopRatedMovies(page).then((r) => r.map(movieToMediaItem)), - upcoming: (page) => - getUpcomingMovies(page).then((r) => r.map(movieToMediaItem)), - 'now-playing': (page) => - getNowPlayingMovies(page).then((r) => r.map(movieToMediaItem)), - trending: (page) => - getTrendingMovies('week', page).then((r) => r.map(movieToMediaItem)), - 'tv-popular': (page) => - getPopularTvShows(page).then((r) => r.map(tvShowToMediaItem)), - 'tv-top-rated': (page) => - getTopRatedTvShows(page).then((r) => r.map(tvShowToMediaItem)), - 'tv-trending': (page) => - getTrendingTvShows('week', page).then((r) => r.map(tvShowToMediaItem)), - 'tv-airing-today': (page) => - getAiringTodayTvShows(page).then((r) => r.map(tvShowToMediaItem)), - 'tv-on-the-air': (page) => - getOnTheAirTvShows(page).then((r) => r.map(tvShowToMediaItem)), -}; +const CATEGORY_FETCHERS: Map = new Map([ + ['popular', (page) => getPopularMovies(page).then((r) => r.map(movieToMediaItem))], + ['top-rated', (page) => getTopRatedMovies(page).then((r) => r.map(movieToMediaItem))], + ['upcoming', (page) => getUpcomingMovies(page).then((r) => r.map(movieToMediaItem))], + ['now-playing', (page) => getNowPlayingMovies(page).then((r) => r.map(movieToMediaItem))], + ['trending', (page) => getTrendingMovies('week', page).then((r) => r.map(movieToMediaItem))], + ['tv-popular', (page) => getPopularTvShows(page).then((r) => r.map(tvShowToMediaItem))], + ['tv-top-rated', (page) => getTopRatedTvShows(page).then((r) => r.map(tvShowToMediaItem))], + ['tv-trending', (page) => getTrendingTvShows('week', page).then((r) => r.map(tvShowToMediaItem))], + ['tv-airing-today', (page) => getAiringTodayTvShows(page).then((r) => r.map(tvShowToMediaItem))], + ['tv-on-the-air', (page) => getOnTheAirTvShows(page).then((r) => r.map(tvShowToMediaItem))], +]); /** * Fetches a paginated list of media items for a given category and merges watchlist data. @@ -77,19 +67,11 @@ const CATEGORY_FETCHERS: Record = { * @param page - Page number for pagination. * @returns Enriched media items for the requested category and page. */ -export async function fetchMoreMedia( - category: string, - page: number -): Promise { - if (!Object.prototype.hasOwnProperty.call(CATEGORY_FETCHERS, category)) { - return []; - } - - const fetcher = CATEGORY_FETCHERS[category]; - if (typeof fetcher !== 'function') return []; - - const items = await fetcher(page); - return mergeMediaWithWatchlist(items); +export async function fetchMoreMedia(category: string, page: number): Promise { + if (!CATEGORY_FETCHERS.has(category)) return []; + const fetcher = CATEGORY_FETCHERS.get(category)!; + const items = await fetcher(page); + return mergeMediaWithWatchlist(items); } const ACTOR_FILTER_MAX_ITEMS = 300; From f2a9155693f3664c061879a2a764c0e6e3abeef1 Mon Sep 17 00:00:00 2001 From: TheSawkit <23707419+TheSawkit@users.noreply.github.com> Date: Tue, 9 Jun 2026 18:25:43 +0200 Subject: [PATCH 2/2] Refactor : Format CATEGORY_FETCHERS for improved readability and maintainability --- app/actions/media.ts | 73 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 58 insertions(+), 15 deletions(-) diff --git a/app/actions/media.ts b/app/actions/media.ts index d34ecca..20b834a 100644 --- a/app/actions/media.ts +++ b/app/actions/media.ts @@ -48,16 +48,56 @@ export async function mergeMediaWithWatchlist( type CategoryFetcher = (page: number) => Promise; const CATEGORY_FETCHERS: Map = new Map([ - ['popular', (page) => getPopularMovies(page).then((r) => r.map(movieToMediaItem))], - ['top-rated', (page) => getTopRatedMovies(page).then((r) => r.map(movieToMediaItem))], - ['upcoming', (page) => getUpcomingMovies(page).then((r) => r.map(movieToMediaItem))], - ['now-playing', (page) => getNowPlayingMovies(page).then((r) => r.map(movieToMediaItem))], - ['trending', (page) => getTrendingMovies('week', page).then((r) => r.map(movieToMediaItem))], - ['tv-popular', (page) => getPopularTvShows(page).then((r) => r.map(tvShowToMediaItem))], - ['tv-top-rated', (page) => getTopRatedTvShows(page).then((r) => r.map(tvShowToMediaItem))], - ['tv-trending', (page) => getTrendingTvShows('week', page).then((r) => r.map(tvShowToMediaItem))], - ['tv-airing-today', (page) => getAiringTodayTvShows(page).then((r) => r.map(tvShowToMediaItem))], - ['tv-on-the-air', (page) => getOnTheAirTvShows(page).then((r) => r.map(tvShowToMediaItem))], + [ + 'popular', + (page) => getPopularMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'top-rated', + (page) => getTopRatedMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'upcoming', + (page) => getUpcomingMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'now-playing', + (page) => + getNowPlayingMovies(page).then((r) => r.map(movieToMediaItem)), + ], + [ + 'trending', + (page) => + getTrendingMovies('week', page).then((r) => + r.map(movieToMediaItem) + ), + ], + [ + 'tv-popular', + (page) => getPopularTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], + [ + 'tv-top-rated', + (page) => + getTopRatedTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], + [ + 'tv-trending', + (page) => + getTrendingTvShows('week', page).then((r) => + r.map(tvShowToMediaItem) + ), + ], + [ + 'tv-airing-today', + (page) => + getAiringTodayTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], + [ + 'tv-on-the-air', + (page) => + getOnTheAirTvShows(page).then((r) => r.map(tvShowToMediaItem)), + ], ]); /** @@ -67,11 +107,14 @@ const CATEGORY_FETCHERS: Map = new Map([ * @param page - Page number for pagination. * @returns Enriched media items for the requested category and page. */ -export async function fetchMoreMedia(category: string, page: number): Promise { - if (!CATEGORY_FETCHERS.has(category)) return []; - const fetcher = CATEGORY_FETCHERS.get(category)!; - const items = await fetcher(page); - return mergeMediaWithWatchlist(items); +export async function fetchMoreMedia( + category: string, + page: number +): Promise { + if (!CATEGORY_FETCHERS.has(category)) return []; + const fetcher = CATEGORY_FETCHERS.get(category)!; + const items = await fetcher(page); + return mergeMediaWithWatchlist(items); } const ACTOR_FILTER_MAX_ITEMS = 300;