feat: Enhance error handling and validation in FilterManager for server configuration saving and generation processes
Publish Fast Tabler Docker image / build-and-push-fast (push) Successful in 6m3s

This commit is contained in:
2025-07-14 11:26:05 +07:00
parent 022c8dddc5
commit 71ab7b24d3
+31 -5
View File
@@ -137,13 +137,24 @@ function FilterManager() {
const handleSaveServerConfig = async (serverId) => { const handleSaveServerConfig = async (serverId) => {
try { try {
const config = await generateMikrotikConfig(); const config = await generateMikrotikConfig();
// Проверяем, что конфигурация не пустая
if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') {
setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.');
return;
}
await axios.post(`${API_URL}/server-configs/${serverId}`, { config }); await axios.post(`${API_URL}/server-configs/${serverId}`, { config });
setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`); setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`);
setTimeout(() => setSuccess(''), 3000); setTimeout(() => setSuccess(''), 3000);
} catch (error) { } catch (error) {
console.error('Error saving server config:', error); console.error('Error saving server config:', error);
setError('Не удалось сохранить конфигурацию сервера.'); if (error.response?.data) {
setError(`Ошибка сохранения: ${error.response.data}`);
} else {
setError('Не удалось сохранить конфигурацию сервера.');
}
} }
}; };
@@ -225,7 +236,11 @@ function FilterManager() {
}, 8000); }, 8000);
} catch (error) { } catch (error) {
console.error('Error copying config to all servers:', error); console.error('Error copying config to all servers:', error);
setError('Не удалось скопировать конфигурацию на серверы.'); if (error.response?.data) {
setError(`Ошибка копирования: ${error.response.data}`);
} else {
setError('Не удалось скопировать конфигурацию на серверы.');
}
} finally { } finally {
setLoading(false); setLoading(false);
} }
@@ -380,9 +395,18 @@ function FilterManager() {
const response = await axios.post(`${API_URL}/server-filters/generate-config`, { const response = await axios.post(`${API_URL}/server-filters/generate-config`, {
filters: serverFilters filters: serverFilters
}); });
return response.data.config;
if (response.data && response.data.config) {
return response.data.config;
} else {
console.error('Invalid response format:', response.data);
return '// Ошибка: неверный формат ответа от сервера';
}
} catch (error) { } catch (error) {
console.error('Error generating config:', error); console.error('Error generating config:', error);
if (error.response?.data) {
return `// Ошибка при генерации конфигурации: ${error.response.data}`;
}
return '// Ошибка при генерации конфигурации'; return '// Ошибка при генерации конфигурации';
} }
}; };
@@ -473,7 +497,8 @@ function FilterManager() {
<button <button
className="btn btn-outline-success" className="btn btn-outline-success"
onClick={() => handleSaveServerConfig(selectedServer.id)} onClick={() => handleSaveServerConfig(selectedServer.id)}
disabled={loading} disabled={loading || serverFilters.length === 0}
title={serverFilters.length === 0 ? "Сначала добавьте фильтры" : "Сохранить конфигурацию"}
> >
<IconDeviceFloppy className="me-2" /> <IconDeviceFloppy className="me-2" />
Сохранить конфигурацию Сохранить конфигурацию
@@ -630,7 +655,8 @@ function FilterManager() {
<button <button
className="btn btn-outline-success btn-sm me-2" className="btn btn-outline-success btn-sm me-2"
onClick={() => handleSaveServerConfig(selectedServer.id)} onClick={() => handleSaveServerConfig(selectedServer.id)}
disabled={loading} disabled={loading || serverFilters.length === 0}
title={serverFilters.length === 0 ? "Сначала добавьте фильтры" : "Сохранить конфигурацию"}
> >
<IconDeviceFloppy className="me-2" /> <IconDeviceFloppy className="me-2" />
Сохранить конфигурацию Сохранить конфигурацию