colnod-connector/src/colnod/databaseapi.h

70 lines
1.9 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(QString host = "192.168.1.94",
QString name = "deloitte",
QString user = "postgres",
QString password = "34rjkciea12");
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 mValid = true;
bool mDryMode;
serversdk::DatabaseManager *mDbMan = nullptr;
std::unique_ptr<serversdk::DatabaseUtils> utils;
};