From 3e541415bf3d7b9d4dee97392c54fa2c483c3448 Mon Sep 17 00:00:00 2001 From: Dr Amr Osman Date: Wed, 1 Jan 2025 19:30:23 +0200 Subject: [PATCH] improve databasehandler --- .../databasecontroller/databasecontroller.hpp | 24 +++++++++---------- src/database/connectionhandler.cpp | 21 ---------------- src/database/connectionhandler.hpp | 22 ----------------- src/database/databasehandler.cpp | 19 +++++++++++++++ src/database/databasehandler.hpp | 21 ++++++++++++++++ src/database/watchdog.cpp | 17 ++++++------- 6 files changed, 61 insertions(+), 63 deletions(-) delete mode 100644 src/database/connectionhandler.cpp delete mode 100644 src/database/connectionhandler.hpp create mode 100644 src/database/databasehandler.cpp create mode 100644 src/database/databasehandler.hpp diff --git a/src/controllers/databasecontroller/databasecontroller.hpp b/src/controllers/databasecontroller/databasecontroller.hpp index e4044cc..97abcf2 100644 --- a/src/controllers/databasecontroller/databasecontroller.hpp +++ b/src/controllers/databasecontroller/databasecontroller.hpp @@ -12,8 +12,8 @@ #include #include -#include "database/connectionhandler.hpp" #include "database/databaseconnectionpool.hpp" +#include "database/databasehandler.hpp" #include "utils/global/types.hpp" #include "utils/message/message.hpp" class Case; @@ -49,17 +49,23 @@ class DatabaseController template std::optional executer(const Func &func, Args &&...args) { - std::optional results; - ConnectionHanndler con_handler(databaseConnectionPool); - try { - if (con_handler.get_connection() == nullptr) + std::unique_ptr connectionHanndler = std::make_unique(); + + if (connectionHanndler->get_connection() == nullptr) { return std::nullopt; } - results = std::invoke(func, con_handler.get_connection(), std::forward(args)...); + std::optional results = std::invoke(func, connectionHanndler->get_connection().get(), std::forward(args)...); + + if (results.has_value()) + { + return results; + } + + return std::nullopt; } catch (const std::exception &e) { @@ -71,11 +77,5 @@ class DatabaseController Message::CriticalMessage("Unknown exception occurred during query execution."); return std::nullopt; } - - if (results.has_value()) - { - return results; - } - return std::nullopt; } }; diff --git a/src/database/connectionhandler.cpp b/src/database/connectionhandler.cpp deleted file mode 100644 index 32b0d50..0000000 --- a/src/database/connectionhandler.cpp +++ /dev/null @@ -1,21 +0,0 @@ -#include "database/connectionhandler.hpp" - -#include -#include - -#include "database/databaseconnectionpool.hpp" - -ConnectionHanndler::ConnectionHanndler(std::shared_ptr &dbPool) : databaseConnectionPool(dbPool) -{ - db_ptr = databaseConnectionPool->get_connection(); -} - -ConnectionHanndler::~ConnectionHanndler() -{ - if (db_ptr != nullptr) - { - databaseConnectionPool->return_connection(std::move(db_ptr)); - } -} - -std::shared_ptr ConnectionHanndler::get_connection() { return databaseConnectionPool->get_connection(); } diff --git a/src/database/connectionhandler.hpp b/src/database/connectionhandler.hpp deleted file mode 100644 index 1844dec..0000000 --- a/src/database/connectionhandler.hpp +++ /dev/null @@ -1,22 +0,0 @@ -#pragma once - -#include - -#include "database/databaseconnectionpool.hpp" -class ConnectionHanndler -{ - public: - explicit ConnectionHanndler(std::shared_ptr &dbPool); - ConnectionHanndler() = delete; - ConnectionHanndler(const ConnectionHanndler &) = default; - ConnectionHanndler(ConnectionHanndler &&) = delete; - ConnectionHanndler &operator=(const ConnectionHanndler &) = default; - ConnectionHanndler &operator=(ConnectionHanndler &&) = delete; - virtual ~ConnectionHanndler(); - - std::shared_ptr get_connection(); - - private: - std::shared_ptr databaseConnectionPool; - std::shared_ptr db_ptr; -}; \ No newline at end of file diff --git a/src/database/databasehandler.cpp b/src/database/databasehandler.cpp new file mode 100644 index 0000000..bd43c48 --- /dev/null +++ b/src/database/databasehandler.cpp @@ -0,0 +1,19 @@ +#include "database/databasehandler.hpp" + +#include +#include + +#include "database/databaseconnectionpool.hpp" +#include "store/store.hpp" + +DatabaseHanndler::DatabaseHanndler() : databaseConnectionPool(Store::getObject()) { db_ptr = databaseConnectionPool->get_connection(); } + +DatabaseHanndler::~DatabaseHanndler() +{ + if (db_ptr != nullptr) + { + databaseConnectionPool->return_connection(std::move(db_ptr)); + } +} + +std::shared_ptr DatabaseHanndler::get_connection() { return db_ptr; } diff --git a/src/database/databasehandler.hpp b/src/database/databasehandler.hpp new file mode 100644 index 0000000..493d104 --- /dev/null +++ b/src/database/databasehandler.hpp @@ -0,0 +1,21 @@ +#pragma once + +#include + +#include "database/databaseconnectionpool.hpp" +class DatabaseHanndler +{ + public: + DatabaseHanndler(); + DatabaseHanndler(const DatabaseHanndler &) = default; + DatabaseHanndler(DatabaseHanndler &&) = delete; + DatabaseHanndler &operator=(const DatabaseHanndler &) = default; + DatabaseHanndler &operator=(DatabaseHanndler &&) = delete; + virtual ~DatabaseHanndler(); + + std::shared_ptr get_connection(); + + private: + std::shared_ptr databaseConnectionPool; + std::shared_ptr db_ptr; +}; \ No newline at end of file diff --git a/src/database/watchdog.cpp b/src/database/watchdog.cpp index 4ecba39..7746712 100644 --- a/src/database/watchdog.cpp +++ b/src/database/watchdog.cpp @@ -7,10 +7,10 @@ #include #include #include -#include #include "database/database.hpp" #include "database/databaseconnectionpool.hpp" +#include "database/databasehandler.hpp" #include "store/store.hpp" #include "utils/message/message.hpp" @@ -29,24 +29,26 @@ WatchDog::WatchDog() : databaseConnectionPool(Store::getObject db_ptr = databaseConnectionPool->get_connection(); + std::unique_ptr connectionHanndler = std::make_unique(); - if (db_ptr == nullptr) + if (connectionHanndler->get_connection() == nullptr) { Message::WarningMessage("WatchDog could not acquire a database connection within timeout."); std::this_thread::sleep_for(check_interval); continue; } - if (!db_ptr->check_connection()) + if (!connectionHanndler->get_connection()->check_connection()) { Message::WarningMessage("Database connection lost. Attempting to reconnect..."); - Message::CriticalMessage(fmt::format("Database connection {} link is lost.", static_cast(db_ptr.get()))); + Message::CriticalMessage( + fmt::format("Database connection {} link is lost.", static_cast(connectionHanndler->get_connection().get()))); try { - if (db_ptr->reconnect()) + if (connectionHanndler->get_connection()->reconnect()) { - Message::InfoMessage(fmt::format("Database connection id: {} link is re-established", static_cast(db_ptr.get()))); + Message::InfoMessage(fmt::format( + "Database connection id: {} link is re-established", static_cast(connectionHanndler->get_connection().get()))); databaseConnectionPool->reconnect_all(); } else @@ -60,7 +62,6 @@ WatchDog::WatchDog() : databaseConnectionPool(Store::getObjectreturn_connection(std::move(db_ptr)); std::this_thread::sleep_for(check_interval); } catch (const std::exception &e)