forked from ondra/colnod-connector
66 lines
1.8 KiB
C++
66 lines
1.8 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"
|
|
#include <QCoreApplication>
|
|
|
|
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();
|
|
bool 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
|
|
bool uploadTokens(const QHash<QString, std::shared_ptr<Token> > &tokens);
|
|
bool uploadSubjects(const QHash<QString, std::shared_ptr<Subject> > &subjects);
|
|
bool deleteItems(const QList<QString> &ids, const QString &tableName);
|
|
|
|
std::shared_ptr<Token> getToken(const QString &id);
|
|
|
|
bool isAlreadyDeleted(const QString &id);
|
|
|
|
bool isValid();
|
|
|
|
private:
|
|
int 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;
|
|
};
|