1
0
forked from BRT/arc
arc/database/dao/AccountDAO.cpp
slava d21e7f4048 Add database schema and DAO implementation for accounts and transactions
Introduced tables for devices, accounts, and transactions in the schema, along with associated models. Implemented DAO methods for CRUD operations, including upsert functionality for accounts and deduplication for transactions. These changes enable structured management of account and transaction data.
2025-04-21 12:01:24 +07:00

75 lines
2.5 KiB
C++

#include <QSqlQuery>
#include <QSqlError>
#include "AccountDAO.h"
#include "AccountInfo.h"
#include "DatabaseManager.h"
bool AccountDAO::upsertAccount(const AccountInfo &info) {
QSqlQuery query(DatabaseManager::instance().database());
query.prepare(R"(
INSERT INTO accounts (device_id, app_name, card_name, amount, update_time, status)
VALUES (:device_id, :app_name, :card_name, :amount, :update_time, :status)
ON CONFLICT(device_id, app_name, card_name)
DO UPDATE SET
amount = excluded.amount,
update_time = excluded.update_time,
status = excluded.status
)");
query.bindValue(":device_id", info.deviceId);
query.bindValue(":app_name", info.appName);
query.bindValue(":card_name", info.cardName);
query.bindValue(":amount", info.amount);
query.bindValue(":update_time", info.updateTime.toString(Qt::ISODate));
query.bindValue(":status", info.status);
if (!query.exec()) {
qWarning() << "Ошибка при вставке/обновлении account:" << query.lastError().text();
return false;
}
return true;
}
bool AccountDAO::deleteAccount(const int id) {
QSqlQuery query(DatabaseManager::instance().database());
query.prepare("DELETE FROM accounts WHERE id = :id");
query.bindValue(":id", id);
return query.exec();
}
QList<AccountInfo> AccountDAO::getAccounts(const QString &deviceId, const QString &appName) {
QList<AccountInfo> accounts;
QSqlQuery query(DatabaseManager::instance().database());
query.prepare(R"(
SELECT id, device_id, app_name, card_name, amount, update_time, status
FROM accounts
WHERE device_id = :device_id AND app_name = :app_name
)");
query.bindValue(":device_id", deviceId);
query.bindValue(":app_name", appName);
if (!query.exec()) {
qWarning() << "Ошибка при получении accounts:" << query.lastError().text();
return accounts;
}
while (query.next()) {
AccountInfo acc;
acc.id = query.value("id").toInt();
acc.deviceId = query.value("device_id").toString();
acc.appName = query.value("app_name").toString();
acc.cardName = query.value("card_name").toString();
acc.amount = query.value("amount").toDouble();
acc.updateTime = QDateTime::fromString(query.value("update_time").toString(), Qt::ISODate);
acc.status = query.value("status").toString();
accounts.append(acc);
}
return accounts;
}