123 lines
4.0 KiB
JavaScript
123 lines
4.0 KiB
JavaScript
|
|
const db = require('../config/db');
|
||
|
|
|
||
|
|
// Insertar nuevo anime
|
||
|
|
const insertAnime = async (req, res) => {
|
||
|
|
const {userId, title, score, progress, status, type, imageUrl, totalEpisodes} = req.body;
|
||
|
|
|
||
|
|
if (!userId || !title || !status || !type || !imageUrl) {
|
||
|
|
return res.status(400).json({error: 'Faltan campos obligatorios'});
|
||
|
|
}
|
||
|
|
|
||
|
|
try {
|
||
|
|
// Verificar si ya existe
|
||
|
|
const [existing] = await db.execute(
|
||
|
|
'SELECT id FROM anime WHERE userId = ? AND title = ?',
|
||
|
|
[userId, title]
|
||
|
|
);
|
||
|
|
|
||
|
|
if (existing.length > 0) {
|
||
|
|
return res.status(409).json({error: 'Este anime ya está en tu lista'});
|
||
|
|
}
|
||
|
|
|
||
|
|
await db.execute(
|
||
|
|
'INSERT INTO anime (userId, title, score, progress, status, type, imageUrl, totalEpisodes) VALUES (?, ?, ?, ?, ?, ?, ?, ?)',
|
||
|
|
[userId, title, score || 0, progress || 0, status, type, imageUrl, totalEpisodes || 12]
|
||
|
|
);
|
||
|
|
|
||
|
|
res.status(200).json({message: 'Anime añadido correctamente'});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Error insertando anime:', error);
|
||
|
|
res.status(500).json({error: 'Error al insertar anime'});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
// Obtener animes de un usuario (lista completa o paginada)
|
||
|
|
const getAnimesByUser = async (req, res) => {
|
||
|
|
const {userId} = req.params;
|
||
|
|
const page = parseInt(req.query.page);
|
||
|
|
const size = parseInt(req.query.size);
|
||
|
|
|
||
|
|
try {
|
||
|
|
if (!isNaN(page) && !isNaN(size)) {
|
||
|
|
const offset = (page - 1) * size;
|
||
|
|
const [[{total}]] = await db.execute('SELECT COUNT(*) AS total FROM anime WHERE userId = ?', [userId]);
|
||
|
|
const [rows] = await db.execute('SELECT * FROM anime WHERE userId = ? LIMIT ? OFFSET ?', [userId, size, offset]);
|
||
|
|
|
||
|
|
return res.json({
|
||
|
|
data: rows,
|
||
|
|
total,
|
||
|
|
page,
|
||
|
|
hasNextPage: offset + rows.length < total
|
||
|
|
});
|
||
|
|
} else {
|
||
|
|
const [rows] = await db.execute('SELECT * FROM anime WHERE userId = ?', [userId]);
|
||
|
|
return res.json(rows);
|
||
|
|
}
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Error obteniendo animes:', error);
|
||
|
|
res.status(500).json({error: 'Error al obtener animes'});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const deleteAnime = async (req, res) => {
|
||
|
|
const {id} = req.params;
|
||
|
|
try {
|
||
|
|
await db.execute('DELETE FROM anime WHERE id = ?', [id]);
|
||
|
|
res.status(200).json({message: 'Anime eliminado correctamente'});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Error eliminando anime:', error);
|
||
|
|
res.status(500).json({error: 'Error al eliminar anime'});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const updateAnime = async (req, res) => {
|
||
|
|
const {id} = req.params;
|
||
|
|
const {title, score, progress, status, type, imageUrl, totalEpisodes} = req.body;
|
||
|
|
|
||
|
|
try {
|
||
|
|
await db.execute(
|
||
|
|
'UPDATE anime SET title = ?, score = ?, progress = ?, status = ?, type = ?, imageUrl = ?, totalEpisodes = ? WHERE id = ?',
|
||
|
|
[title, score, progress, status, type, imageUrl, totalEpisodes || 12, id]
|
||
|
|
);
|
||
|
|
res.status(200).json({message: 'Anime actualizado correctamente'});
|
||
|
|
} catch (error) {
|
||
|
|
console.error('Error actualizando anime:', error);
|
||
|
|
res.status(500).json({error: 'Error al actualizar anime'});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const getAnimesByUserAndStatus = async (req, res) => {
|
||
|
|
const {userId, status} = req.params;
|
||
|
|
try {
|
||
|
|
const [rows] = await db.execute(
|
||
|
|
'SELECT * FROM anime WHERE userId = ? AND status = ? ORDER BY id DESC',
|
||
|
|
[userId, status]
|
||
|
|
);
|
||
|
|
res.json(rows);
|
||
|
|
} catch (err) {
|
||
|
|
res.status(500).json({error: 'Error al obtener animes'});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
const getAiringAnime = async (req, res) => {
|
||
|
|
try {
|
||
|
|
const [rows] = await db.execute(
|
||
|
|
'SELECT * FROM anime WHERE status = "airing" ORDER BY id DESC LIMIT 20'
|
||
|
|
);
|
||
|
|
res.json(rows);
|
||
|
|
} catch (err) {
|
||
|
|
res.status(500).json({error: 'Error al obtener airing'});
|
||
|
|
}
|
||
|
|
};
|
||
|
|
|
||
|
|
|
||
|
|
module.exports = {
|
||
|
|
insertAnime,
|
||
|
|
getAnimesByUser,
|
||
|
|
deleteAnime,
|
||
|
|
updateAnime,
|
||
|
|
getAnimesByUserAndStatus,
|
||
|
|
getAiringAnime
|
||
|
|
};
|