1
0
forked from BRT/arc
arc/database/dao/SettingsDAO.cpp
slava 3d3ed9cbf6 Add SettingsDAO implementation, schema migration, and related updates
Implemented `SettingsDAO` with `get`, `set`, `remove`, and related methods for key-value storage. Added database schema migration for a new `settings` table. Updated `EventDAO` with error handling improvements and `AbstractDAO` with helper utilities. Enhanced Ozon scripts with ad banner detection and handling.
2026-03-09 15:53:35 +07:00

56 lines
1.7 KiB
C++

#include "SettingsDAO.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QDebug>
#include "DatabaseManager.h"
QString SettingsDAO::get(const QString &key, const QString &defaultValue) {
QSqlQuery query(DatabaseManager::instance().database());
query.prepare("SELECT value FROM settings WHERE key = :key LIMIT 1");
query.bindValue(":key", key);
if (!query.exec()) {
qWarning() << "SettingsDAO::get error:" << query.lastError().text();
return defaultValue;
}
if (query.next()) {
return query.value(0).toString();
}
return defaultValue;
}
void SettingsDAO::set(const QString &key, const QString &value) {
QSqlQuery query(DatabaseManager::instance().database());
query.prepare(R"(
INSERT INTO settings (key, value) VALUES (:key, :value)
ON CONFLICT(key) DO UPDATE SET value = excluded.value
)");
query.bindValue(":key", key);
query.bindValue(":value", value);
if (!query.exec()) {
qWarning() << "SettingsDAO::set error:" << query.lastError().text();
}
}
void SettingsDAO::remove(const QString &key) {
QSqlQuery query(DatabaseManager::instance().database());
query.prepare("DELETE FROM settings WHERE key = :key");
query.bindValue(":key", key);
if (!query.exec()) {
qWarning() << "SettingsDAO::remove error:" << query.lastError().text();
}
}
qint64 SettingsDAO::getLong(const QString &key, qint64 defaultValue) {
const QString val = get(key);
if (val.isEmpty()) return defaultValue;
bool ok;
const qint64 result = val.toLongLong(&ok);
return ok ? result : defaultValue;
}
void SettingsDAO::setLong(const QString &key, qint64 value) {
set(key, QString::number(value));
}