ваше сообщение коммита
This commit is contained in:
@@ -11,30 +11,83 @@
|
||||
*/
|
||||
|
||||
const encryptedDb = require('./encryptedDatabaseService');
|
||||
const logger = require('../utils/logger');
|
||||
|
||||
class DbSettingsService {
|
||||
constructor() {
|
||||
this.connectionManager = null;
|
||||
this.initialized = false;
|
||||
}
|
||||
|
||||
/**
|
||||
* Инициализация сервиса
|
||||
*/
|
||||
async initialize() {
|
||||
if (this.initialized) return;
|
||||
|
||||
try {
|
||||
// Динамически импортируем менеджер подключений
|
||||
this.connectionManager = require('./databaseConnectionManager');
|
||||
await this.connectionManager.initialize();
|
||||
this.initialized = true;
|
||||
logger.info('[DbSettingsService] Сервис инициализирован');
|
||||
} catch (error) {
|
||||
logger.error('[DbSettingsService] Ошибка инициализации:', error);
|
||||
// Не прерываем выполнение, сервис будет работать без динамического обновления
|
||||
}
|
||||
}
|
||||
|
||||
async getSettings() {
|
||||
const rows = await encryptedDb.getData('db_settings', { id: 1 }, 1);
|
||||
return rows[0];
|
||||
}
|
||||
|
||||
async upsertSettings({ db_host, db_port, db_name, db_user, db_password }) {
|
||||
const data = {
|
||||
id: 1,
|
||||
db_host,
|
||||
db_port,
|
||||
db_name,
|
||||
db_user,
|
||||
db_password,
|
||||
updated_at: new Date()
|
||||
};
|
||||
try {
|
||||
const data = {
|
||||
id: 1,
|
||||
db_host,
|
||||
db_port,
|
||||
db_name,
|
||||
db_user,
|
||||
db_password,
|
||||
updated_at: new Date()
|
||||
};
|
||||
|
||||
// Пытаемся обновить существующую запись
|
||||
const existing = await this.getSettings();
|
||||
if (existing) {
|
||||
return await encryptedDb.saveData('db_settings', data, { id: 1 });
|
||||
} else {
|
||||
return await encryptedDb.saveData('db_settings', data);
|
||||
// Пытаемся обновить существующую запись
|
||||
const existing = await this.getSettings();
|
||||
let result;
|
||||
|
||||
if (existing) {
|
||||
result = await encryptedDb.saveData('db_settings', data, { id: 1 });
|
||||
} else {
|
||||
result = await encryptedDb.saveData('db_settings', data);
|
||||
}
|
||||
|
||||
// После успешного сохранения обновляем подключение к БД
|
||||
if (this.connectionManager && this.initialized) {
|
||||
try {
|
||||
await this.connectionManager.updateConnection({
|
||||
db_host,
|
||||
db_port,
|
||||
db_name,
|
||||
db_user,
|
||||
db_password
|
||||
});
|
||||
|
||||
logger.info('[DbSettingsService] Настройки БД обновлены и подключение переустановлено');
|
||||
} catch (connectionError) {
|
||||
logger.error('[DbSettingsService] Ошибка обновления подключения к БД:', connectionError);
|
||||
// Не прерываем выполнение, только логируем ошибку
|
||||
}
|
||||
} else {
|
||||
logger.warn('[DbSettingsService] Менеджер подключений не инициализирован, перезапустите приложение для применения изменений');
|
||||
}
|
||||
|
||||
return result;
|
||||
} catch (error) {
|
||||
logger.error('[DbSettingsService] Ошибка сохранения настроек БД:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -44,6 +97,42 @@ class DbSettingsService {
|
||||
getEncryptionStatus() {
|
||||
return encryptedDb.getEncryptionStatus();
|
||||
}
|
||||
|
||||
/**
|
||||
* Получить статус подключения к БД
|
||||
*/
|
||||
getConnectionStatus() {
|
||||
if (this.connectionManager && this.initialized) {
|
||||
return this.connectionManager.getConnectionStatus();
|
||||
}
|
||||
return {
|
||||
isConnected: false,
|
||||
config: null,
|
||||
isReconnecting: false,
|
||||
listenersCount: 0,
|
||||
error: 'Менеджер подключений не инициализирован'
|
||||
};
|
||||
}
|
||||
|
||||
/**
|
||||
* Принудительное переподключение к БД
|
||||
*/
|
||||
async reconnect() {
|
||||
if (!this.connectionManager || !this.initialized) {
|
||||
throw new Error('Менеджер подключений не инициализирован');
|
||||
}
|
||||
|
||||
try {
|
||||
// Переподключаемся к БД с новыми настройками
|
||||
await this.connectionManager.reconnect();
|
||||
|
||||
// logger.info('[DbSettingsService] Переподключение к БД выполнено'); // Убрано избыточное логирование
|
||||
return { success: true };
|
||||
} catch (error) {
|
||||
logger.error('[DbSettingsService] Ошибка переподключения к БД:', error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
module.exports = new DbSettingsService();
|
||||
Reference in New Issue
Block a user