diff --git a/src/app/main.cpp b/src/app/main.cpp index 3a95aa2..9c3aeda 100644 --- a/src/app/main.cpp +++ b/src/app/main.cpp @@ -16,6 +16,12 @@ int main(int argc, char *argv[]) parser.addOption(dryModeOption); parser.process(app); SyncManager api(parser.isSet(dryModeOption)); + if (!api.isValid()) + return 1; + QObject::connect(&api, &SyncManager::error, [](){ + qDebug() << "error"; + QCoreApplication::exit(1); + }); api.loadDataFromDB(); api.loadDataFromColnod(); QObject::connect(&api, &SyncManager::dataDownloaded, [&](){ @@ -26,9 +32,5 @@ int main(int argc, char *argv[]) api.syncDataFromColnodToDB(); api.syncDataFromDBToColnod(); }); - QObject::connect(&api, &SyncManager::error, [](){ - qDebug() << "error"; - QCoreApplication::exit(); - }); return QCoreApplication::exec(); } diff --git a/src/colnod/databasemanager.cpp b/src/colnod/databasemanager.cpp index e2a6059..934baaa 100644 --- a/src/colnod/databasemanager.cpp +++ b/src/colnod/databasemanager.cpp @@ -10,9 +10,13 @@ DatabaseManager::DatabaseManager(const QString& host, const QString& dbName, con db.setPassword(password); if (!db.open()) { - log("Opening error" + db.lastError().text()); + opened = false; + Logger::log("Opening error" + db.lastError().text()); emit error(); } + else{ + opened = true; + } } // add or update subject to db @@ -139,7 +143,7 @@ bool DatabaseManager::executeQuery(QSqlQuery &query, const QString &statement) if (!dryMode || getLastQuery(query).startsWith("SELECT")){ if (!query.exec()){ QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text()); - log(QString(msg)); + Logger::logToDb(QString(msg)); emit error(); } } @@ -151,7 +155,7 @@ bool DatabaseManager::executeQuery(QSqlQuery &query, const QString &statement) if (!dryMode || statement.startsWith("SELECT")){ if (!query.exec(statement)){ QString msg = QString("Source: Database Manager, Error: %1").arg(query.lastError().text()); - log(QString(msg)); + Logger::logToDb(QString(msg)); emit error(); } } @@ -300,3 +304,8 @@ bool DatabaseManager::checkDeletedToken(const QString &id) query.next(); return query.value(0).toBool(); } + +bool DatabaseManager::isOpen() +{ + return opened; +} diff --git a/src/colnod/databasemanager.h b/src/colnod/databasemanager.h index 1ce4b50..9604f7b 100644 --- a/src/colnod/databasemanager.h +++ b/src/colnod/databasemanager.h @@ -10,7 +10,7 @@ #include "subject.h" #include "token.h" #include -//#include "logger.h" +#include "logger.h" class DatabaseManager : public QObject @@ -41,6 +41,8 @@ public: QString getSubjectNameById(const QString &id); bool checkDeletedToken(const QString &id); + bool isOpen(); + private: bool checkIfExists(const QString& id, const QString& table); @@ -53,4 +55,5 @@ signals: private: QSqlDatabase db; bool dryMode = false; + bool opened = false; }; diff --git a/src/colnod/datamanager.cpp b/src/colnod/datamanager.cpp index c74fa82..b94008b 100644 --- a/src/colnod/datamanager.cpp +++ b/src/colnod/datamanager.cpp @@ -5,9 +5,15 @@ DataManager::DataManager(const bool &dryMode) { db = std::make_shared("192.168.1.94", "deloitte", "postgres", "34rjkciea12", dryMode); //db = std::make_shared("localhost", "deloitte", "postgres", "34rjkciea12"); - Logger::setDBMan(db); - nextLastSync = db->getNow(); - lastSync = db->getLastSync(); + if (db->isOpen()){ + Logger::setDBMan(db); + nextLastSync = db->getNow(); + lastSync = db->getLastSync(); + } + else { + emit error(); + QCoreApplication::quit(); + } connect(db.get(), &DatabaseManager::error, this, &DataManager::error); } @@ -77,20 +83,23 @@ void DataManager::fillSubjectsToUpdateColnod(const QString& response) // load working sets with updated/deleted tokens from DB void DataManager::fillTokensToChangeDB() { - QSqlQuery query = db->getUpdatedTokens(); - while (query.next()) - { - auto token = std::make_shared(); - token->fromSQLRecord(query); - if (token->getDeleted()){ // sort to delete / to update - tokensFromDBToDeleteFromColnod.append(token->idToStringWithoutBraces()); - } - else{ - tokensToUpdateFromDBToColnod.insert(token->idToStringWithoutBraces(), token); + if (db->isOpen()){ + QSqlQuery query = db->getUpdatedTokens(); + while (query.next()) + { + auto token = std::make_shared(); + token->fromSQLRecord(query); + if (token->getDeleted()){ // sort to delete / to update + tokensFromDBToDeleteFromColnod.append(token->idToStringWithoutBraces()); + } + else{ + tokensToUpdateFromDBToColnod.insert(token->idToStringWithoutBraces(), token); + } } + qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update"; + qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete"; } - qDebug() << "DB:" << tokensToUpdateFromDBToColnod.size() << "tokens to update"; - qDebug() << "DB:" << tokensFromDBToDeleteFromColnod.size() << "tokens to delete"; + else emit error(); } void DataManager::fillSubjectsToUpdateDB() @@ -278,7 +287,8 @@ void DataManager::clear() // on the very end of sync update last sync time to begin time of this sync void DataManager::updateLastSync() { - db->updateLastSync(nextLastSync); + if (db->isOpen()) + db->updateLastSync(nextLastSync); } // these to filter functions solve colision tokens -> remove when change on this token is earlier then change on the same token on the other side (Colnod/DB) diff --git a/src/colnod/datamanager.h b/src/colnod/datamanager.h index 0c365d2..37c26ee 100644 --- a/src/colnod/datamanager.h +++ b/src/colnod/datamanager.h @@ -50,6 +50,8 @@ public: const quint64 &getLastSync() {return lastSync;} const quint64 &getCurrentSync() {return nextLastSync;} + bool isDBOpened() {return db->isOpen();} + public slots: void clear(); void setLastUpdate(); diff --git a/src/colnod/logger.cpp b/src/colnod/logger.cpp index 1326479..05e6c91 100644 --- a/src/colnod/logger.cpp +++ b/src/colnod/logger.cpp @@ -1,4 +1,5 @@ #include "logger.h" +#include "databasemanager.h" #include @@ -24,8 +25,8 @@ void Logger::log(const QString& msg) void Logger::logToDb(const QString &msg) { - Q_ASSERT(Logger::dbMan); - Logger::dbMan->log(msg); + if (dbMan) + Logger::dbMan->log(msg); } void Logger::setDBMan(std::shared_ptr dbMan) diff --git a/src/colnod/logger.h b/src/colnod/logger.h index 7c62211..f28bc1d 100644 --- a/src/colnod/logger.h +++ b/src/colnod/logger.h @@ -3,7 +3,9 @@ #include #include #include -#include "databasemanager.h" +#include + +class DatabaseManager; class Logger diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 8db22d9..c74727e 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -1,11 +1,10 @@ #include "syncmanager.h" SyncManager::SyncManager(bool dryMode) + :dryMode(dryMode) { reqMan = std::make_unique(); dataMan = std::make_unique(dryMode); - this->dryMode = dryMode; - connect(reqMan.get(), &RequestManager::error, this, &SyncManager::error); connect(dataMan.get(), &DataManager::error, this, &SyncManager::error); } @@ -125,8 +124,10 @@ void SyncManager::syncDataFromDBToColnod() if (!dataMan->getTokensToDeleteDB().isEmpty()){ syncDeletedDataFromDBToColnod(); } - else + else{ deleteFinished = true; + areDataUpdatedToColnod(); + } } // add or update tokens to Colnod @@ -184,6 +185,11 @@ void SyncManager::prepareDatabase() dataMan->emptyDatabase(); } +bool SyncManager::isValid() +{ + return dataMan->isDBOpened(); +} + // emit signal when all data is downloaded from Colnod void SyncManager::areChangedDataReady() { diff --git a/src/colnod/syncmanager.h b/src/colnod/syncmanager.h index b7fbf58..629c495 100644 --- a/src/colnod/syncmanager.h +++ b/src/colnod/syncmanager.h @@ -17,6 +17,8 @@ public: void prepareDatabase(); + bool isValid(); + public slots: void loadDataFromColnod(); void loadDataFromDB(); diff --git a/test/unitTests/unittest.h b/test/unitTests/unittest.h index 0e29652..5e6185b 100644 --- a/test/unitTests/unittest.h +++ b/test/unitTests/unittest.h @@ -37,11 +37,6 @@ private slots: void deleteTokens(); void subjectJSONParser(); void tokenJSONParser(); - //void connectToDB(); - //void debugConnection(); - void saveDataToDB(); - void getUuid(); - private: std::shared_ptr getTestToken();