#include #include #include "DatabaseManager.h" #include "TransactionDAO.h" bool TransactionDAO::insertTransactionIfNotExists(const TransactionInfo &info) { QSqlQuery query(DatabaseManager::instance().database()); query.prepare(R"( SELECT COUNT(*) FROM transactions WHERE account_id = :account_id AND amount = :amount AND timestamp = :timestamp )"); query.bindValue(":account_id", info.accountId); query.bindValue(":amount", info.amount); query.bindValue(":timestamp", info.timestamp.toString(Qt::ISODate)); if (!query.exec() || !query.next()) { qWarning() << "Ошибка при проверке существования transaction:" << query.lastError().text(); return false; } if (query.value(0).toInt() > 0) { return false; // Уже существует } query.prepare(R"( INSERT INTO transactions (account_id, amount, description, timestamp) VALUES (:account_id, :amount, :description, :timestamp) )"); query.bindValue(":account_id", info.accountId); query.bindValue(":amount", info.amount); query.bindValue(":description", info.description); query.bindValue(":timestamp", info.timestamp.toString(Qt::ISODate)); if (!query.exec()) { qWarning() << "Ошибка при вставке transaction:" << query.lastError().text(); return false; } return true; } bool TransactionDAO::deleteTransaction(const int id) { QSqlQuery query(DatabaseManager::instance().database()); query.prepare("DELETE FROM transactions WHERE id = :id"); query.bindValue(":id", id); return query.exec(); } QList TransactionDAO::getTransactions(const int accountId) { QList list; QSqlQuery query(DatabaseManager::instance().database()); query.prepare(R"( SELECT id, account_id, amount, description, timestamp FROM transactions WHERE account_id = :account_id ORDER BY timestamp DESC )"); query.bindValue(":account_id", accountId); if (!query.exec()) { qWarning() << "Ошибка при получении transactions:" << query.lastError().text(); return list; } while (query.next()) { TransactionInfo tx; tx.id = query.value("id").toInt(); tx.accountId = query.value("account_id").toInt(); tx.amount = query.value("amount").toDouble(); tx.description = query.value("description").toString(); tx.timestamp = QDateTime::fromString(query.value("timestamp").toString(), Qt::ISODate); list.append(tx); } return list; }