/** * Copyright (c) 2024-2026 Тарабанов Александр Викторович * All rights reserved. * * This software is proprietary and confidential. * Unauthorized copying, modification, or distribution is prohibited. * * For licensing inquiries: info@hb3-accelerator.com * Website: https://hb3-accelerator.com * GitHub: https://github.com/VC-HB3-Accelerator */ 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 }) { try { const data = { id: 1, db_host, db_port, db_name, db_user, db_password, updated_at: new Date() }; // Пытаемся обновить существующую запись 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; } } /** * Получить статус шифрования */ 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();