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.
56 lines
1.7 KiB
C++
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));
|
|
}
|