mirror of
https://gitlab.com/spaceti-app/integrations/acs/colnod-connector.git
synced 2026-07-12 15:40:40 +02:00
bugs fix
This commit is contained in:
parent
e5fa284f03
commit
4fe612d11d
@ -31,7 +31,7 @@ int main(int argc, char *argv[])
|
|||||||
// Log messge Filtering
|
// Log messge Filtering
|
||||||
QStringList filters;
|
QStringList filters;
|
||||||
filters << "qt.*=false";
|
filters << "qt.*=false";
|
||||||
filters << "sdk.core.*=true";
|
filters << "sdk*=false";
|
||||||
//filters << "*=false";
|
//filters << "*=false";
|
||||||
QLoggingCategory::setFilterRules(filters.join(QStringLiteral("\n")));
|
QLoggingCategory::setFilterRules(filters.join(QStringLiteral("\n")));
|
||||||
|
|
||||||
|
|||||||
@ -7,7 +7,7 @@ ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, const qint64 &lastSync,
|
|||||||
:mReqMan(reqMan), mUserName(userName), mPassword(password), mDryMode(dryMode)
|
:mReqMan(reqMan), mUserName(userName), mPassword(password), mDryMode(dryMode)
|
||||||
{
|
{
|
||||||
mLastSync.set_timestamp(lastSync);
|
mLastSync.set_timestamp(lastSync);
|
||||||
data = std::make_shared<Data>();
|
mData = std::make_shared<Data>();
|
||||||
|
|
||||||
// -----------------------------------
|
// -----------------------------------
|
||||||
mReqMan->setIgnoreSsl(true);
|
mReqMan->setIgnoreSsl(true);
|
||||||
@ -35,6 +35,13 @@ void ColnodAPI::downloadData()
|
|||||||
|
|
||||||
void ColnodAPI::processData(const std::shared_ptr<Data> &data)
|
void ColnodAPI::processData(const std::shared_ptr<Data> &data)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
qInfo(colnod) << tab << "-> DATA PROCESSED TO COLNOD:";
|
||||||
|
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED";
|
||||||
|
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED";
|
||||||
|
qInfo(colnod) << dash;
|
||||||
|
|
||||||
|
|
||||||
connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished);
|
connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished);
|
||||||
if ( !data->updatedTokens.isEmpty() && !mDryMode) {
|
if ( !data->updatedTokens.isEmpty() && !mDryMode) {
|
||||||
setTokens(data->updatedTokens);
|
setTokens(data->updatedTokens);
|
||||||
@ -76,7 +83,7 @@ void ColnodAPI::getTokensUpdated(const Timestamp &time)
|
|||||||
mReqMan->processRequest(request);
|
mReqMan->processRequest(request);
|
||||||
connect(request.get(), &serversdk::Request::finished, [=](){
|
connect(request.get(), &serversdk::Request::finished, [=](){
|
||||||
saveUpdatedTokens(request->responseData());
|
saveUpdatedTokens(request->responseData());
|
||||||
emit partOfDataReady(data);
|
emit partOfDataReady(mData);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -188,13 +195,13 @@ void ColnodAPI::areDataReady()
|
|||||||
if (++amountData == 4) {
|
if (++amountData == 4) {
|
||||||
|
|
||||||
qInfo(colnod) << tab << "-> COLNOD DATA:";
|
qInfo(colnod) << tab << "-> COLNOD DATA:";
|
||||||
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
qInfo(colnod) << tab << tab << mData->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||||
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
qInfo(colnod) << tab << tab << mData->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||||
qInfo(colnod) << tab << tab << data->updatedSubjects.size() << "SUBJECTS WERE MODIFIED";
|
qInfo(colnod) << tab << tab << mData->updatedSubjects.size() << "SUBJECTS WERE MODIFIED";
|
||||||
qInfo(colnod) << tab << tab << data->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION";
|
qInfo(colnod) << tab << tab << mData->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION";
|
||||||
qInfo(colnod) << dash;
|
qInfo(colnod) << dash;
|
||||||
|
|
||||||
emit downloadDataFinished(data);
|
emit downloadDataFinished(mData);
|
||||||
newData();
|
newData();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -202,18 +209,13 @@ void ColnodAPI::areDataReady()
|
|||||||
void ColnodAPI::isDataProcessFinished()
|
void ColnodAPI::isDataProcessFinished()
|
||||||
{
|
{
|
||||||
if (++amountProccessesFinished == 2) {
|
if (++amountProccessesFinished == 2) {
|
||||||
qInfo(colnod) << tab << "-> DATA PROCESSED TO COLNOD:";
|
|
||||||
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED";
|
|
||||||
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED";
|
|
||||||
qInfo(colnod) << dash;
|
|
||||||
|
|
||||||
emit dataProcessFinished();
|
emit dataProcessFinished();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::saveUpdatedTokens(const QByteArray &responseData)
|
void ColnodAPI::saveUpdatedTokens(const QByteArray &responseData)
|
||||||
{
|
{
|
||||||
data->loadTokensFromJson(responseData);
|
mData->loadTokensFromJson(responseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::saveDeletedTokens(const QByteArray &responseData)
|
void ColnodAPI::saveDeletedTokens(const QByteArray &responseData)
|
||||||
@ -221,13 +223,13 @@ void ColnodAPI::saveDeletedTokens(const QByteArray &responseData)
|
|||||||
QJsonDocument doc = QJsonDocument::fromJson(responseData);
|
QJsonDocument doc = QJsonDocument::fromJson(responseData);
|
||||||
QJsonArray items = doc.object()["items"].toArray();
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
for (QJsonValueRef item : items) {
|
for (QJsonValueRef item : items) {
|
||||||
data->deletedTokens.append(item.toString());
|
mData->deletedTokens.append(item.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::saveUpdatedSubjects(const QByteArray &responseData)
|
void ColnodAPI::saveUpdatedSubjects(const QByteArray &responseData)
|
||||||
{
|
{
|
||||||
data->loadSubjectsFormJson(responseData);
|
mData->loadSubjectsFormJson(responseData);
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData)
|
void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData)
|
||||||
@ -235,13 +237,13 @@ void ColnodAPI::saveDeletedSubjects(const QByteArray &responseData)
|
|||||||
QJsonDocument doc = QJsonDocument::fromJson(responseData);
|
QJsonDocument doc = QJsonDocument::fromJson(responseData);
|
||||||
QJsonArray items = doc.object()["items"].toArray();
|
QJsonArray items = doc.object()["items"].toArray();
|
||||||
for (QJsonValueRef item : items) {
|
for (QJsonValueRef item : items) {
|
||||||
data->deletedSubjects.append(item.toString());
|
mData->deletedSubjects.append(item.toString());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void ColnodAPI::newData()
|
void ColnodAPI::newData()
|
||||||
{
|
{
|
||||||
data = std::make_shared<Data>();
|
mData = std::make_shared<Data>();
|
||||||
}
|
}
|
||||||
|
|
||||||
bool ColnodAPI::checkResponse(const QByteArray &responseData)
|
bool ColnodAPI::checkResponse(const QByteArray &responseData)
|
||||||
|
|||||||
@ -91,7 +91,7 @@ private:
|
|||||||
Timestamp mLastSync;
|
Timestamp mLastSync;
|
||||||
bool mDryMode = false;
|
bool mDryMode = false;
|
||||||
|
|
||||||
std::shared_ptr<Data> data;
|
std::shared_ptr<Data> mData;
|
||||||
|
|
||||||
QString authToken;
|
QString authToken;
|
||||||
qint16 amountData = 0;
|
qint16 amountData = 0;
|
||||||
|
|||||||
@ -1,6 +1,6 @@
|
|||||||
#include "databaseapi.h"
|
#include "databaseapi.h"
|
||||||
|
|
||||||
Q_LOGGING_CATEGORY(database, "db.api");
|
Q_LOGGING_CATEGORY(database, "database.api");
|
||||||
|
|
||||||
DatabaseAPI::DatabaseAPI(serversdk::DatabaseManager *dbMan, bool dryMode)
|
DatabaseAPI::DatabaseAPI(serversdk::DatabaseManager *dbMan, bool dryMode)
|
||||||
: mDryMode(dryMode),
|
: mDryMode(dryMode),
|
||||||
@ -129,7 +129,6 @@ void DatabaseAPI::uploadTokens(const QHash<QString, std::shared_ptr<Token>> &tok
|
|||||||
else {
|
else {
|
||||||
query = utils->insertIntoTable(token.get(), "colnod_token");
|
query = utils->insertIntoTable(token.get(), "colnod_token");
|
||||||
}
|
}
|
||||||
query = mDbMan->executeQuery(query);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -144,7 +143,6 @@ void DatabaseAPI::uploadSubjects(const QHash<QString, std::shared_ptr<Subject>>
|
|||||||
else {
|
else {
|
||||||
query = utils->insertIntoTable(attribute.get(), "colnod_subject_attribute");
|
query = utils->insertIntoTable(attribute.get(), "colnod_subject_attribute");
|
||||||
}
|
}
|
||||||
query = mDbMan->executeQuery(query);
|
|
||||||
}
|
}
|
||||||
// NOTE: about actions
|
// NOTE: about actions
|
||||||
if (exists(subject->id(), "colnod_subject")) {
|
if (exists(subject->id(), "colnod_subject")) {
|
||||||
@ -153,7 +151,6 @@ void DatabaseAPI::uploadSubjects(const QHash<QString, std::shared_ptr<Subject>>
|
|||||||
else {
|
else {
|
||||||
query = utils->insertIntoTable(subject.get(), "colnod_subject");
|
query = utils->insertIntoTable(subject.get(), "colnod_subject");
|
||||||
}
|
}
|
||||||
query = mDbMan->executeQuery(query);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -172,13 +169,13 @@ void DatabaseAPI::deleteItems(const QList<QString> &ids, const QString &tableNam
|
|||||||
std::shared_ptr<Token> DatabaseAPI::getLastUpdate(const QString &id)
|
std::shared_ptr<Token> DatabaseAPI::getLastUpdate(const QString &id)
|
||||||
{
|
{
|
||||||
auto query = mDbMan->createQuery();
|
auto query = mDbMan->createQuery();
|
||||||
query.prepare("SELECT last_update FROM colnod_token WHERE id = :id");
|
query.prepare("SELECT * FROM colnod_token WHERE id = :id");
|
||||||
query.bindValue(":id", id);
|
query.bindValue(":id", id);
|
||||||
mDbMan->executeQuery(query);
|
mDbMan->executeQuery(query);
|
||||||
if (query.next()) {
|
auto list = utils->tableFromQuery<Token>(query);
|
||||||
return utils->tableFromQuery<Token>(query).at(0);
|
if (list.isEmpty())
|
||||||
}
|
return nullptr;
|
||||||
return nullptr;
|
return list.at(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabaseAPI::exists(const QString &id, const QString &tableName)
|
bool DatabaseAPI::exists(const QString &id, const QString &tableName)
|
||||||
|
|||||||
@ -21,6 +21,9 @@ bool Subject::fromJson(const QByteArray &data)
|
|||||||
attributes.append(newAtr);
|
attributes.append(newAtr);
|
||||||
}
|
}
|
||||||
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());
|
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());
|
||||||
|
auto lastUpdate = variant["lastUpdate"].toLongLong();
|
||||||
|
variant["lastUpdate"] = QDateTime::fromMSecsSinceEpoch(lastUpdate);
|
||||||
|
variant.insert("lastModified", QDateTime::fromMSecsSinceEpoch(lastUpdate));
|
||||||
|
|
||||||
// Populate this object data
|
// Populate this object data
|
||||||
bool res = fromVariantMap(variant);
|
bool res = fromVariantMap(variant);
|
||||||
|
|||||||
@ -42,6 +42,10 @@ void SyncManager::run()
|
|||||||
prepareData();
|
prepareData();
|
||||||
|
|
||||||
connect(this, &SyncManager::dataProcessFinished, [=](){
|
connect(this, &SyncManager::dataProcessFinished, [=](){
|
||||||
|
|
||||||
|
qInfo(syncmanager) << "PROCESSING DATA -> FINISHED";
|
||||||
|
qInfo(syncmanager) << equals;
|
||||||
|
|
||||||
updateLastUpdate(syncBegin);
|
updateLastUpdate(syncBegin);
|
||||||
connect(this, &SyncManager::syncFinished, [=](){
|
connect(this, &SyncManager::syncFinished, [=](){
|
||||||
database->setLastSync(syncBegin);
|
database->setLastSync(syncBegin);
|
||||||
@ -99,7 +103,7 @@ void SyncManager::prepareData()
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
auto token = database->getLastUpdate(colnodToken->id());
|
auto token = database->getLastUpdate(colnodToken->id());
|
||||||
if ( !token )
|
if ( token )
|
||||||
if (token == colnodToken)
|
if (token == colnodToken)
|
||||||
alreadySynced.append(colnodToken->id());
|
alreadySynced.append(colnodToken->id());
|
||||||
}
|
}
|
||||||
@ -120,6 +124,12 @@ void SyncManager::prepareData()
|
|||||||
if (databaseToken > colnodDataToProcess->updatedTokens.value(databaseToken->id()))
|
if (databaseToken > colnodDataToProcess->updatedTokens.value(databaseToken->id()))
|
||||||
conflicts.append(databaseToken->id());
|
conflicts.append(databaseToken->id());
|
||||||
}
|
}
|
||||||
|
else {
|
||||||
|
if (databaseToken->description() != "mobile") {
|
||||||
|
qWarning(syncmanager) << "Token:" << databaseToken->id() << "doesn't have 'mobile' in description and won't be pushed to Colnod";
|
||||||
|
conflicts.append(databaseToken->id());
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
for (const auto &id : conflicts)
|
for (const auto &id : conflicts)
|
||||||
colnodDataToProcess->updatedTokens.remove(id);
|
colnodDataToProcess->updatedTokens.remove(id);
|
||||||
@ -137,15 +147,12 @@ void SyncManager::processData()
|
|||||||
qInfo(syncmanager) << equals;
|
qInfo(syncmanager) << equals;
|
||||||
qInfo(syncmanager) << "PROCESSING DATA -> BEGIN";
|
qInfo(syncmanager) << "PROCESSING DATA -> BEGIN";
|
||||||
qInfo(syncmanager) << dash;
|
qInfo(syncmanager) << dash;
|
||||||
qInfo(syncmanager) << "Push changes to both Colnod ad Database:";
|
qInfo(syncmanager) << "Push changes to both Colnod and Database:";
|
||||||
qInfo(syncmanager) << dash;
|
qInfo(syncmanager) << dash;
|
||||||
|
|
||||||
database->processData(colnodDataToProcess);
|
database->processData(colnodDataToProcess);
|
||||||
connect(colnod.get(), &ColnodAPI::dataProcessFinished, this, &SyncManager::dataProcessFinished);
|
connect(colnod.get(), &ColnodAPI::dataProcessFinished, this, &SyncManager::dataProcessFinished);
|
||||||
colnod->processData(databaseDataToProcess);
|
colnod->processData(databaseDataToProcess);
|
||||||
|
|
||||||
qInfo(syncmanager) << "PROCESSING DATA -> FINISHED";
|
|
||||||
qInfo(syncmanager) << equals;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void SyncManager::updateLastUpdate(qint64 syncBegin)
|
void SyncManager::updateLastUpdate(qint64 syncBegin)
|
||||||
|
|||||||
@ -43,26 +43,26 @@ public:
|
|||||||
QByteArray jsonData(const QSet<QString> &filters = {}) const override;
|
QByteArray jsonData(const QSet<QString> &filters = {}) const override;
|
||||||
bool fromJson(const QByteArray &data) override;
|
bool fromJson(const QByteArray &data) override;
|
||||||
|
|
||||||
friend bool operator<(const Token &lToken, const Token &rToken){
|
friend bool operator<(const std::shared_ptr<Token> &lToken, const std::shared_ptr<Token> &rToken){
|
||||||
return lToken.lastModified() < rToken.lastUpdate();
|
return lToken->lastModified() < rToken->lastUpdate();
|
||||||
}
|
}
|
||||||
friend bool operator>(const Token &lToken, const Token &rToken){
|
friend bool operator>(const std::shared_ptr<Token> &lToken, const std::shared_ptr<Token> &rToken){
|
||||||
return lToken.lastModified() > rToken.lastUpdate();
|
return lToken->lastModified() > rToken->lastUpdate();
|
||||||
}
|
}
|
||||||
|
friend bool operator==(const std::shared_ptr<Token> &lToken, const std::shared_ptr<Token> &rToken)
|
||||||
friend bool operator==(const Token &lToken, const Token &rToken){
|
{
|
||||||
return lToken.id() == rToken.id() &&
|
return lToken->id() == rToken->id() &&
|
||||||
lToken.name() == rToken.name() &&
|
lToken->name() == rToken->name() &&
|
||||||
lToken.description() == rToken.description() &&
|
lToken->description() == rToken->description() &&
|
||||||
lToken.lastUpdate() == rToken.lastUpdate() &&
|
lToken->lastUpdate() == rToken->lastUpdate() &&
|
||||||
lToken.tokenType() == rToken.tokenType() &&
|
lToken->tokenType() == rToken->tokenType() &&
|
||||||
lToken.tokenBits() == rToken.tokenBits() &&
|
lToken->tokenBits() == rToken->tokenBits() &&
|
||||||
lToken.tokenData() == rToken.tokenData() &&
|
lToken->tokenData() == rToken->tokenData() &&
|
||||||
lToken.timeToLive() == rToken.timeToLive() &&
|
lToken->timeToLive() == rToken->timeToLive() &&
|
||||||
lToken.authErrors() == rToken.authErrors() &&
|
lToken->authErrors() == rToken->authErrors() &&
|
||||||
lToken.noValidity() == rToken.noValidity() &&
|
lToken->noValidity() == rToken->noValidity() &&
|
||||||
lToken.enabled() == rToken.enabled() &&
|
lToken->enabled() == rToken->enabled() &&
|
||||||
lToken.subjectId() == rToken.subjectId();
|
lToken->subjectId() == rToken->subjectId();
|
||||||
}
|
}
|
||||||
|
|
||||||
void fromSQLRecord(const QSqlQuery& query);
|
void fromSQLRecord(const QSqlQuery& query);
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user