From 82d93fd115c8868e2f8ae145568c237d7f9871de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Fischer?= Date: Thu, 12 Dec 2019 15:08:51 +0100 Subject: [PATCH] edit proceessData inn colnod to not using signals inside class --- server-sdk | 2 +- src/colnod/colnodapi.cpp | 155 +++++++++++++--------- src/colnod/databaseapi.cpp | 12 +- src/colnod/syncmanager.cpp | 4 +- src/colnod/syncmanager.h | 5 +- src/colnod/token.h | 4 +- test/auto/syncmanager/tst_syncmanager.cpp | 4 +- 7 files changed, 109 insertions(+), 77 deletions(-) diff --git a/server-sdk b/server-sdk index 3640c0d..28a61d7 160000 --- a/server-sdk +++ b/server-sdk @@ -1 +1 @@ -Subproject commit 3640c0db5d1e24b314b00cc2b0dd61915080381b +Subproject commit 28a61d7c120ad466cc4f661b688b61266b6ab73f diff --git a/src/colnod/colnodapi.cpp b/src/colnod/colnodapi.cpp index 4b33290..5d651d8 100644 --- a/src/colnod/colnodapi.cpp +++ b/src/colnod/colnodapi.cpp @@ -31,7 +31,7 @@ bool ColnodAPI::downloadData(const qint64 &time) } connect(login.get(), &serversdk::Request::finished, this, [=](){ // Get login token - if (login->status() != 200) { + if (!checkRequest(login)) { emit downloadDataFinished(nullptr); return false; } @@ -69,16 +69,16 @@ bool ColnodAPI::downloadData(const qint64 &time) !data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) { qInfo(colnod) << dash; } - for (auto token : data->updatedTokens) { + for (const auto &token : data->updatedTokens) { qInfo(colnod) << Message::massageTemplate("Download updated", "token", "colnod", token->name()); } - for (auto id : data->deletedTokens) { + for (const auto &id : data->deletedTokens) { qInfo(colnod) << Message::massageTemplate("Download deleted", "token", "colnod", id); } - for (auto subject : data->updatedSubjects) { + for (const auto &subject : data->updatedSubjects) { qInfo(colnod) << Message::massageTemplate("Download updated", "subject", "colnod", subject->name()); } - for (auto id : data->deletedSubjects) { + for (const auto &id : data->deletedSubjects) { qInfo(colnod) << Message::massageTemplate("Download deleted", "token", "colnod", id); } if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() || @@ -91,7 +91,13 @@ bool ColnodAPI::downloadData(const qint64 &time) auto tokensRequest = getTokensUpdated(timestamp); connect(tokensRequest.get(), &serversdk::Request::finished, [=](){ + if (!checkErrors(tokensRequest)) { + qCritical(colnod) << "Error during call getTokensUpdated endpoint"; + emit downloadDataFinished(nullptr); + return; + } if (!saveUpdatedTokens(data, tokensRequest->responseData())) { + qCritical(colnod) << "Error during saving getTokensUpdated"; emit downloadDataFinished(nullptr); return; } @@ -100,7 +106,13 @@ bool ColnodAPI::downloadData(const qint64 &time) auto deletedTokensRequest = getTokensDeleted(timestamp); connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=](){ + if (!checkErrors(deletedTokensRequest)) { + qCritical(colnod) << "Error during call getTokensDeleted endpoint"; + emit downloadDataFinished(nullptr); + return; + } if (!saveDeletedTokens(data, deletedTokensRequest->responseData())) { + qCritical(colnod) << "Error during saving getTokensDeleted"; emit downloadDataFinished(nullptr); return; } @@ -109,7 +121,13 @@ bool ColnodAPI::downloadData(const qint64 &time) auto subjectsRequest = getSubjectsUpdated(timestamp); connect(subjectsRequest.get(), &serversdk::Request::finished, [=](){ + if (!checkErrors(subjectsRequest)) { + qCritical(colnod) << "Error during call getSubjectsUpdated endpoint"; + emit downloadDataFinished(nullptr); + return; + } if (!saveUpdatedSubjects(data, subjectsRequest->responseData())) { + qCritical(colnod) << "Error during saving getSubjectsUpdated"; emit downloadDataFinished(nullptr); return; } @@ -118,7 +136,13 @@ bool ColnodAPI::downloadData(const qint64 &time) auto deletedSubjectsRequest = getSubjectsDeleted(timestamp); connect(deletedSubjectsRequest.get(), &serversdk::Request::finished, [=](){ + if (!checkErrors(deletedSubjectsRequest)) { + qCritical(colnod) << "Error during call getSubjectsDeleted endpoint"; + emit downloadDataFinished(nullptr); + return; + } if (!saveDeletedSubjects(data, deletedSubjectsRequest->responseData())) { + qCritical(colnod) << "Error during saving getSubjectsDeleted"; emit downloadDataFinished(nullptr); return; } @@ -132,26 +156,66 @@ bool ColnodAPI::downloadData(const qint64 &time) void ColnodAPI::processData(const std::shared_ptr &data) { - qInfo(colnod) << tab << "- push col:" << tab << "tokens [" << data->updatedTokens.size() << ":" << data->deletedTokens.size() << - "] [ added/updated : deleted ]"; + auto checkData = [=]() { + int dataCount = data->incrementCounter(); + if ( dataCount > 3) { + qCCritical(colnod) << "check data cannnot be higher then 2"; + } + Q_ASSERT(dataCount < 3); + if (dataCount == 2) { + qInfo(colnod) << tab << "- push col:" << tab << "tokens [" << data->updatedTokens.size() << ":" << data->deletedTokens.size() << + "] [ added/updated : deleted ]"; - connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished); + if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() || + !data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) { + qInfo(colnod) << dash; + } - if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { + for (const auto &token : data->updatedTokens) { + qInfo(colnod).noquote() << Message::massageTemplate("Updated", "token", "colnod", token->name()); + } + + for (const auto &id : data->deletedTokens) { + qInfo(colnod).noquote() << Message::massageTemplate("Deleted", "token", "colnod", id); + } + + if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() || + !data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) { + qInfo(colnod) << dash; + } + emit dataProcessFinished(mValid); + } + }; + + if ( !data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() ) { qInfo(colnod) << dash; } - if ( !data->updatedTokens.isEmpty() && !mDryMode) { - setTokens(data->updatedTokens); + if ( !data->updatedTokens.isEmpty() && !mDryMode ) { + auto setTokensRequest = setTokens(data->updatedTokens); + connect(setTokensRequest.get(), &serversdk::Request::finished, [=](){ + if (!checkErrors(setTokensRequest)) { + data->updatedTokens.clear(); + mValid = false; + return; + } + checkData(); + }); } else { - emit partOfDataProcessFinished(); + checkData(); } - if ( !data->deletedTokens.isEmpty() && !mDryMode) { - deleteTokens(data->deletedTokens); + + if ( !data->deletedTokens.isEmpty() && !mDryMode ) { + auto deletedTokensRequest = deleteTokens(data->deletedTokens); + connect(deletedTokensRequest.get(), &serversdk::Request::finished, [=](){ + if (!checkErrors(deletedTokensRequest)) { + data->deletedTokens.clear(); + mValid = false; + return; + } + checkData(); + }); } else { - emit partOfDataProcessFinished(); - } - if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { - qInfo(colnod) << dash; + checkData(); } } @@ -213,22 +277,6 @@ std::shared_ptr ColnodAPI::setTokens(const QHashsetUserName(authToken); mReqMan->processRequest(request); - connect(request.get(), &serversdk::Request::finished, [=](){ - if (!checkRequest(request)) { - qCritical(colnod) << "ERROR during calling /TokenManager/setTokens, request unsuccessful. EXIT"; - } - if (checkResponse(request->responseData())) { - for (const auto &token : tokens) { - qInfo(colnod).noquote() << Message::massageTemplate("Updated", "token", "colnod", token->name()); - } - emit partOfDataProcessFinished(); - } - else { - qWarning(colnod) << "Tokens wasn't updated"; - mValid = false; - emit partOfDataProcessFinished(false); - } - }); return request; } @@ -237,22 +285,6 @@ std::shared_ptr ColnodAPI::deleteTokens(const QList auto request = composeRequest("/TokenManager/deleteTokens", Token::idsToJSON(ids)); request->setUserName(authToken); mReqMan->processRequest(request); - connect(request.get(), &serversdk::Request::finished, [=](){ - if (!checkRequest(request)) { - qCritical(colnod) << "ERROR during calling /TokenManager/deleteTokens, request unsuccessful. EXIT"; - } - if (checkResponse(request->responseData())) { - for (const auto &id : ids) { - qInfo(colnod).noquote() << Message::massageTemplate("Deleted", "token", "colnod", id); - } - emit partOfDataProcessFinished(); - } - else { - qWarning(colnod) << "Tokens wasn't deleted"; - mValid = false; - emit partOfDataProcessFinished(false); - } - }); return request; } @@ -267,6 +299,19 @@ bool ColnodAPI::checkRequest(const std::shared_ptr &request) return request->status() == 200; } +bool ColnodAPI::checkErrors(const std::shared_ptr &request) +{ + if (!checkRequest(request)) { + qCWarning(colnod) << "Status is not 200"; + return false; + } + if (!checkResponse(request->responseData())) { + qCWarning(colnod) << "Empty response data"; + return false; + } + return true; +} + bool ColnodAPI::isValid() { return mValid; @@ -292,16 +337,6 @@ void ColnodAPI::setUserName(const QString &userName) mUserName = userName; } -void ColnodAPI::isDataProcessFinished(bool success) -{ - if (!success) { - mSuccess = false; - } - if (++amountProccessesFinished == 2) { - emit dataProcessFinished(mSuccess); - } -} - bool ColnodAPI::saveUpdatedTokens(const std::shared_ptr& data, const QByteArray &responseData) { Q_ASSERT(data); diff --git a/src/colnod/databaseapi.cpp b/src/colnod/databaseapi.cpp index 62980e4..e61c294 100644 --- a/src/colnod/databaseapi.cpp +++ b/src/colnod/databaseapi.cpp @@ -71,16 +71,16 @@ bool DatabaseAPI::processData(const std::shared_ptr &data) !data->updatedSubjects.isEmpty() || !data->deletedSubjects.isEmpty()) { qInfo(database) << dash; } - for (auto token : data->updatedTokens) { + for (const auto &token : data->updatedTokens) { qInfo(database) << Message::massageTemplate("Updated", "token", "database", token->name()); } - for (auto id : data->deletedTokens) { + for (const auto &id : data->deletedTokens) { qInfo(database) << Message::massageTemplate("Deleted", "token", "database", id); } - for (auto subject : data->updatedSubjects) { + for (const auto &subject : data->updatedSubjects) { qInfo(database) << Message::massageTemplate("Updated", "subject", "database", subject->name()); } - for (auto id : data->deletedSubjects) { + for (const auto &id : data->deletedSubjects) { qInfo(database) << Message::massageTemplate("Deleted", "token", "database", id); } if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty() || @@ -109,10 +109,10 @@ std::shared_ptr DatabaseAPI::composeData(const QSqlQuery &updatedQuery, QS if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { qInfo(database) << dash; } - for (auto token : data->updatedTokens) { + for (const auto &token : data->updatedTokens) { qInfo(database) << Message::massageTemplate("Download updated", "token", "database", token->name()); } - for (auto id : data->deletedTokens) { + for (const auto &id : data->deletedTokens) { qInfo(database) << Message::massageTemplate("Download deleted", "token", "database", id); } if (!data->updatedTokens.isEmpty() || !data->deletedTokens.isEmpty()) { diff --git a/src/colnod/syncmanager.cpp b/src/colnod/syncmanager.cpp index 2b72401..55a44d1 100644 --- a/src/colnod/syncmanager.cpp +++ b/src/colnod/syncmanager.cpp @@ -61,7 +61,7 @@ bool SyncManager::startSynchronization() return; } - std::unique_ptr preparedData = prepareDataNew(databaseData, colnodData); + std::unique_ptr preparedData = prepareData(databaseData, colnodData); if (!preparedData) { qCritical(syncmanager) << "Not possible to compose data"; QCoreApplication::exit(-1); @@ -122,7 +122,7 @@ bool SyncManager::startSynchronization() } -std::unique_ptr SyncManager::prepareDataNew(const std::shared_ptr &databaseData, const std::shared_ptr &colnodData) +std::unique_ptr SyncManager::prepareData(const std::shared_ptr &databaseData, const std::shared_ptr &colnodData) { auto preparedColnodData = std::make_shared(); auto preparedDatabaseData = std::make_shared(); diff --git a/src/colnod/syncmanager.h b/src/colnod/syncmanager.h index 8925155..608afd3 100644 --- a/src/colnod/syncmanager.h +++ b/src/colnod/syncmanager.h @@ -15,17 +15,14 @@ public: bool databaseInitialization(); bool startSynchronization(); - // New approach private: /** * @brief Preapre data to be pushed to database and colnod from actual downloaded data * @param data from database * @param data from colnod * @return prepared data to be pushed into colnod and db - * - * @todo rename when removed old aproach */ - std::unique_ptr prepareDataNew(const std::shared_ptr &databaseData, const std::shared_ptr &colnodData); + std::unique_ptr prepareData(const std::shared_ptr &databaseData, const std::shared_ptr &colnodData); private: void initNewToken(const std::shared_ptr& token); diff --git a/src/colnod/token.h b/src/colnod/token.h index 38b1807..264fbe1 100644 --- a/src/colnod/token.h +++ b/src/colnod/token.h @@ -24,7 +24,7 @@ class Token : public serversdk::DatabaseTable { TABLE_PROPERTY(QDateTime, lastModified, setLastModified, QDateTime()) TABLE_PROPERTY(bool, deleted, setDeleted, false) - public: +public: /** * # Needed values to proper sync * @@ -35,7 +35,7 @@ class Token : public serversdk::DatabaseTable { * */ - explicit Token() = default; + explicit Token() = default; ~Token() override; QByteArray jsonData(const QSet &filters = {}) const override; diff --git a/test/auto/syncmanager/tst_syncmanager.cpp b/test/auto/syncmanager/tst_syncmanager.cpp index 172b81d..74038ec 100644 --- a/test/auto/syncmanager/tst_syncmanager.cpp +++ b/test/auto/syncmanager/tst_syncmanager.cpp @@ -56,7 +56,7 @@ void SyncManagerTest::prepareData_test() token->setId("id1"); dbData->updatedTokens.insert("id1", token); - auto newPreparedData = sync.prepareDataNew(dbData, colnodData); + auto newPreparedData = sync.prepareData(dbData, colnodData); QVERIFY(newPreparedData->databaseData->updatedTokens.contains("id1")); QVERIFY(newPreparedData->databaseData->updatedSubjects.isEmpty()); QVERIFY(newPreparedData->databaseData->deletedTokens.isEmpty()); @@ -99,7 +99,7 @@ void SyncManagerTest::prepareData_tokens() if ( colnod_dtoken ) colnodData->deletedTokens.append(colnod_dtoken->id()); - auto newPreparedData = sync.prepareDataNew(dbData, colnodData); + auto newPreparedData = sync.prepareData(dbData, colnodData); auto testTokens = [=](const QSet &set, const QString &expectedId) {