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) => {
try {
const config = await generateMikrotikConfig();
// Проверяем, что конфигурация не пустая
if (!config || config === '// Сначала выберите сервер' || config === '// Нет фильтров для генерации конфигурации') {
setError('Нет данных для сохранения конфигурации. Убедитесь, что выбран сервер и есть фильтры.');
return;
}
await axios.post(`${API_URL}/server-configs/${serverId}`, { config });
setSuccess(`Конфигурация для сервера "${servers.find(s => s.id === serverId)?.name}" сохранена!`);
setTimeout(() => setSuccess(''), 3000);
} catch (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);
} catch (error) {
console.error('Error copying config to all servers:', error);
setError('Не удалось скопировать конфигурацию на серверы.');
if (error.response?.data) {
setError(`Ошибка копирования: ${error.response.data}`);
} else {
setError('Не удалось скопировать конфигурацию на серверы.');
}
} finally {
setLoading(false);
}
@@ -380,9 +395,18 @@ function FilterManager() {
const response = await axios.post(`${API_URL}/server-filters/generate-config`, {
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) {
console.error('Error generating config:', error);
if (error.response?.data) {
return `// Ошибка при генерации конфигурации: ${error.response.data}`;
}
return '// Ошибка при генерации конфигурации';
}
};
@@ -473,7 +497,8 @@ function FilterManager() {
<button
className="btn btn-outline-success"
onClick={() => handleSaveServerConfig(selectedServer.id)}
disabled={loading}
disabled={loading || serverFilters.length === 0}
title={serverFilters.length === 0 ? "Сначала добавьте фильтры" : "Сохранить конфигурацию"}
>
<IconDeviceFloppy className="me-2" />
Сохранить конфигурацию
@@ -630,7 +655,8 @@ function FilterManager() {
<button
className="btn btn-outline-success btn-sm me-2"
onClick={() => handleSaveServerConfig(selectedServer.id)}
disabled={loading}
disabled={loading || serverFilters.length === 0}
title={serverFilters.length === 0 ? "Сначала добавьте фильтры" : "Сохранить конфигурацию"}
>
<IconDeviceFloppy className="me-2" />
Сохранить конфигурацию