import express from 'express'; import { getFavorites, getDB, updateArticleFavorite, getArticle } from '../services/mongodb.js'; import { basicAuthMiddleware } from '../middlewares/auth.js'; import { broadcast } from '../services/websocket.js'; const router = express.Router(); // Obtener favoritos (requiere autenticación) router.get('/', basicAuthMiddleware, async (req, res) => { try { // Obtener usuario autenticado (requerido) const user = req.user; // Todos los usuarios (incluidos admins) ven solo sus propios favoritos const username = user.username; const favorites = await getFavorites(username); res.json(favorites); } catch (error) { res.status(500).json({ error: error.message }); } }); // Añadir favorito (requiere autenticación) router.post('/', basicAuthMiddleware, async (req, res) => { try { const db = getDB(); if (!db) { return res.status(500).json({ error: 'MongoDB no está disponible' }); } // Verificar que el usuario está autenticado (middleware ya lo valida, pero doble verificación) if (!req.user || !req.user.username) { return res.status(401).json({ error: 'Se requiere autenticación', message: 'Se requiere autenticación para marcar favoritos' }); } const username = req.user.username; const { platform, id } = req.body; if (!platform || !id) { return res.status(400).json({ error: 'platform e id son requeridos' }); } // Convertir id a string para consistencia const idStr = String(id); // Verificar si el artículo existe const article = await getArticle(platform, idStr); if (!article) { return res.status(404).json({ error: `Artículo no encontrado en MongoDB: ${platform}:${idStr}` }); } // Actualizar favorito para el usuario autenticado await updateArticleFavorite(platform, idStr, true, username); // Obtener favoritos del usuario autenticado (todos ven solo los suyos) const favorites = await getFavorites(username); broadcast({ type: 'favorites_updated', data: favorites, username }); res.json({ success: true, favorites }); } catch (error) { console.error('Error en POST /favorites:', error); res.status(500).json({ error: error.message }); } }); // Eliminar favorito (requiere autenticación) router.delete('/:platform/:id', basicAuthMiddleware, async (req, res) => { try { const db = getDB(); if (!db) { return res.status(500).json({ error: 'MongoDB no está disponible' }); } // Verificar que el usuario está autenticado (middleware ya lo valida, pero doble verificación) if (!req.user || !req.user.username) { return res.status(401).json({ error: 'Se requiere autenticación', message: 'Se requiere autenticación para eliminar favoritos' }); } const username = req.user.username; const { platform, id } = req.params; const idStr = String(id); // Verificar si el artículo existe const article = await getArticle(platform, idStr); if (!article) { return res.status(404).json({ error: 'Artículo no encontrado' }); } // Actualizar favorito para el usuario autenticado await updateArticleFavorite(platform, idStr, false, username); // Obtener favoritos del usuario autenticado (todos ven solo los suyos) const favorites = await getFavorites(username); broadcast({ type: 'favorites_updated', data: favorites, username }); res.json({ success: true, favorites }); } catch (error) { console.error('Error en DELETE /favorites:', error); res.status(500).json({ error: error.message }); } }); export default router;