8 #ifndef MAKETRANSACTIONREQUEST_H
9 #define MAKETRANSACTIONREQUEST_H
45 QJsonObject
execute(
const QJsonObject& jsonObj, QMutex& m)
override
47 QMutexLocker locker(&m);
49 int from_account_number{};
50 int to_account_number{};
57 response.insert(
"Response", 5);
60 if (jsonObj.contains(
"Data"))
62 QJsonObject dataObj = jsonObj[
"Data"].toObject();
64 if (dataObj.contains(
"from_account_number"))
66 from_account_number = dataObj.value(
"from_account_number").toInt();
68 if (dataObj.contains(
"to_account_number"))
70 to_account_number = dataObj.value(
"to_account_number").toInt();
72 if (dataObj.contains(
"transaction_amount"))
74 amount = dataObj.value(
"transaction_amount").toDouble();
76 if (dataObj.contains(
"to_email"))
78 to_email = dataObj.value(
"to_email").toString();
83 qCritical() <<
"Data not found";
93 if (!to_email.isEmpty())
98 ->
join(
"JOIN Accounts A ON U.id = A.user_id")
99 ->
where(
"U.email =", to_email)
104 return CreateErrorResponse(response, data,
"This email is not associated with any account");
107 to_account_number = result.
first().value(
"account_number").toInt();
111 dbManager->
select(
"balance")->
table(
"Accounts")->
where(
"account_number =", from_account_number)->
exec();
113 if (fromAccountResult.
isEmpty())
119 dbManager->
select(
"balance")->
table(
"Accounts")->
where(
"account_number =", to_account_number)->
exec();
126 double fromAccountBalance = fromAccountResult.
first().value(
"balance").toDouble();
128 if (fromAccountBalance < amount)
133 double toAccountBalance = toAccountResult.
first().value(
"balance").toDouble();
136 fromAccountBalance -= amount;
137 toAccountBalance += amount;
138 qDebug() <<
"fromAccountBalance: " << fromAccountBalance;
139 qDebug() <<
"toAccountBalance: " << toAccountBalance;
140 qDebug() <<
"amount: " << amount;
143 bool success = dbManager->
insert(
"Transactions", {{
"account_number", from_account_number},
144 {
"from_account_number", from_account_number},
145 {
"to_account_number", to_account_number},
146 {
"amount", amount}});
154 dbManager->
where(
"account_number = ", from_account_number)
155 ->
update(
"Accounts", {{
"balance", fromAccountBalance}});
158 dbManager->
where(
"account_number = ", to_account_number)
159 ->
update(
"Accounts", {{
"balance", toAccountBalance}});
161 data.insert(
"status",
int(
true));
162 data.insert(
"message",
"Transaction successful");
164 response.insert(
"Data", data);
168 QJsonDocument responseDoc(response);
169 QByteArray responseData = responseDoc.toJson();
172 qDebug().noquote() <<
"<-- MakeTransaction::Response :\n" << responseDoc.toJson(QJsonDocument::Indented);
This file contains the declaration of the Request class, which is an abstract base class for handling...
Manages database connections and SQL operations.
Definition: db.h:80
bool update(const QString &table, const QVariantMap &data)
Updates data in a specified table.
Definition: db.cpp:361
DatabaseManager * table(const QString &value)
Sets the table for the query.
Definition: db.cpp:115
DatabaseManager * where(const QString &value, const QVariant &val=QVariant())
Adds a WHERE clause to the query.
Definition: db.cpp:121
DbResult exec()
Executes the built query.
Definition: db.cpp:266
DatabaseManager * select(const QString &value)
Selects columns for the query.
Definition: db.cpp:107
bool insert(const QString &table, const QVariantMap &data)
Inserts data into a specified table.
Definition: db.cpp:327
DatabaseManager * join(const QString &value)
Adds a JOIN clause to the query.
Definition: db.cpp:188
The DbResult class represents a result set returned from a database query.
Definition: dbresult.h:24
QJsonObject first() const
Retrieves the first item in the result set.
Definition: dbresult.cpp:25
bool isEmpty() const
Checks if the result set is empty.
Definition: dbresult.cpp:20
The MakeTransactionRequest class handles transaction requests between accounts.
Definition: MakeTransactionRequest.h:20
QJsonObject execute(const QJsonObject &jsonObj, QMutex &m) override
Executes the transaction request.
Definition: MakeTransactionRequest.h:45
MakeTransactionRequest()
Constructor for the MakeTransactionRequest class.
Definition: MakeTransactionRequest.h:30
The Request class is an abstract base class for handling different types of requests.
Definition: Request.h:25
QJsonObject CreateErrorResponse(QJsonObject &response, QJsonObject &dataObj, QString message)
Creates a generic error JSON response.
Definition: Request.h:90
QJsonObject CreateDBConnectionError(QJsonObject &response, QJsonObject &dataObj)
Creates a JSON response indicating a database connection error.
Definition: Request.h:65
bool isDBConnectionValid(DB::DatabaseManager *dbManager)
Checks if the database connection is valid.
Definition: Request.h:36
Database management classes for handling database connections and operations.