#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(); bool executeQuery(QSqlQuery &query, const QString &statement = QString()); bool downloadData(); bool processData(const std::shared_ptr &data); qint64 getLastSync(); void setLastSync(qint64 timestamp); void setLastUpdate(const QHash > &tokens); void setLastUpdate(const QList ids); qint64 getNow(); void initNewTokens(); // process data bool uploadTokens(const QHash > &tokens); bool uploadSubjects(const QHash > &subjects); bool deleteItems(const QList &ids, const QString &tableName); std::shared_ptr getToken(QString &id); bool isAlreadyDeleted(QString &id); bool isValid(); private: int exists(const QString &id, const QString &tableName); QSqlQuery getUpdatedTokens(); std::shared_ptr composeData(const QSqlQuery &updatedQuery, QSqlQuery &deletedQuery); qint16 getNumOfTokensOfSubject(const QString &id); QString getSubjectNameByTokenId(const QString &tokenId); signals: void downloadDataFinished(std::shared_ptr = std::shared_ptr()); void error(); private: bool mDryMode; bool mValid = true; serversdk::DatabaseManager *mDbMan = nullptr; std::unique_ptr utils; };