Spaces:
Sleeping
Sleeping
File size: 1,996 Bytes
4bea261 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | ---
import TopTenSection from './TopTenSection.jsx';
import { getSeriesMovies } from '../lib/api.js';
import { txasupabase } from '../lib/txasupabase.js';
const data = await getSeriesMovies(1);
let rawMovies = data?.items || [];
if (rawMovies.length < 4) {
try {
const res = await fetch('https://phimapi.com/v1/api/danh-sach/phim-bo?page=1');
if (res.ok) {
const d = await res.json();
const items = d.data?.items || [];
const mapped = items.map(item => ({
_id: item._id,
name: item.name,
slug: item.slug,
origin_name: item.origin_name,
thumb_url: item.thumb_url,
poster_url: item.poster_url,
year: item.year,
quality: item.quality || 'FHD',
lang: item.lang || 'Vietsub',
episode_current: item.episode_current || 'Tập 1',
type: item.type || 'series',
isLocal: false
}));
rawMovies = [...rawMovies, ...mapped.filter(m => !rawMovies.some(x => x.slug === m.slug))];
}
} catch (e) {
console.error('TopTen fallback error:', e);
}
}
// Smart Deduplicate by base name (to avoid multiple seasons of the same show)
const uniqueMovies = [];
const seenBaseNames = new Set();
for (const m of rawMovies) {
const baseName = m.name.split(' (Phần')[0].trim().toLowerCase();
if (!seenBaseNames.has(baseName)) {
seenBaseNames.add(baseName);
uniqueMovies.push(m);
}
}
const seriesMovies = uniqueMovies.slice(0, 10);
// Fetch Top Rated & Most Favorited
const topRated = await txasupabase.getTopRatedMovies(10).catch(() => []);
const mostFavorited = await txasupabase.getMostFavoritedMovies(10).catch(() => []);
// Intelligent Fallbacks
const finalSeries = seriesMovies;
const finalRated = topRated.length >= 3 ? topRated : seriesMovies;
const finalFavorited = mostFavorited.length >= 3 ? mostFavorited : seriesMovies;
---
<TopTenSection
series={finalSeries}
rated={finalRated}
favorited={finalFavorited}
client:only="react"
/>
|