#include "GeneralLogDAO.h" #include #include #include "DatabaseManager.h" #include "time/DateUtils.h" bool GeneralLogDAO::insert(const QString &level, const QString &source, const QString &message) { return insert(level, source, message, {}); } bool GeneralLogDAO::insert(const QString &level, const QString &source, const QString &message, const QByteArray &screenshot) { QSqlQuery q(DatabaseManager::instance().database()); q.prepare(R"( INSERT INTO general_logs (level, source, message, timestamp, screenshot) VALUES (:level, :source, :message, :timestamp, :screenshot) )"); q.bindValue(":level", level); q.bindValue(":source", source); q.bindValue(":message", message); q.bindValue(":timestamp", DateUtils::toUtcString(QDateTime::currentDateTimeUtc())); q.bindValue(":screenshot", screenshot.isEmpty() ? QVariant(QMetaType(QMetaType::QByteArray)) : screenshot); 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 GeneralLogDAO::getLogs(int page, int pageSize, const QStringList &levels) { QList result; QSqlQuery q(DatabaseManager::instance().database()); q.prepare( "SELECT id, level, source, message, timestamp, screenshot 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()); e.screenshot = q.value("screenshot").toByteArray(); 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(); }