import express from 'express'; import { getFavorites, getRedisClient } from '../services/redis.js'; import { basicAuthMiddleware } from '../middlewares/auth.js'; import { broadcast } from '../services/websocket.js'; const router = express.Router(); // Obtener favoritos router.get('/', async (req, res) => { try { const favorites = await getFavorites(); 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 redisClient = getRedisClient(); if (!redisClient) { return res.status(500).json({ error: 'Redis no está disponible' }); } const { platform, id } = req.body; if (!platform || !id) { return res.status(400).json({ error: 'platform e id son requeridos' }); } const key = `notified:${platform}:${id}`; const value = await redisClient.get(key); if (!value) { return res.status(404).json({ error: 'Artículo no encontrado' }); } try { const articleData = JSON.parse(value); articleData.is_favorite = true; // Mantener el TTL existente const ttl = await redisClient.ttl(key); if (ttl > 0) { await redisClient.setex(key, ttl, JSON.stringify(articleData)); } else { await redisClient.set(key, JSON.stringify(articleData)); } const favorites = await getFavorites(); broadcast({ type: 'favorites_updated', data: favorites }); res.json({ success: true, favorites }); } catch (e) { res.status(500).json({ error: 'Error procesando artículo' }); } } catch (error) { res.status(500).json({ error: error.message }); } }); // Eliminar favorito (requiere autenticación) router.delete('/:platform/:id', basicAuthMiddleware, async (req, res) => { try { const redisClient = getRedisClient(); if (!redisClient) { return res.status(500).json({ error: 'Redis no está disponible' }); } const { platform, id } = req.params; const key = `notified:${platform}:${id}`; const value = await redisClient.get(key); if (!value) { return res.status(404).json({ error: 'Artículo no encontrado' }); } try { const articleData = JSON.parse(value); articleData.is_favorite = false; // Mantener el TTL existente const ttl = await redisClient.ttl(key); if (ttl > 0) { await redisClient.setex(key, ttl, JSON.stringify(articleData)); } else { await redisClient.set(key, JSON.stringify(articleData)); } const favorites = await getFavorites(); broadcast({ type: 'favorites_updated', data: favorites }); res.json({ success: true, favorites }); } catch (e) { res.status(500).json({ error: 'Error procesando artículo' }); } } catch (error) { res.status(500).json({ error: error.message }); } }); export default router;