mirror of
https://gitlab.com/spaceti-app/integrations/acs/colnod-connector.git
synced 2026-07-12 13:10:45 +02:00
Clanz and clanzy
This commit is contained in:
parent
97a00c098d
commit
e5fa284f03
@ -10,10 +10,6 @@
|
||||
|
||||
#include "colnodapi.h"
|
||||
|
||||
constexpr auto equels = R"(==================================================================)";
|
||||
constexpr auto underScore = R"(__________________________________________________________________)";
|
||||
constexpr auto dash = R"(------------------------------------------------------------------)";
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
QCoreApplication app(argc, argv);
|
||||
|
||||
@ -2,11 +2,8 @@
|
||||
|
||||
Q_LOGGING_CATEGORY(colnod, "colnod.api");
|
||||
|
||||
ColnodAPI::ColnodAPI()
|
||||
{
|
||||
}
|
||||
|
||||
ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, qint64 lastSync, bool dryMode, QString userName, QString password)
|
||||
ColnodAPI::ColnodAPI(serversdk::RequestManager* reqMan, const qint64 &lastSync, const bool &dryMode, const QString &userName, const QString &password)
|
||||
:mReqMan(reqMan), mUserName(userName), mPassword(password), mDryMode(dryMode)
|
||||
{
|
||||
mLastSync.set_timestamp(lastSync);
|
||||
@ -36,7 +33,7 @@ void ColnodAPI::downloadData()
|
||||
});
|
||||
}
|
||||
|
||||
void ColnodAPI::processData(std::shared_ptr<Data> data)
|
||||
void ColnodAPI::processData(const std::shared_ptr<Data> &data)
|
||||
{
|
||||
connect(this, &ColnodAPI::partOfDataProcessFinished, this, &ColnodAPI::isDataProcessFinished);
|
||||
if ( !data->updatedTokens.isEmpty() && !mDryMode) {
|
||||
@ -190,12 +187,12 @@ void ColnodAPI::areDataReady()
|
||||
{
|
||||
if (++amountData == 4) {
|
||||
|
||||
qInfo(colnod) << TAB << "-> COLNOD DATA:";
|
||||
qInfo(colnod) << TAB << TAB << data->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||
qInfo(colnod) << TAB << TAB << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||
qInfo(colnod) << TAB << TAB << data->updatedSubjects.size() << "SUBJECTS WERE MODIFIED";
|
||||
qInfo(colnod) << TAB << TAB << data->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION";
|
||||
qInfo(colnod) << DASH;
|
||||
qInfo(colnod) << tab << "-> COLNOD DATA:";
|
||||
qInfo(colnod) << tab << tab << data->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||
qInfo(colnod) << tab << tab << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||
qInfo(colnod) << tab << tab << data->updatedSubjects.size() << "SUBJECTS WERE MODIFIED";
|
||||
qInfo(colnod) << tab << tab << data->deletedSubjects.size() << "SUBJECTS MARKED FOR DELETION";
|
||||
qInfo(colnod) << dash;
|
||||
|
||||
emit downloadDataFinished(data);
|
||||
newData();
|
||||
@ -205,10 +202,10 @@ void ColnodAPI::areDataReady()
|
||||
void ColnodAPI::isDataProcessFinished()
|
||||
{
|
||||
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;
|
||||
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();
|
||||
}
|
||||
|
||||
@ -33,11 +33,11 @@ class ColnodAPI: public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
ColnodAPI();
|
||||
ColnodAPI(serversdk::RequestManager* reqMan, qint64 lastSync = 0, bool dryMode = false, QString userName = "spaceti", QString password = "spaceti1");
|
||||
ColnodAPI() = default;
|
||||
ColnodAPI(serversdk::RequestManager* reqMan, const qint64 &lastSync = 0, const bool &dryMode = false, const QString &userName = "spaceti", const QString &password = "spaceti1");
|
||||
|
||||
void downloadData();
|
||||
void processData(std::shared_ptr<Data> data);
|
||||
void processData(const std::shared_ptr<Data> &data);
|
||||
|
||||
// New approach
|
||||
std::shared_ptr<serversdk::Request> requestLogin();
|
||||
@ -89,7 +89,7 @@ private:
|
||||
QString mUserName;
|
||||
QString mPassword;
|
||||
Timestamp mLastSync;
|
||||
bool mDryMode;
|
||||
bool mDryMode = false;
|
||||
|
||||
std::shared_ptr<Data> data;
|
||||
|
||||
|
||||
@ -1,9 +1,5 @@
|
||||
#include "data.h"
|
||||
|
||||
Data::Data()
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void Data::clear()
|
||||
{
|
||||
|
||||
@ -4,15 +4,15 @@
|
||||
#include "subject.h"
|
||||
|
||||
// constants for output design
|
||||
#define EQUALS "=================================================================="
|
||||
#define UNDERSCORE "__________________________________________________________________"
|
||||
#define DASH "------------------------------------------------------------------"
|
||||
#define TAB "\t"
|
||||
constexpr auto equals = "==================================================================";
|
||||
constexpr auto underscore = "__________________________________________________________________";
|
||||
constexpr auto dash = "------------------------------------------------------------------";
|
||||
constexpr auto tab = "\t";
|
||||
|
||||
class Data
|
||||
{
|
||||
public:
|
||||
Data();
|
||||
Data() = default;
|
||||
|
||||
void clear();
|
||||
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
|
||||
Q_LOGGING_CATEGORY(database, "db.api");
|
||||
|
||||
#define STH 803
|
||||
|
||||
DatabaseAPI::DatabaseAPI(serversdk::DatabaseManager *dbMan, bool dryMode)
|
||||
: mDryMode(dryMode),
|
||||
mDbMan(dbMan),
|
||||
@ -30,23 +28,23 @@ void DatabaseAPI::downloadData()
|
||||
emit downloadDataFinished(composeData(updatedQuery, deletedQuery));
|
||||
}
|
||||
|
||||
void DatabaseAPI::processData(std::shared_ptr<Data> data)
|
||||
void DatabaseAPI::processData(const std::shared_ptr<Data> &data)
|
||||
{
|
||||
uploadTokens(data->updatedTokens);
|
||||
uploadSubjects(data->updatedSubjects);
|
||||
deleteItems(data->deletedTokens, "colnod_token");
|
||||
deleteItems(data->deletedSubjects, "colnod_subject");
|
||||
|
||||
qInfo(database) << TAB << "-> DATA PROCESSED TO DATABASE:";
|
||||
qInfo(database) << TAB << TAB << data->updatedTokens.size() << "TOKENS UPDATED";
|
||||
qInfo(database) << TAB << TAB << data->deletedTokens.size() << "TOKENS DELETED";
|
||||
qInfo(database) << TAB << TAB << data->updatedSubjects.size() << "SUBJECTS UPDATED";
|
||||
qInfo(database) << TAB << TAB << data->deletedSubjects.size() << "SUBJECTS DELETED";
|
||||
qInfo(database) << DASH;
|
||||
qInfo(database) << tab << "-> DATA PROCESSED TO DATABASE:";
|
||||
qInfo(database) << tab << tab << data->updatedTokens.size() << "TOKENS UPDATED";
|
||||
qInfo(database) << tab << tab << data->deletedTokens.size() << "TOKENS DELETED";
|
||||
qInfo(database) << tab << tab << data->updatedSubjects.size() << "SUBJECTS UPDATED";
|
||||
qInfo(database) << tab << tab << data->deletedSubjects.size() << "SUBJECTS DELETED";
|
||||
qInfo(database) << dash;
|
||||
}
|
||||
|
||||
|
||||
std::shared_ptr<Data> DatabaseAPI::composeData(QSqlQuery updatedQuery, QSqlQuery deletedQuery)
|
||||
std::shared_ptr<Data> DatabaseAPI::composeData(const QSqlQuery &updatedQuery, QSqlQuery &deletedQuery)
|
||||
{
|
||||
auto data = std::make_shared<Data>();
|
||||
auto list = utils->tableFromQuery<Token>(updatedQuery);
|
||||
@ -57,10 +55,10 @@ std::shared_ptr<Data> DatabaseAPI::composeData(QSqlQuery updatedQuery, QSqlQuery
|
||||
data->deletedTokens.append(deletedQuery.value(0).toString());
|
||||
}
|
||||
|
||||
qInfo(database) << TAB << "-> DATABASE DATA:";
|
||||
qInfo(database) << TAB << TAB << data->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||
qInfo(database) << TAB << TAB << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||
qInfo(database) << DASH ;
|
||||
qInfo(database) << tab << "-> DATABASE DATA:";
|
||||
qInfo(database) << tab << tab << data->updatedTokens.size() << "TOKENS WERE MODIFIED";
|
||||
qInfo(database) << tab << tab << data->deletedTokens.size() << "TOKENS MARKED FOR DELETION";
|
||||
qInfo(database) << dash ;
|
||||
|
||||
|
||||
return data;
|
||||
@ -72,9 +70,7 @@ qint64 DatabaseAPI::getLastSync()
|
||||
if (query.next()){
|
||||
return query.value(0).toLongLong();
|
||||
}
|
||||
else {
|
||||
return -1;
|
||||
}
|
||||
}
|
||||
|
||||
void DatabaseAPI::setLastSync(qint64 timestamp)
|
||||
@ -85,7 +81,7 @@ void DatabaseAPI::setLastSync(qint64 timestamp)
|
||||
mDbMan->executeQuery(query);
|
||||
}
|
||||
|
||||
void DatabaseAPI::setLastUpdate(QHash<QString, std::shared_ptr<Token>> tokens)
|
||||
void DatabaseAPI::setLastUpdate(const QHash<QString, std::shared_ptr<Token>> &tokens)
|
||||
{
|
||||
auto query = mDbMan->createQuery();
|
||||
for (const auto &token : tokens){
|
||||
@ -95,9 +91,9 @@ void DatabaseAPI::setLastUpdate(QHash<QString, std::shared_ptr<Token>> tokens)
|
||||
mDbMan->executeQuery(query);
|
||||
}
|
||||
|
||||
qInfo(database) << EQUALS;
|
||||
qInfo(database) << equals;
|
||||
qInfo(database) << "Synchronize last update in database with colnod";
|
||||
qInfo(database) << EQUALS;
|
||||
qInfo(database) << equals;
|
||||
}
|
||||
|
||||
qint64 DatabaseAPI::getNow()
|
||||
@ -123,7 +119,7 @@ void DatabaseAPI::initNewTokens()
|
||||
uploadTokens(tokensToInit);
|
||||
}
|
||||
|
||||
void DatabaseAPI::uploadTokens(QHash<QString, std::shared_ptr<Token>> tokens)
|
||||
void DatabaseAPI::uploadTokens(const QHash<QString, std::shared_ptr<Token>> &tokens)
|
||||
{
|
||||
auto query = mDbMan->createQuery();
|
||||
for (const auto &token : tokens) {
|
||||
@ -137,7 +133,7 @@ void DatabaseAPI::uploadTokens(QHash<QString, std::shared_ptr<Token>> tokens)
|
||||
}
|
||||
}
|
||||
|
||||
void DatabaseAPI::uploadSubjects(QHash<QString, std::shared_ptr<Subject>> subjects)
|
||||
void DatabaseAPI::uploadSubjects(const QHash<QString, std::shared_ptr<Subject>> &subjects)
|
||||
{
|
||||
auto query = mDbMan->createQuery();
|
||||
for (const auto &subject : subjects) {
|
||||
@ -161,7 +157,7 @@ void DatabaseAPI::uploadSubjects(QHash<QString, std::shared_ptr<Subject>> subjec
|
||||
}
|
||||
}
|
||||
|
||||
void DatabaseAPI::deleteItems(QList<QString> ids, const QString &tableName)
|
||||
void DatabaseAPI::deleteItems(const QList<QString> &ids, const QString &tableName)
|
||||
{
|
||||
auto query = mDbMan->createQuery();
|
||||
QString nowString = QDateTime::fromMSecsSinceEpoch(getLastSync()).toString("yyyy-MM-dd hh:mm:ss.zzz");
|
||||
@ -182,9 +178,7 @@ std::shared_ptr<Token> DatabaseAPI::getLastUpdate(const QString &id)
|
||||
if (query.next()) {
|
||||
return utils->tableFromQuery<Token>(query).at(0);
|
||||
}
|
||||
else {
|
||||
return nullptr;
|
||||
}
|
||||
}
|
||||
|
||||
bool DatabaseAPI::exists(const QString &id, const QString &tableName)
|
||||
|
||||
@ -20,18 +20,18 @@ public:
|
||||
bool open();
|
||||
|
||||
void downloadData();
|
||||
void processData(std::shared_ptr<Data> data);
|
||||
void processData(const std::shared_ptr<Data> &data);
|
||||
qint64 getLastSync();
|
||||
void setLastSync(qint64 timestamp);
|
||||
void setLastUpdate(QHash<QString, std::shared_ptr<Token> > tokens);
|
||||
void setLastUpdate(const QHash<QString, std::shared_ptr<Token> > &tokens);
|
||||
qint64 getNow();
|
||||
|
||||
void initNewTokens();
|
||||
|
||||
// process data
|
||||
void uploadTokens(QHash<QString, std::shared_ptr<Token> > tokens);
|
||||
void uploadSubjects(QHash<QString, std::shared_ptr<Subject> > subjects);
|
||||
void deleteItems(QList<QString> ids, const QString &tableName);
|
||||
void uploadTokens(const QHash<QString, std::shared_ptr<Token> > &tokens);
|
||||
void uploadSubjects(const QHash<QString, std::shared_ptr<Subject> > &subjects);
|
||||
void deleteItems(const QList<QString> &ids, const QString &tableName);
|
||||
|
||||
std::shared_ptr<Token> getLastUpdate(const QString &id);
|
||||
|
||||
@ -39,7 +39,7 @@ private:
|
||||
bool exists(const QString &id, const QString &tableName);
|
||||
|
||||
QSqlQuery getUpdatedTokens();
|
||||
std::shared_ptr<Data> composeData(QSqlQuery updatedQuery, QSqlQuery deletedQuery);
|
||||
std::shared_ptr<Data> composeData(const QSqlQuery &updatedQuery, QSqlQuery &deletedQuery);
|
||||
qint16 getNumOfTokensOfSubject(const QString &id);
|
||||
QString getSubjectNameByTokenId(const QString &tokenId);
|
||||
|
||||
|
||||
@ -12,7 +12,7 @@ bool Subject::fromJson(const QByteArray &data)
|
||||
QJsonObject attr = doc.object()["attributes"].toObject()["items"].toObject();
|
||||
auto id = doc.object()["id"].toString();
|
||||
|
||||
for (auto key : attr.keys()) {
|
||||
for (const auto &key : attr.keys()) {
|
||||
auto newAtr = std::make_shared<SubjectAttribute>();
|
||||
newAtr->setId(id + " " + key);
|
||||
newAtr->setSubjectId(id);
|
||||
|
||||
@ -32,7 +32,7 @@ void SyncManager::run()
|
||||
{
|
||||
qint64 syncBegin = database->getNow();
|
||||
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
qInfo(syncmanager) << "SYNCHRONIZATION BEGIN";
|
||||
|
||||
database->initNewTokens();
|
||||
@ -49,9 +49,9 @@ void SyncManager::run()
|
||||
qInfo(syncmanager) << "Update last synchronization time to time of this sync ("
|
||||
<< QDateTime::fromMSecsSinceEpoch(syncBegin).toString("yyyy-MM-dd hh:mm:ss.zzz")
|
||||
<< ")";
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
qInfo(syncmanager) << "SYNCHRONIZATION FINISHED";
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
|
||||
QCoreApplication::exit();
|
||||
});
|
||||
@ -63,11 +63,11 @@ void SyncManager::run()
|
||||
|
||||
void SyncManager::downloadData()
|
||||
{
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
qInfo(syncmanager) << "DOWNLOADING DATA -> BEGIN";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << dash;
|
||||
qInfo(syncmanager) << "Modified data since last synchronization (" << mlastSync.toDateString() << "):";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << dash;
|
||||
|
||||
connect(colnod.get(), &ColnodAPI::downloadDataFinished, this, &SyncManager::saveColnodData);
|
||||
connect(database.get(), &DatabaseAPI::downloadDataFinished, this, &SyncManager::saveDatabaseData);
|
||||
@ -78,11 +78,11 @@ void SyncManager::downloadData()
|
||||
// finds conflicts -> changes on both sides (colnod and DB), apply newer change
|
||||
void SyncManager::prepareData()
|
||||
{
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
qInfo(syncmanager) << "PREPARING DATA -> BEGIN";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << dash;
|
||||
qInfo(syncmanager) << "Resolve conflicts ( changes on same item on both Colnod and DB ):";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << dash;
|
||||
|
||||
|
||||
colnodDataToProcess = std::make_shared<Data>(*colnodData);
|
||||
@ -108,10 +108,10 @@ void SyncManager::prepareData()
|
||||
for (const auto &id : alreadySynced)
|
||||
colnodDataToProcess->updatedTokens.remove(id);
|
||||
|
||||
qInfo(syncmanager) << TAB << "-> COLNOD DATA - CHANGES:";
|
||||
qInfo(syncmanager) << TAB << TAB << conflicts.size() << "TOKENS WERE MODIFIED IN DATABASE";
|
||||
qInfo(syncmanager) << TAB << TAB << alreadySynced.size() << "TOKENS WERE ALREADY SYNCED";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << tab << "-> COLNOD DATA - CHANGES:";
|
||||
qInfo(syncmanager) << tab << tab << conflicts.size() << "TOKENS WERE MODIFIED IN DATABASE";
|
||||
qInfo(syncmanager) << tab << tab << alreadySynced.size() << "TOKENS WERE ALREADY SYNCED";
|
||||
qInfo(syncmanager) << dash;
|
||||
|
||||
conflicts.clear();
|
||||
|
||||
@ -124,28 +124,28 @@ void SyncManager::prepareData()
|
||||
for (const auto &id : conflicts)
|
||||
colnodDataToProcess->updatedTokens.remove(id);
|
||||
|
||||
qInfo(syncmanager) << TAB << "-> DATABASE DATA - CHANGES:";
|
||||
qInfo(syncmanager) << TAB << TAB << conflicts.size() << "TOKENS WERE MODIFIED IN COLNOD";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << tab << "-> DATABASE DATA - CHANGES:";
|
||||
qInfo(syncmanager) << tab << tab << conflicts.size() << "TOKENS WERE MODIFIED IN COLNOD";
|
||||
qInfo(syncmanager) << dash;
|
||||
|
||||
qInfo(syncmanager) << "PREPARING DATA -> FINISHED";
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
}
|
||||
|
||||
void SyncManager::processData()
|
||||
{
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
qInfo(syncmanager) << "PROCESSING DATA -> BEGIN";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << dash;
|
||||
qInfo(syncmanager) << "Push changes to both Colnod ad Database:";
|
||||
qInfo(syncmanager) << DASH;
|
||||
qInfo(syncmanager) << dash;
|
||||
|
||||
database->processData(colnodDataToProcess);
|
||||
connect(colnod.get(), &ColnodAPI::dataProcessFinished, this, &SyncManager::dataProcessFinished);
|
||||
colnod->processData(databaseDataToProcess);
|
||||
|
||||
qInfo(syncmanager) << "PROCESSING DATA -> FINISHED";
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
}
|
||||
|
||||
void SyncManager::updateLastUpdate(qint64 syncBegin)
|
||||
@ -153,7 +153,7 @@ void SyncManager::updateLastUpdate(qint64 syncBegin)
|
||||
Timestamp time;
|
||||
time.set_timestamp(syncBegin);
|
||||
colnod->getTokensUpdated(time);
|
||||
connect(colnod.get(), &ColnodAPI::partOfDataReady, [=](std::shared_ptr<Data> data){
|
||||
connect(colnod.get(), &ColnodAPI::partOfDataReady, [=](const std::shared_ptr<Data> &data){
|
||||
database->setLastUpdate(data->updatedTokens);
|
||||
emit syncFinished();
|
||||
});
|
||||
@ -164,7 +164,7 @@ void SyncManager::areDataReady()
|
||||
if (++dataAmount == 2) {
|
||||
|
||||
qInfo(syncmanager) << "DOWNLOADING DATA -> FINISHED";
|
||||
qInfo(syncmanager) << EQUALS;
|
||||
qInfo(syncmanager) << equals;
|
||||
|
||||
emit dataReady();
|
||||
}
|
||||
|
||||
@ -51,7 +51,7 @@ bool Token::fromJson(const QByteArray &data)
|
||||
QVariantMap variant = qvariant_cast<QVariantMap>(doc.toVariant());
|
||||
|
||||
QVariantList flags = variant["flags"].toList();
|
||||
for (auto value : flags) {
|
||||
for (const auto &value : flags) {
|
||||
if ( value.toString() == "Enabled") {
|
||||
variant.insert("enabled", true);
|
||||
}
|
||||
@ -82,11 +82,9 @@ QByteArray Token::idsToJSON(const QList<QString> &ids)
|
||||
return doc.toJson();
|
||||
}
|
||||
|
||||
#include <qsqlrecord.h>
|
||||
|
||||
void Token::fromSQLRecord(const QSqlQuery& query)
|
||||
{
|
||||
auto rec = query.record();
|
||||
setId(query.value(0).toString());
|
||||
a_authErrors = query.value(1).toInt();
|
||||
setDescription(query.value(2).toString());
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user