feat: 5-Jahres-Filter für Streaming Top10, Endpoint für komplette TMDb-Provider-Liste DE
This commit is contained in:
@@ -507,17 +507,30 @@ router.get('/streaming/:providerId', authenticate, async (req, res) => {
|
||||
const provider = STREAMING_PROVIDERS.find(p => p.id === req.params.providerId);
|
||||
if (!provider) return res.status(404).json({ error: 'Unbekannter Anbieter' });
|
||||
|
||||
const discoverParams = {
|
||||
// Nur Titel der letzten 5 Jahre
|
||||
const minYear = new Date().getFullYear() - 5;
|
||||
const minDate = `${minYear}-01-01`;
|
||||
|
||||
const movieParams = {
|
||||
watch_region: 'DE',
|
||||
with_watch_providers: provider.tmdbId,
|
||||
with_watch_monetization_types: 'flatrate',
|
||||
sort_by: 'popularity.desc',
|
||||
'vote_count.gte': 10,
|
||||
'primary_release_date.gte': minDate,
|
||||
};
|
||||
const tvParams = {
|
||||
watch_region: 'DE',
|
||||
with_watch_providers: provider.tmdbId,
|
||||
with_watch_monetization_types: 'flatrate',
|
||||
sort_by: 'popularity.desc',
|
||||
'vote_count.gte': 10,
|
||||
'first_air_date.gte': minDate,
|
||||
};
|
||||
|
||||
const [movieResults, tvResults, genreMap] = await Promise.all([
|
||||
tmdb('/discover/movie', discoverParams),
|
||||
tmdb('/discover/tv', { ...discoverParams, first_air_date_year: undefined }),
|
||||
tmdb('/discover/movie', movieParams),
|
||||
tmdb('/discover/tv', tvParams),
|
||||
getGenreMap(),
|
||||
]);
|
||||
|
||||
@@ -638,6 +651,23 @@ router.post('/favorites/:id/acknowledge', authenticate, requireAdmin, (req, res)
|
||||
res.json({ ok: true });
|
||||
});
|
||||
|
||||
// Admin: ALLE verfügbaren Watch-Provider für Deutschland live von TMDb holen
|
||||
router.get('/streaming/all-providers', authenticate, requireAdmin, async (req, res) => {
|
||||
try {
|
||||
const [movieProv, tvProv] = await Promise.all([
|
||||
tmdb('/watch/providers/movie', { watch_region: 'DE' }),
|
||||
tmdb('/watch/providers/tv', { watch_region: 'DE' }),
|
||||
]);
|
||||
const merged = {};
|
||||
for (const p of [...(movieProv.results||[]), ...(tvProv.results||[])]) {
|
||||
merged[p.provider_id] = { id: p.provider_id, name: p.provider_name, logo: p.logo_path,
|
||||
priority: p.display_priorities?.DE ?? p.display_priority ?? 999 };
|
||||
}
|
||||
const list = Object.values(merged).sort((a,b) => a.priority - b.priority);
|
||||
res.json(list);
|
||||
} catch(e) { res.status(500).json({ error: e.message }); }
|
||||
});
|
||||
|
||||
router.get('/settings', authenticate, requireAdmin, (req, res) => res.json({ configured: !!getToken() }));
|
||||
router.put('/settings', authenticate, requireAdmin, (req, res) => {
|
||||
const { tmdb_token } = req.body;
|
||||
|
||||
Reference in New Issue
Block a user