1
0
forked from BRT/arc
arc/database/dao/GeneralLogDAO.cpp
slava 712b73316c Remove CommonBirbankScript and its derived classes from the codebase
Deleted `CommonBirbankScript` and its associated derived classes (`GetLastDaysHistoryBirbankScript`, `LoginAndCheckAccountsBirbankScript`, `PayByCardBirbankScript`). Removed dependencies on these scripts, including XML parsing, account handling, and transaction workflows related to the Birbank app.
2026-03-21 17:41:05 +07:00

66 lines
2.3 KiB
C++

#include "GeneralLogDAO.h"
#include <QSqlQuery>
#include <QSqlError>
#include "DatabaseManager.h"
#include "time/DateUtils.h"
bool GeneralLogDAO::insert(const QString &level, const QString &source, const QString &message) {
QSqlQuery q(DatabaseManager::instance().database());
q.prepare(R"(
INSERT INTO general_logs (level, source, message, timestamp)
VALUES (:level, :source, :message, :timestamp)
)");
q.bindValue(":level", level);
q.bindValue(":source", source);
q.bindValue(":message", message);
q.bindValue(":timestamp", DateUtils::toUtcString(QDateTime::currentDateTimeUtc()));
return q.exec();
}
static QString buildWhereClause(const QStringList &levels) {
if (levels.isEmpty()) return {};
QStringList placeholders;
for (int i = 0; i < levels.size(); ++i)
placeholders << QString(":lvl%1").arg(i);
return " WHERE level IN (" + placeholders.join(',') + ")";
}
static void bindLevels(QSqlQuery &q, const QStringList &levels) {
for (int i = 0; i < levels.size(); ++i)
q.bindValue(QString(":lvl%1").arg(i), levels[i]);
}
QList<GeneralLogEntry> GeneralLogDAO::getLogs(int page, int pageSize, const QStringList &levels) {
QList<GeneralLogEntry> result;
QSqlQuery q(DatabaseManager::instance().database());
q.prepare(
"SELECT id, level, source, message, timestamp FROM general_logs"
+ buildWhereClause(levels)
+ " ORDER BY id DESC LIMIT :limit OFFSET :offset"
);
bindLevels(q, levels);
q.bindValue(":limit", pageSize);
q.bindValue(":offset", page * pageSize);
if (!q.exec()) return result;
while (q.next()) {
GeneralLogEntry e;
e.id = q.value("id").toInt();
e.level = q.value("level").toString();
e.source = q.value("source").toString();
e.message = q.value("message").toString();
e.timestamp = DateUtils::fromUtcString(q.value("timestamp").toString());
result.append(e);
}
return result;
}
int GeneralLogDAO::getTotalCount(const QStringList &levels) {
QSqlQuery q(DatabaseManager::instance().database());
q.prepare("SELECT COUNT(*) FROM general_logs" + buildWhereClause(levels));
bindLevels(q, levels);
if (!q.exec() || !q.next()) return 0;
return q.value(0).toInt();
}