colnod-connector/src/colnod/databaseapi.h
2019-11-26 17:58:13 +01:00

65 lines
1.7 KiB
C++

#pragma once
#include <QSql>
#include "data.h"
#include "serversdk/databasemanager.h"
#include "serversdk/databasetable.h"
#include "serversdk/databaseutils.h"
#include "serversdk/logger.h"
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());
std::shared_ptr<Data> downloadData();
void processData(const std::shared_ptr<Data> &data);
qint64 getLastSync();
void setLastSync(qint64 timestamp);
void setLastUpdate(const QHash<QString, std::shared_ptr<Token> > &tokens);
void setLastUpdate(const QList<QString> ids);
qint64 getNow();
void initNewTokens();
// process data
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> getToken(const QString &id);
bool isAlreadyDeleted(const QString &id);
bool isValid();
private:
bool exists(const QString &id, const QString &tableName);
QSqlQuery getUpdatedTokens();
std::shared_ptr<Data> composeData(const QSqlQuery &updatedQuery, QSqlQuery &deletedQuery);
qint16 getNumOfTokensOfSubject(const QString &id);
QString getSubjectNameByTokenId(const QString &tokenId);
signals:
void downloadDataFinished(std::shared_ptr<Data> = std::shared_ptr<Data>());
void error();
private:
bool mDryMode;
bool mValid = true;
serversdk::DatabaseManager *mDbMan = nullptr;
std::unique_ptr<serversdk::DatabaseUtils> utils;
};