86 lines
2.6 KiB
C++
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();
|
|
}
|
|
}
|