added some extra films for discover like box office, and most watched

This commit is contained in:
FifthWit 2025-04-03 03:31:19 -05:00
parent b99d88cf2e
commit 0547d2b951

View file

@ -1,100 +1,128 @@
import { TMDB } from "tmdb-ts"; import { TMDB } from "tmdb-ts";
const tmdb = new TMDB(useRuntimeConfig().tmdbApiKey) const tmdb = new TMDB(useRuntimeConfig().tmdbApiKey);
import { trakt } from "#imports"; import { trakt } from "#imports";
export default defineCachedEventHandler(async (event) => { export default defineCachedEventHandler(
const popular = { movies: [], shows: [] } async (event) => {
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 const popular = { movies: [], shows: [] };
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 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 = { const genres = {
movies: await tmdb.genres.movies(), movies: await tmdb.genres.movies(),
shows: await tmdb.genres.tvShows() shows: await tmdb.genres.tvShows(),
} };
const topRated = { const topRated = {
movies: await tmdb.movies.topRated(), movies: await tmdb.movies.topRated(),
shows: await tmdb.tvShows.topRated() shows: await tmdb.tvShows.topRated(),
} };
const nowPlaying = { const nowPlaying = {
movies: (await tmdb.movies.nowPlaying()).results.sort((a, b) => b.vote_average - a.vote_average), movies: (await tmdb.movies.nowPlaying()).results.sort(
shows: (await tmdb.tvShows.onTheAir()).results.sort((a, b) => b.vote_average - a.vote_average) (a, b) => b.vote_average - a.vote_average
} ),
let lists = [ shows: (await tmdb.tvShows.onTheAir()).results.sort(
(a, b) => b.vote_average - a.vote_average
] ),
};
let lists = [];
const internalLists = { const internalLists = {
trending: await trakt.lists.trending(), trending: await trakt.lists.trending(),
popular: await trakt.lists.popular(), popular: await trakt.lists.popular(),
} };
for (let list = 0; list < internalLists.trending.length; list++) { 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({ lists.push({
name: internalLists.trending[list].list.name, name: internalLists.trending[list].list.name,
likes: internalLists.trending[list].like_count, likes: internalLists.trending[list].like_count,
items: [] items: [],
}); });
for (let item = 0; item < items.length; item++) { for (let item = 0; item < items.length; item++) {
switch (true) { switch (true) {
case !!items[item].movie?.ids?.tmdb: case !!items[item].movie?.ids?.tmdb:
lists[list].items.push({ lists[list].items.push({
type: "movie", type: "movie",
name: items[item].movie.title, name: items[item].movie.title,
id: items[item].movie.ids.tmdb, id: items[item].movie.ids.tmdb,
year: items[item].movie.year, year: items[item].movie.year,
}); });
break; break;
case !!items[item].show?.ids?.tmdb: case !!items[item].show?.ids?.tmdb:
lists[list].items.push({ lists[list].items.push({
type: "show", type: "show",
name: items[item].show.title, name: items[item].show.title,
id: items[item].show.ids.tmdb, id: items[item].show.ids.tmdb,
year: items[item].show.year year: items[item].show.year,
}); });
break; break;
} }
} }
} }
for (let list = 0; list < internalLists.popular.length; list++) { 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({ lists.push({
name: internalLists.popular[list].list.name, name: internalLists.popular[list].list.name,
likes: internalLists.popular[list].like_count, likes: internalLists.popular[list].like_count,
items: [] items: [],
}); });
for (let item = 0; item < items.length; item++) { for (let item = 0; item < items.length; item++) {
switch (true) { switch (true) {
case !!items[item].movie?.ids?.tmdb: case !!items[item].movie?.ids?.tmdb:
lists[lists.length - 1].items.push({ lists[lists.length - 1].items.push({
type: "movie", type: "movie",
name: items[item].movie.title, name: items[item].movie.title,
id: items[item].movie.ids.tmdb, id: items[item].movie.ids.tmdb,
year: items[item].movie.year, year: items[item].movie.year,
}); });
break; break;
case !!items[item].show?.ids?.tmdb: case !!items[item].show?.ids?.tmdb:
lists[lists.length - 1].items.push({ lists[lists.length - 1].items.push({
type: "show", type: "show",
name: items[item].show.title, name: items[item].show.title,
id: items[item].show.ids.tmdb, id: items[item].show.ids.tmdb,
year: items[item].show.year year: items[item].show.year,
}); });
break; break;
} }
} }
} }
const test = await trakt.lists.items({id: internalLists.trending[1].list.ids.trakt, type: "all"}) const trending = await trakt.movies.popular();
console.log(internalLists.trending[1].list.ids.trakt)
// 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 { return {
mostWatched,
lastWeekend,
trending,
popular, popular,
topRated, topRated,
nowPlaying, nowPlaying,
genres, 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
}
);