From ad227517151ac1d08d540e1fa45e0b71738c8882 Mon Sep 17 00:00:00 2001
From: EndrII <EndrIIMail@gmail.com>
Date: Sat, 30 Sep 2023 16:03:29 +0200
Subject: [PATCH 1/2] added new macrosess

---
 src/public/config.h      | 10 ++++++++++
 src/public/database.cpp  | 35 ++++++++++++++++++++++++++++++++---
 src/public/database.h    |  8 ++++++++
 src/public/sqldbwriter.h | 15 ++++++++-------
 4 files changed, 58 insertions(+), 10 deletions(-)

diff --git a/src/public/config.h b/src/public/config.h
index ab6b4a2..d292430 100644
--- a/src/public/config.h
+++ b/src/public/config.h
@@ -28,6 +28,16 @@
 #define DEFAULT_DB_INIT_FILE_PATH ":/sql/res/BaseDB.sql" // default database file path
 #define DEFAULT_UPDATE_INTERVAL 3600000 // This is interval of update database cache by default it is 1 hour
 
+// Database settings keys
+#define QH_DB_DRIVER "DBDriver"
+#define QH_DB_FILE_PATH "DBFilePath"
+#define QH_DB_INIT_FILE "DBInitFile"
+#define QH_DB_PASS   "DBPass"
+#define QH_DB_LOGIN "DBLogin"
+#define QH_DB_HOST "DBHost"
+#define QH_DB_PORT "DBPort"
+#define QH_DB_BACKUP_PATH "DBBackUpPath"
+
 // Transport Protockol settings
 #define ROUTE_CACHE_LIMIT 1000          // This is defaut count of routes in the router class obecjt.
 #define TRANSPORT_PACKAGES_CACHE 1000   // This is defaut count of processed packages in the router class obecjt.
diff --git a/src/public/database.cpp b/src/public/database.cpp
index d220d3b..27620cd 100644
--- a/src/public/database.cpp
+++ b/src/public/database.cpp
@@ -173,6 +173,32 @@ QString DataBase::dbLocation() const {
     return "";
 }
 
+QString DataBase::backUp(int version) const {
+    auto&& params = defaultDbParams();
+
+    if (params.value(QH_DB_DRIVER) != "QSQLITE")
+        return {};
+
+    QString&& path = params.value(QH_DB_BACKUP_PATH).toString();
+    if (path.isEmpty()) {
+        return {};
+    }
+
+    auto file = path + "/DBv%0_" + QDateTime::currentDateTimeUtc().toString("hh:mm:ss_dd_MM_yyyy") + ".db";
+    file = file.arg(version);
+    if (db() && db()->writer() &&
+        QFile::exists(db()->writer()->databaseLocation())) {
+
+        QDir().mkpath(path);
+
+        if (!QFile::copy(db()->writer()->databaseLocation(), file)) {
+            return {};
+        }
+    }
+
+    return file;
+}
+
 ISqlDB *DataBase::db() const {
     return _db;
 }
@@ -254,7 +280,9 @@ bool DataBase::upgradeDataBase() {
     return true;
 }
 
-void DataBase::onBeforeDBUpgrade(int , int ) const { }
+void DataBase::onBeforeDBUpgrade(int currentVerion, int ) const {
+    backUp(currentVerion);
+}
 
 const QString &DataBase::localNodeName() const {
     return _localNodeName;
@@ -267,8 +295,9 @@ void DataBase::setLocalNodeName(const QString &newLocalNodeName) {
 QVariantMap DataBase::defaultDbParams() const {
 
     return {
-        {"DBDriver", "QSQLITE"},
-        {"DBFilePath", DEFAULT_DB_PATH + "/" + localNodeName() + "/" + localNodeName() + "_" + DEFAULT_DB_NAME},
+        {QH_DB_DRIVER, "QSQLITE"},
+        {QH_DB_FILE_PATH, DEFAULT_DB_PATH + "/" + localNodeName() + "/" + QCoreApplication::applicationName() + "_" + DEFAULT_DB_NAME},
+        {QH_DB_BACKUP_PATH, DEFAULT_DB_PATH + "/" + localNodeName() + "/BackUp"}
     };
 }
 }
diff --git a/src/public/database.h b/src/public/database.h
index 900bc62..866865e 100644
--- a/src/public/database.h
+++ b/src/public/database.h
@@ -119,6 +119,13 @@ signals:
 
 protected:
 
+    /**
+     * @brief backUp This method make a backup of database.
+     * @param version This is current version of db.
+     * @return path to backupped db.
+     */
+    QString backUp(int version) const;
+
     /**
      * @brief localNodeName This method return local node name.
      * @return local node name
@@ -285,6 +292,7 @@ protected:
      * @see DataBase::addDBPatch
      */
     virtual void onBeforeDBUpgrade(int currentVerion, int tergetVersion) const;
+
 private:
     /**
          * @brief workWithSubscribe This method work with subscribe commnads.
diff --git a/src/public/sqldbwriter.h b/src/public/sqldbwriter.h
index f1af668..b4510b7 100644
--- a/src/public/sqldbwriter.h
+++ b/src/public/sqldbwriter.h
@@ -163,13 +163,14 @@ protected:
      *
      * Support parameters of database:
      *
-     * - DBDriver - This is sql driver of data base for more information see The Qt Documentations https://doc.qt.io/qt-5/sql-driver.html
-     * - DBFilePath - This is path to file of data base (sqlite only). This is phusical location of sqlite database.
-     * - DBInitFile - This is sql file with sql code (structure) with default structure of the database.
-     * - DBPass - This is password of a remote database.
-     * - DBLogin - This is login of a remote database.
-     * - DBHost - This is host address of a remote database.
-     * - DBPort - port of a remote database.
+     * - DBDriver - This is sql driver of data base for more information see The Qt Documentations https://doc.qt.io/qt-5/sql-driver.html (or QH_DB_DRIVER)
+     * - DBFilePath - This is path to file of data base (sqlite only). This is phusical location of sqlite database. Or (QH_DB_FILE_PATH)
+     * - DBInitFile - This is sql file with sql code (structure) with default structure of the database. Or (QH_DB_INIT_FILE)
+     * - DBPass - This is password of a remote database. Or (QH_DB_PASS)
+     * - DBLogin - This is login of a remote database. Or (QH_DB_LOGIN)
+     * - DBHost - This is host address of a remote database. Or (QH_DB_HOST)
+     * - DBPort - port of a remote database. or (QH_DB_PORT)
+     * - DBBackUpPath - path of database backups (sqlite only). Or (QH_DB_BACKUP_PATH)
 
      */
     virtual QVariantMap defaultInitPararm() const;

From 687d4adacbf98c327c3b4887bfefa28887eb55b4 Mon Sep 17 00:00:00 2001
From: EndrII <EndrIIMail@gmail.com>
Date: Sun, 1 Oct 2023 12:46:30 +0200
Subject: [PATCH 2/2] update quasarapplib

---
 submodules/QuasarAppLib | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/submodules/QuasarAppLib b/submodules/QuasarAppLib
index 53a6770..90a4284 160000
--- a/submodules/QuasarAppLib
+++ b/submodules/QuasarAppLib
@@ -1 +1 @@
-Subproject commit 53a67709ff90b544036cb90edbfe8cb1ded6dc0b
+Subproject commit 90a4284c56856f0cbdb1a7af151d575a468c59eb