Banking_System_Server  1.0.0
Qt-based banking app for user/admin account management, transactions, secure server communication via PostgreSQL/Supabase.
RequestManager.h
Go to the documentation of this file.
1 
8 #ifndef REQUESTMANAGER_H
9 #define REQUESTMANAGER_H
10 
11 #include <QMutex>
12 #include <QByteArray>
13 #include <QJsonParseError>
14 #include <QDebug>
15 #include <QMap>
16 #include "Requests/Request.h"
17 #include "Requests/LoginRequest.h"
29 
38 {
39 private:
40  QMutex* Mutex_;
41  QMap<int, Request*> requests_;
42 
49  QJsonObject handleJsonParseError(const QJsonParseError& parseError)
50  {
51  QJsonObject response;
52  QJsonObject data;
53 
54  response.insert("Response", -1);
55 
56  data.insert("status", int(false));
57  data.insert("message", "JSON Parse Error: " + parseError.errorString());
58 
59  response.insert("Data", data);
60 
61  // Convert response to JSON
62  QJsonDocument responseDoc(response);
63  QByteArray responseData = responseDoc.toJson();
64 
65  // Send response
66  qDebug().noquote() << "<-- JSON Parse Error::Response :\n" << responseDoc.toJson(QJsonDocument::Indented);
67 
68  return response;
69  }
70 
71 public:
78  {
79  Login = 1,
92  JsonParseError = -1
93  };
94 
100  RequestManager(QMutex* Mutex) : Mutex_(Mutex)
101  {
102  requests_[Login] = new LoginRequest();
103  requests_[GetAccountnumber] = new GetAccountNumberRequest();
104  requests_[GetBalance] = new GetBalanceRequest();
106  requests_[GetDatabase] = new GetDatabaseRequest();
107  requests_[MakeTransaction] = new MakeTransactionRequest();
108  requests_[CreateNewUser] = new CreateNewUserRequest();
109  requests_[DeleteUser] = new DeleteUserRequest();
110  requests_[UpdateUser] = new UpdateUserRequest();
111  requests_[UserInit] = new UserInitRequest();
112  requests_[UpdateEmail] = new UpdateEmailRequest();
113  requests_[UpdatePassword] = new UpdatePasswordRequest();
114  }
115 
125  QByteArray makeRequest(QByteArray data)
126  {
127  int requestNumber;
128  QJsonParseError parseError;
129  QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &parseError);
130 
131  qDebug().noquote() << "--> Request received: " << jsonDoc.toJson(QJsonDocument::Indented);
132 
133  QJsonObject jsonObjResponse;
134 
135  QJsonObject jsonObjRequest = jsonDoc.object();
136 
137  do
138  {
139  if (parseError.error == QJsonParseError::NoError)
140  {
141  requestNumber = jsonObjRequest.value("Request").toInt();
142  }
143  else
144  {
145  qCritical() << "JSON Parse Error: " << parseError.errorString();
146  jsonObjResponse = handleJsonParseError(parseError);
147  break;
148  }
149 
150  if (requests_.contains(requestNumber))
151  {
152  //Request* request = requests_[requestNumber];
153  jsonObjResponse = requests_[requestNumber]->execute(jsonObjRequest, *Mutex_);
154  }
155  else
156  {
157  qCritical() << "Request not found";
158  qCritical() << "Invalid request: " << requestNumber;
159  }
160  } while (false);
161 
162  QJsonDocument responseDoc(jsonObjResponse);
163  QByteArray responseByteArr = responseDoc.toJson();
164 
165  return responseByteArr;
166  }
167 
174  {
175  for (auto request: requests_)
176  {
177  delete request;
178  }
179  }
180 };
181 
182 #endif // REQUESTMANAGER_H
This file contains the declaration of the CreateNewUserRequest class, which handles requests to creat...
The DeleteUserRequest class handles the deletion of users.
This file contains the declaration of the GetAccountNumberRequest class, which handles requests to re...
This file contains the declaration of the GetBalanceRequest class, which handles requests to retrieve...
This file contains the declaration of the GetDatabaseRequest class, which handles requests to retriev...
This file contains the declaration of the GetTransactionsHistoryRequest class, which handles requests...
This file contains the declaration of the LoginRequest class, which handles user login requests.
This file contains the declaration of the MakeTransactionRequest class, which handles requests to mak...
This file contains the declaration of the Request class, which is an abstract base class for handling...
This file contains the declaration of the UpdateEmailRequest class, which handles email update reques...
This file contains the declaration of the UpdatePasswordRequest class, which handles requests to upda...
This file contains the declaration of the UpdateUserRequest class, which handles user update requests...
This file contains the declaration of the UserInitRequest class, which handles user initialization re...
The CreateNewUserRequest class handles the creation of new users.
Definition: CreateNewUserRequest.h:23
The DeleteUserRequest class handles the deletion of users.
Definition: DeleteUserRequest.h:22
The GetAccountNumberRequest class handles the retrieval of account numbers.
Definition: GetAccountNumberRequest.h:21
The GetBalanceRequest class handles the retrieval of account balances.
Definition: GetBalanceRequest.h:21
The GetDatabaseRequest class handles the retrieval of the entire database.
Definition: GetDatabaseRequest.h:21
The GetTransactionsHistoryRequest class handles the retrieval of transaction history.
Definition: GetTransactionsHistoryRequest.h:21
The LoginRequest class handles user login requests.
Definition: LoginRequest.h:20
The MakeTransactionRequest class handles transaction requests between accounts.
Definition: MakeTransactionRequest.h:20
The RequestManager class handles incoming requests and dispatches them to the appropriate request han...
Definition: RequestManager.h:38
~RequestManager()
Destructor for the RequestManager.
Definition: RequestManager.h:173
RequestManager(QMutex *Mutex)
Constructs a RequestManager with the specified mutex for thread safety.
Definition: RequestManager.h:100
QByteArray makeRequest(QByteArray data)
Processes an incoming request and generates an appropriate response.
Definition: RequestManager.h:125
AvailableRequests
Enum representing the different types of requests handled by the RequestManager.
Definition: RequestManager.h:78
@ MakeTransaction
Request to make a transaction.
Definition: RequestManager.h:83
@ CreateNewUser
Request to create a new user.
Definition: RequestManager.h:86
@ JsonParseError
Special error code for JSON parsing errors.
Definition: RequestManager.h:92
@ GetAccountnumber
Request to retrieve account number.
Definition: RequestManager.h:80
@ UserInit
Special request for user initialization.
Definition: RequestManager.h:89
@ GetBalance
Request to get account balance.
Definition: RequestManager.h:81
@ Login
Request for user login.
Definition: RequestManager.h:79
@ UpdatePassword
Special request to update user password.
Definition: RequestManager.h:91
@ TransferAmount
Request to transfer amount (not used currently).
Definition: RequestManager.h:84
@ GetDatabase
Request to get database information.
Definition: RequestManager.h:85
@ DeleteUser
Request to delete a user.
Definition: RequestManager.h:87
@ UpdateUser
Request to update user information.
Definition: RequestManager.h:88
@ UpdateEmail
Special request to update user email.
Definition: RequestManager.h:90
@ GetTransactionsHistory
Request to retrieve transaction history.
Definition: RequestManager.h:82
The UpdateEmailRequest class handles email update requests for users.
Definition: UpdateEmailRequest.h:21
The UpdatePasswordRequest class handles password update requests for users.
Definition: UpdatePasswordRequest.h:21
The UpdateUserRequest class handles user update requests.
Definition: UpdateUserRequest.h:22
The UserInitRequest class handles user initialization requests for User Widget and Admin Widget.
Definition: UserInitRequest.h:22