#pragma once #include "serversdk/requestmanager.h" #include "serversdk/request.h" #include "serversdk/databasetable.h" #include "serversdk/logger.h" #include "data.h" Q_DECLARE_LOGGING_CATEGORY(colnod) class LoginResp : public serversdk::DatabaseTable { Q_OBJECT TABLE_PROPERTY(QString, username, setUsername, "") TABLE_PROPERTY(QString, password, setPassword, "") }; class AuthToken : public serversdk::DatabaseTable { Q_OBJECT TABLE_PROPERTY(QString, id, setId, QString()) }; class Timestamp : public serversdk::DatabaseTable { Q_OBJECT TABLE_PROPERTY(qint64, timestamp, setTimestamp, 0) public: Timestamp() = default; void setTimestamp(QDateTime time) { setTimestamp(time.toMSecsSinceEpoch()); } QString toDateString() { return QDateTime::fromMSecsSinceEpoch(a_timestamp).toString("yyyy-MM-dd hh:mm:ss.zzz"); } }; class ColnodAPI: public QObject { Q_OBJECT public: ColnodAPI() = default; ColnodAPI(serversdk::RequestManager* reqManconst, const bool &dryMode = false, QString userName = "spaceti", QString password = "spaceti1"); void downloadData(const qint64 &time); void processData(const std::shared_ptr &data); std::shared_ptr requestLogin(); std::shared_ptr getTokensUpdated(const Timestamp &time); std::shared_ptr getTokensDeleted(const Timestamp &time); std::shared_ptr getSubjectsUpdated(const Timestamp &time); std::shared_ptr getSubjectsDeleted(const Timestamp &time); std::shared_ptr setTokens(const QHash> &tokens); std::shared_ptr deleteTokens(const QList &tokenIds); // Attributes QString userName() const; void setUserName(const QString &userName); QString password() const; void setPassword(const QString &password); bool isValid(); private: Q_SLOT void areDataReady(const std::shared_ptr& data); Q_SLOT void isDataProcessFinished(bool success); private: void saveUpdatedTokens(const std::shared_ptr& data, const QByteArray &responseData); void saveUpdatedSubjects(const std::shared_ptr& data, const QByteArray &responseData); void saveDeletedTokens(const std::shared_ptr& data, const QByteArray &responseData); void saveDeletedSubjects(const std::shared_ptr& data, const QByteArray &responseData); bool checkResponse(const QByteArray &responseData); std::shared_ptr composeRequest(const QString &endpoint, const QByteArray &data); bool checkRequest(const std::shared_ptr &request); signals: void downloadDataFinished(std::shared_ptr = std::shared_ptr()); void partOfDataReady(std::shared_ptr = std::shared_ptr()); void partOfDataProcessFinished(bool success = true); void dataProcessFinished(bool success = true); void error(); private: serversdk::RequestManager* mReqMan = nullptr; QString mHost = "https://192.168.1.3:8443"; QString mUserName; QString mPassword; Timestamp mLastSync; bool mDryMode = false; bool mValid = true; bool mSuccess = true; QString authToken; qint16 amountData = 0; qint16 amountProccessesFinished = 0; };