diff --git a/server/routes/discover/index.ts b/server/routes/discover/index.ts index 7c86cc9..321e856 100644 --- a/server/routes/discover/index.ts +++ b/server/routes/discover/index.ts @@ -1,100 +1,128 @@ import { TMDB } from "tmdb-ts"; -const tmdb = new TMDB(useRuntimeConfig().tmdbApiKey) +const tmdb = new TMDB(useRuntimeConfig().tmdbApiKey); import { trakt } from "#imports"; -export default defineCachedEventHandler(async (event) => { - const popular = { movies: [], shows: [] } - popular.movies.push(...((data) => (data.results.sort((a, b) => b.vote_average - a.vote_average), data.results))(await tmdb.movies.popular())); // Sorts by vote average - popular.shows.push(...((data) => (data.results.sort((a, b) => b.vote_average - a.vote_average), data.results))(await tmdb.tvShows.popular())); // Sorts by vote average +export default defineCachedEventHandler( + async (event) => { + const popular = { movies: [], shows: [] }; + popular.movies.push( + ...((data) => ( + data.results.sort((a, b) => b.vote_average - a.vote_average), + data.results + ))(await tmdb.movies.popular()) + ); // Sorts by vote average + popular.shows.push( + ...((data) => ( + data.results.sort((a, b) => b.vote_average - a.vote_average), + data.results + ))(await tmdb.tvShows.popular()) + ); // Sorts by vote average const genres = { - movies: await tmdb.genres.movies(), - shows: await tmdb.genres.tvShows() - } + movies: await tmdb.genres.movies(), + shows: await tmdb.genres.tvShows(), + }; const topRated = { - movies: await tmdb.movies.topRated(), - shows: await tmdb.tvShows.topRated() - } + movies: await tmdb.movies.topRated(), + shows: await tmdb.tvShows.topRated(), + }; const nowPlaying = { - movies: (await tmdb.movies.nowPlaying()).results.sort((a, b) => b.vote_average - a.vote_average), - shows: (await tmdb.tvShows.onTheAir()).results.sort((a, b) => b.vote_average - a.vote_average) - } - let lists = [ - - ] + movies: (await tmdb.movies.nowPlaying()).results.sort( + (a, b) => b.vote_average - a.vote_average + ), + shows: (await tmdb.tvShows.onTheAir()).results.sort( + (a, b) => b.vote_average - a.vote_average + ), + }; + let lists = []; const internalLists = { trending: await trakt.lists.trending(), popular: await trakt.lists.popular(), - } + }; for (let list = 0; list < internalLists.trending.length; list++) { - const items = await trakt.lists.items({ id: internalLists.trending[list].list.ids.trakt, type: "all" }); + const items = await trakt.lists.items({ + id: internalLists.trending[list].list.ids.trakt, + type: "all", + }); lists.push({ - name: internalLists.trending[list].list.name, - likes: internalLists.trending[list].like_count, - items: [] + name: internalLists.trending[list].list.name, + likes: internalLists.trending[list].like_count, + items: [], }); for (let item = 0; item < items.length; item++) { - switch (true) { - case !!items[item].movie?.ids?.tmdb: - lists[list].items.push({ - type: "movie", - name: items[item].movie.title, - id: items[item].movie.ids.tmdb, - year: items[item].movie.year, - }); - break; - case !!items[item].show?.ids?.tmdb: - lists[list].items.push({ - type: "show", - name: items[item].show.title, - id: items[item].show.ids.tmdb, - year: items[item].show.year - }); - break; - } + switch (true) { + case !!items[item].movie?.ids?.tmdb: + lists[list].items.push({ + type: "movie", + name: items[item].movie.title, + id: items[item].movie.ids.tmdb, + year: items[item].movie.year, + }); + break; + case !!items[item].show?.ids?.tmdb: + lists[list].items.push({ + type: "show", + name: items[item].show.title, + id: items[item].show.ids.tmdb, + year: items[item].show.year, + }); + break; + } } } for (let list = 0; list < internalLists.popular.length; list++) { - const items = await trakt.lists.items({ id: internalLists.popular[list].list.ids.trakt, type: "all" }); + const items = await trakt.lists.items({ + id: internalLists.popular[list].list.ids.trakt, + type: "all", + }); lists.push({ - name: internalLists.popular[list].list.name, - likes: internalLists.popular[list].like_count, - items: [] + name: internalLists.popular[list].list.name, + likes: internalLists.popular[list].like_count, + items: [], }); for (let item = 0; item < items.length; item++) { - switch (true) { - case !!items[item].movie?.ids?.tmdb: - lists[lists.length - 1].items.push({ - type: "movie", - name: items[item].movie.title, - id: items[item].movie.ids.tmdb, - year: items[item].movie.year, - }); - break; - case !!items[item].show?.ids?.tmdb: - lists[lists.length - 1].items.push({ - type: "show", - name: items[item].show.title, - id: items[item].show.ids.tmdb, - year: items[item].show.year - }); - break; - } + switch (true) { + case !!items[item].movie?.ids?.tmdb: + lists[lists.length - 1].items.push({ + type: "movie", + name: items[item].movie.title, + id: items[item].movie.ids.tmdb, + year: items[item].movie.year, + }); + break; + case !!items[item].show?.ids?.tmdb: + lists[lists.length - 1].items.push({ + type: "show", + name: items[item].show.title, + id: items[item].show.ids.tmdb, + year: items[item].show.year, + }); + break; + } } } - const test = await trakt.lists.items({id: internalLists.trending[1].list.ids.trakt, type: "all"}) - console.log(internalLists.trending[1].list.ids.trakt) + const trending = await trakt.movies.popular(); + + // most watched films + const mostWatched = await trakt.movies.watched(); + // takes the highest grossing box office film in the last weekend + const lastWeekend = await trakt.movies.boxoffice(); return { + mostWatched, + lastWeekend, + trending, popular, topRated, nowPlaying, genres, - traktLists: lists + traktLists: lists, }; -}, { - maxAge: process.env.NODE_ENV === 'production' ? 60 * 60 : 0 // 20 Minutes for prod, no cache for dev. Customize to your liking -}); + }, + { + maxAge: process.env.NODE_ENV === "production" ? 60 * 60 : 0, // 20 Minutes for prod, no cache for dev. Customize to your liking + } +);