apilink / controllers /mainController.js
franyer24's picture
update logic
1ce7a42 verified
Raw
History Blame Contribute Delete
2.96 kB
const { fetchTmdbData } = require('../handlers/mainHandle');
const { processVideo } = require('../utils/ts');
const { getCachedLink } = require('../utils/cache');
/**
* Mapa de rutas: Local -> TMDB Endpoint
* Nota: No incluir '/' al inicio de los valores para evitar URLs malformadas.
*/
const tmdbEndpointMap = {
'/movie/popular': 'movie/popular',
'/tv/popular': 'tv/popular',
'/trending/movie/day': 'trending/movie/day',
'/trending/tv/day': 'trending/tv/day',
'/trending/all/day': 'trending/all/day',
'/trending/all/week': 'trending/all/week',
'/trending/movie/week': 'trending/movie/week',
'/trending/tv/week': 'trending/tv/week',
'/genre/movie/list': 'genre/movie/list',
'/discover/movie': 'discover/movie',
'/discover/tv': 'discover/tv',
'/movie/upcoming': 'movie/upcoming',
'/movie/now_playing': 'movie/now_playing',
'/tv': 'tv',
'/movie': 'movie',
'/search/multi': 'search/multi',
};
// --- CONTROLADORES ---
async function getTmdbContent(req, res) {
try {
// 1. Extraer la ruta base (ej: /search/multi)
const basePath = req.route.path.replace(/\/:tmdbid.*$/, '');
let endpoint = tmdbEndpointMap[basePath];
if (!endpoint) {
return res.status(404).json({ error: "Ruta no mapeada en el servidor." });
}
// 2. Construir el endpoint con IDs si existen (Evita añadir undefined)
const { tmdbid, seasonid } = req.params;
if (tmdbid) {
endpoint += `/${tmdbid}`;
if (seasonid) {
endpoint += `/season/${seasonid}`;
}
}
// 3. Consultar a TMDB (req.query ya trae 'query', 'page', 'language', etc.)
const data = await fetchTmdbData(endpoint, req.query);
if (!data) {
return res.status(404).json({ error: "No se encontraron resultados en TMDB." });
}
res.setHeader('Access-Control-Allow-Origin', '*');
return res.json(data);
} catch (error) {
console.error(`[TMDB Controller Error]: ${error.message}`);
return res.status(500).json({
error: "Error al procesar la solicitud con TMDB.",
details: error.message
});
}
}
async function getCacheStream(req, res) {
const { locker, id } = req.params;
const cacheKey = `${locker}-get${id}`;
const cachedItem = getCachedLink(cacheKey);
if (!cachedItem || !cachedItem.result) {
return res.status(404).json({ error: `Contenido no encontrado o expirado para el ID: ${id}` });
}
try {
const processedLink = await processVideo(cachedItem.result);
return res.json({ link: processedLink });
} catch (error) {
console.error(`[Stream Error]: ${error.message}`);
return res.status(500).json({ error: 'Error al procesar el enlace de video.' });
}
}
module.exports = {
getCacheStream,
getTmdbContent
};