148 lines
4.7 KiB
JavaScript
148 lines
4.7 KiB
JavaScript
const db = require('../config/db');
|
|
|
|
// POST: Registrar una nueva actividad
|
|
exports.addActivity = async (req, res) => {
|
|
const {userId, action, mediaTitle, imageUrl} = req.body;
|
|
|
|
if (!userId || !action || !mediaTitle) {
|
|
return res.status(400).json({error: 'Faltan datos requeridos'});
|
|
}
|
|
|
|
try {
|
|
await db.execute(
|
|
'INSERT INTO activity_log (userId, action, mediaTitle, imageUrl, timestamp) VALUES (?, ?, ?, ?, NOW())',
|
|
[userId, action, mediaTitle, imageUrl || null]
|
|
);
|
|
res.status(200).json({message: 'Actividad registrada correctamente'});
|
|
} catch (err) {
|
|
console.error('❌ Error al insertar actividad:', err);
|
|
res.status(500).json({error: 'Error al guardar la actividad'});
|
|
}
|
|
};
|
|
|
|
exports.getActivitiesByUser = async (req, res) => {
|
|
const {userId} = req.params;
|
|
|
|
try {
|
|
const [rows] = await db.execute(
|
|
`SELECT a.id, a.userId, u.username, a.action, a.mediaTitle, a.imageUrl, a.timestamp
|
|
FROM activity_log a
|
|
JOIN users u ON a.userId = u.id
|
|
WHERE a.userId = ?
|
|
ORDER BY a.timestamp DESC LIMIT 20`,
|
|
[userId]
|
|
);
|
|
|
|
res.status(200).json(rows);
|
|
} catch (err) {
|
|
console.error('❌ Error al obtener actividad:', err);
|
|
res.status(500).json({error: 'Error al obtener historial de actividad'});
|
|
}
|
|
};
|
|
|
|
|
|
// GET: Obtener comentarios de una actividad
|
|
exports.getCommentsByActivity = async (req, res) => {
|
|
const {activityId} = req.params;
|
|
|
|
try {
|
|
const [rows] = await db.execute(
|
|
`SELECT c.text, u.username, u.avatarUrl, c.created_at
|
|
FROM comments c
|
|
JOIN users u ON c.user_id = u.id
|
|
WHERE c.activity_id = ?
|
|
ORDER BY c.created_at DESC`,
|
|
[activityId]
|
|
);
|
|
|
|
res.status(200).json(rows);
|
|
} catch (error) {
|
|
console.error('❌ Error al obtener comentarios:', error);
|
|
res.status(500).json({error: 'Error al obtener comentarios'});
|
|
}
|
|
};
|
|
|
|
exports.postComment = async (req, res) => {
|
|
const {userId, activityId, text} = req.body;
|
|
|
|
try {
|
|
await db.execute(
|
|
'INSERT INTO comments (user_id, activity_id, text, created_at) VALUES (?, ?, ?, NOW())',
|
|
[userId, activityId, text]
|
|
);
|
|
res.status(200).json({message: 'Comentario guardado'});
|
|
} catch (error) {
|
|
console.error('❌ Error al guardar comentario:', error);
|
|
if (error.code === 'ER_NO_REFERENCED_ROW_2') {
|
|
res.status(400).json({error: 'El usuario no existe en la base de datos'});
|
|
} else {
|
|
res.status(500).json({error: 'Error al guardar comentario'});
|
|
}
|
|
}
|
|
};
|
|
|
|
// POST: Dar like a una actividad
|
|
exports.postLike = async (req, res) => {
|
|
const {userId, activityId} = req.body;
|
|
if (!userId || !activityId) {
|
|
return res.status(400).json({error: 'Faltan datos requeridos'});
|
|
}
|
|
|
|
try {
|
|
const [existing] = await db.execute(
|
|
'SELECT id FROM likes WHERE user_id = ? AND activity_id = ?',
|
|
[userId, activityId]
|
|
);
|
|
|
|
if (existing.length > 0) {
|
|
return res.status(409).json({message: 'Ya diste like'});
|
|
}
|
|
|
|
await db.execute(
|
|
'INSERT INTO likes (user_id, activity_id, created_at) VALUES (?, ?, NOW())',
|
|
[userId, activityId]
|
|
);
|
|
|
|
res.status(200).json({message: 'Like registrado'});
|
|
} catch (error) {
|
|
console.error('❌ Error al registrar like:', error);
|
|
res.status(500).json({error: 'Error al registrar like'});
|
|
}
|
|
};
|
|
|
|
// GET: Verificar si el usuario ya dio like
|
|
exports.checkLike = async (req, res) => {
|
|
const {userId, activityId} = req.params;
|
|
try {
|
|
const [rows] = await db.execute(
|
|
'SELECT id FROM likes WHERE user_id = ? AND activity_id = ?',
|
|
[userId, activityId]
|
|
);
|
|
res.json({liked: rows.length > 0});
|
|
} catch (err) {
|
|
console.error("Error al verificar like:", err);
|
|
res.status(500).json({error: "Error al verificar like"});
|
|
}
|
|
};
|
|
|
|
// DELETE: Eliminar un like
|
|
exports.removeLike = async (req, res) => {
|
|
const { userId, activityId } = req.body;
|
|
|
|
if (userId === undefined || activityId === undefined) {
|
|
return res.status(400).json({ error: 'Faltan userId o activityId' });
|
|
}
|
|
|
|
try {
|
|
await db.execute(
|
|
'DELETE FROM likes WHERE user_id = ? AND activity_id = ?',
|
|
[userId, activityId]
|
|
);
|
|
res.status(200).json({ message: "Like eliminado" });
|
|
} catch (err) {
|
|
console.error("Error al eliminar like:", err);
|
|
res.status(500).json({ error: "Error al eliminar like" });
|
|
}
|
|
};
|
|
|