#pragma once #include #include #include #include #include #include class DatabaseManager { public: static DatabaseManager& instance(); QSqlDatabase database(); void initSchema(); void cleanupOldData(int days = 5); void closeConnection(); // Путь к файлу БД из config.ini (с раскрытием ~). Единая точка вычисления. static QString dbFilePath(); // Удалить файл БД вместе с WAL/SHM-сайдкарами и sentinel-файлом. static void wipeDatabaseFiles(); // Создать sentinel .wipe — отложенное удаление БД при следующем старте. static void writeWipeSentinel(); // Флаг «удалить БД при выходе», выставляется из GUI-потока. void setWipeOnExit(bool wipe) { m_wipeOnExit.store(wipe); } bool wipeOnExit() const { return m_wipeOnExit.load(); } private: DatabaseManager(); ~DatabaseManager(); static QString connectionName(); QRecursiveMutex mutex; QSet activeConnections; QMap connectionPool; std::atomic m_wipeOnExit{false}; };