1
0
forked from BRT/arc
arc/database/dao/BankDAO.cpp

86 lines
2.6 KiB
C++

#include "BankDAO.h"
#include <QSqlQuery>
#include <QSqlError>
#include <QVariant>
#include "DatabaseManager.h"
QList<BankInfo> BankDAO::getAll() {
QList<BankInfo> list;
QSqlQuery query(DatabaseManager::instance().database());
query.prepare("SELECT * FROM banks ORDER BY alias");
if (!query.exec()) {
qWarning() << "Ошибка при получении banks:" << query.lastError().text();
return list;
}
while (query.next()) {
BankInfo bank;
bank.id = query.value("id").toInt();
bank.alias = query.value("alias").toString();
bank.name = query.value("name").toString();
bank.nspkName = query.value("nspk_name").toString();
list.append(bank);
}
return list;
}
BankInfo BankDAO::findByAlias(const QString &alias) {
QSqlQuery query(DatabaseManager::instance().database());
query.prepare("SELECT * FROM banks WHERE alias = :alias LIMIT 1");
query.bindValue(":alias", alias);
if (!query.exec() || !query.next()) return {};
BankInfo bank;
bank.id = query.value("id").toInt();
bank.alias = query.value("alias").toString();
bank.name = query.value("name").toString();
bank.nspkName = query.value("nspk_name").toString();
return bank;
}
void BankDAO::replaceAll(const QList<BankInfo> &banks) {
QSqlDatabase db = DatabaseManager::instance().database();
if (!db.transaction()) {
qWarning() << "[BankDAO] replaceAll: cannot begin transaction:" << db.lastError().text();
return;
}
QSqlQuery query(db);
if (!query.exec("DELETE FROM banks")) {
qWarning() << "[BankDAO] replaceAll: DELETE failed:" << query.lastError().text();
db.rollback();
return;
}
if (!query.prepare(R"(
INSERT INTO banks (alias, name, nspk_name)
VALUES (:alias, :name, :nspk_name)
)")) {
qWarning() << "[BankDAO] replaceAll: prepare INSERT failed:" << query.lastError().text();
db.rollback();
return;
}
for (const BankInfo &bank : banks) {
query.bindValue(":alias", bank.alias);
query.bindValue(":name", bank.name);
query.bindValue(":nspk_name", bank.nspkName);
if (!query.exec()) {
qWarning() << "[BankDAO] replaceAll: INSERT failed for alias" << bank.alias
<< ":" << query.lastError().text() << "— rolling back";
db.rollback();
return;
}
}
if (!db.commit()) {
qWarning() << "[BankDAO] replaceAll: commit failed:" << db.lastError().text();
db.rollback();
}
}