#pragma once #include #include "data.h" #include "serversdk/databasemanager.h" #include "serversdk/databasetable.h" #include "serversdk/databaseutils.h" #include "serversdk/logger.h" #include Q_DECLARE_LOGGING_CATEGORY(database) class DatabaseAPI : public QObject { Q_OBJECT public: explicit DatabaseAPI(serversdk::DatabaseManager *dbMan, bool dryMode); bool open(const QString& host = "192.168.1.94", const QString& name = "deloitte", const QString& user = "postgres", const QString& password = "34rjkciea12"); bool executeQuery(QSqlQuery &query, const QString &statement = QString()); std::shared_ptr downloadData(); bool processData(const std::shared_ptr &data); qint64 getLastSync(); void setLastSync(qint64 timestamp); void reupdateDeleted(const QList& ids); qint64 getNow(); // process data bool uploadTokens(const QHash > &tokens, const QSet &filters = {}); bool uploadSubjects(const QHash > &subjects); bool deleteItems(const QList &ids, const QString &tableName); std::shared_ptr getToken(const QString &id); bool isValid(); qint16 getNumOfTokensOfSubject(const QString &id); QString getSubjectNameByTokenId(const QString &tokenId); private: int exists(const QString &id, const QString &tableName); std::shared_ptr composeData(const QSqlQuery &updatedQuery, QSqlQuery &deletedQuery); signals: void downloadDataFinished(std::shared_ptr = std::shared_ptr()); void error(); private: bool mValid = true; bool mDryMode; serversdk::DatabaseManager *mDbMan = nullptr; std::unique_ptr utils; };