managerr/backend/controllers/settingsController.js
2025-07-21 15:43:20 +02:00

112 lines
3.5 KiB
JavaScript

const Settings = require('../models/Settings');
const axios = require('axios');
// Récupérer les paramètres de l'utilisateur connecté
exports.getSettings = async (req, res) => {
try {
// Rechercher les paramètres pour l'utilisateur connecté
const settings = await Settings.findOne({ user: req.user.id });
if (!settings) {
return res.status(404).json({ message: "Aucun paramètre trouvé pour cet utilisateur" });
}
// Ne pas envoyer l'ID de l'utilisateur ni l'ID du document dans la réponse
const { sonarr, radarr } = settings;
res.json({ sonarr, radarr });
} catch (error) {
console.error('Erreur lors de la récupération des paramètres:', error);
res.status(500).json({ message: 'Erreur serveur' });
}
};
// Sauvegarder ou mettre à jour les paramètres
exports.saveSettings = async (req, res) => {
try {
const { sonarr, radarr } = req.body;
// Validation des entrées
if (!sonarr || !radarr) {
return res.status(400).json({ message: 'Les configurations Sonarr et Radarr sont requises' });
}
if (!sonarr.url || !sonarr.apiKey || !radarr.url || !radarr.apiKey) {
return res.status(400).json({ message: 'Tous les champs sont requis' });
}
// Vérifier si l'utilisateur a déjà des paramètres
let settings = await Settings.findOne({ user: req.user.id });
if (settings) {
// Mettre à jour les paramètres existants
settings.sonarr = sonarr;
settings.radarr = radarr;
settings.updatedAt = Date.now();
} else {
// Créer de nouveaux paramètres
settings = new Settings({
user: req.user.id,
sonarr,
radarr
});
}
await settings.save();
res.json({ message: 'Paramètres enregistrés avec succès' });
} catch (error) {
console.error('Erreur lors de l\'enregistrement des paramètres:', error);
res.status(500).json({ message: 'Erreur serveur' });
}
};
// Tester la connexion à une API (Sonarr ou Radarr)
exports.testConnection = async (req, res) => {
try {
const { type, url, apiKey } = req.body;
// Validation des entrées
if (!type || !url || !apiKey) {
return res.status(400).json({ message: 'Type, URL et clé API sont requis' });
}
if (type !== 'sonarr' && type !== 'radarr') {
return res.status(400).json({ message: 'Type invalide. Doit être "sonarr" ou "radarr"' });
}
// Tentative de connexion à l'API
try {
// Utiliser le endpoint /system/status qui est disponible à la fois sur Sonarr et Radarr
const response = await axios.get(`${url}/system/status`, {
headers: {
'X-Api-Key': apiKey
},
timeout: 5000 // Timeout de 5 secondes
});
if (response.status === 200) {
res.json({
success: true,
message: 'Connexion établie avec succès',
details: {
version: response.data.version,
appName: response.data.appName
}
});
} else {
res.status(400).json({ success: false, message: 'Échec de la connexion' });
}
} catch (apiError) {
console.error(`Erreur lors du test de l'API ${type}:`, apiError);
res.status(400).json({
success: false,
message: 'Échec de la connexion',
error: apiError.message
});
}
} catch (error) {
console.error('Erreur lors du test de connexion:', error);
res.status(500).json({ message: 'Erreur serveur' });
}
};