Container System 0.1.0
High-performance C++20 type-safe container framework with SIMD-accelerated serialization
Loading...
Searching...
No Matches
scenarios::FinancialTransactionSystem Class Reference

Financial Transaction Processing System. More...

Collaboration diagram for scenarios::FinancialTransactionSystem:
Collaboration graph

Classes

struct  Transaction
 

Public Member Functions

void simulate_financial_scenario ()
 

Private Member Functions

void process_transaction (const Transaction &transaction)
 

Private Attributes

std::atomic< int > transactions_processed_ {0}
 
std::atomic< int > fraud_alerts_ {0}
 
double total_amount_ {0.0}
 
std::mutex amount_mutex_
 

Detailed Description

Financial Transaction Processing System.

Examples
real_world_scenarios.cpp.

Definition at line 186 of file real_world_scenarios.cpp.

Member Function Documentation

◆ process_transaction()

void scenarios::FinancialTransactionSystem::process_transaction ( const Transaction & transaction)
inlineprivate
Examples
real_world_scenarios.cpp.

Definition at line 272 of file real_world_scenarios.cpp.

272 {
273 bool is_suspicious = (transaction.amount > 5000.0) ||
274 (transaction.account_from == transaction.account_to);
275
276 {
277 std::lock_guard<std::mutex> lock(amount_mutex_);
278 total_amount_ += transaction.amount;
279 }
280
281 auto container = std::make_shared<value_container>();
282 container->set_source("transaction_processor", "fraud_detection");
283 container->set_target("compliance_service", "transaction_monitor");
284 container->set_message_type(is_suspicious ? "suspicious_transaction" : "normal_transaction");
285
286 container->set("transaction_id", transaction.transaction_id);
287 container->set("account_from", transaction.account_from);
288 container->set("account_to", transaction.account_to);
289 container->set("amount", transaction.amount);
290 container->set("currency", transaction.currency);
291 container->set("transaction_type", transaction.transaction_type);
292 container->set("timestamp", static_cast<int64_t>(
293 std::chrono::duration_cast<std::chrono::milliseconds>(
294 transaction.timestamp.time_since_epoch()).count()));
295 container->set("risk_score", is_suspicious ? 85.0 : 15.0);
296
297 if (is_suspicious) {
299 container->set("alert_reason",
300 std::string(transaction.amount > 5000.0 ? "high_amount" : "same_account"));
301 container->set("requires_manual_review", true);
302
303 std::cout << " FRAUD ALERT: " << transaction.transaction_id
304 << " Amount: $" << transaction.amount << std::endl;
305 }
306
307 container->serialize_string(value_container::serialization_format::binary).value();
308 }

References scenarios::FinancialTransactionSystem::Transaction::account_from, scenarios::FinancialTransactionSystem::Transaction::account_to, scenarios::FinancialTransactionSystem::Transaction::amount, amount_mutex_, scenarios::FinancialTransactionSystem::Transaction::currency, fraud_alerts_, scenarios::FinancialTransactionSystem::Transaction::timestamp, total_amount_, scenarios::FinancialTransactionSystem::Transaction::transaction_id, and scenarios::FinancialTransactionSystem::Transaction::transaction_type.

Referenced by simulate_financial_scenario().

Here is the caller graph for this function:

◆ simulate_financial_scenario()

void scenarios::FinancialTransactionSystem::simulate_financial_scenario ( )
inline
Examples
real_world_scenarios.cpp.

Definition at line 204 of file real_world_scenarios.cpp.

204 {
205 std::cout << "\n=== Financial Transaction Processing Scenario ===" << std::endl;
206
207 const int num_transactions = 100;
208
209 std::queue<Transaction> transaction_queue;
210 std::mutex transaction_mutex;
211 std::condition_variable transaction_cv;
212 std::atomic<bool> processing_active{true};
213
214 std::thread fraud_detector([&]() {
215 while (processing_active || !transaction_queue.empty()) {
216 std::unique_lock<std::mutex> lock(transaction_mutex);
217 transaction_cv.wait(lock, [&]() { return !transaction_queue.empty() || !processing_active; });
218
219 if (!transaction_queue.empty()) {
220 Transaction transaction = transaction_queue.front();
221 transaction_queue.pop();
222 lock.unlock();
223
224 process_transaction(transaction);
226 }
227 }
228 });
229
230 std::random_device rd;
231 std::mt19937 gen(rd());
232 std::uniform_real_distribution<> amount_dist(10.0, 10000.0);
233 std::uniform_int_distribution<> account_dist(1000, 9999);
234 std::vector<std::string> currencies = {"USD", "EUR", "GBP"};
235 std::vector<std::string> types = {"transfer", "payment", "withdrawal"};
236
237 for (int i = 0; i < num_transactions; ++i) {
238 Transaction transaction;
239 transaction.transaction_id = "TXN" + std::to_string(1000000 + i);
240 transaction.account_from = "ACC" + std::to_string(account_dist(gen));
241 transaction.account_to = "ACC" + std::to_string(account_dist(gen));
242 transaction.amount = amount_dist(gen);
243 transaction.currency = currencies[i % currencies.size()];
244 transaction.transaction_type = types[i % types.size()];
245 transaction.timestamp = std::chrono::system_clock::now();
246
247 {
248 std::lock_guard<std::mutex> lock(transaction_mutex);
249 transaction_queue.push(transaction);
250 }
251 transaction_cv.notify_one();
252
253 std::this_thread::sleep_for(std::chrono::milliseconds(5));
254 }
255
256 processing_active = false;
257 transaction_cv.notify_all();
258 fraud_detector.join();
259
260 std::cout << "Financial processing completed:" << std::endl;
261 std::cout << " Transactions processed: " << transactions_processed_.load() << std::endl;
262 std::cout << " Fraud alerts generated: " << fraud_alerts_.load() << std::endl;
263 double total;
264 {
265 std::lock_guard<std::mutex> lock(amount_mutex_);
266 total = total_amount_;
267 }
268 std::cout << " Total amount processed: $" << std::fixed << std::setprecision(2) << total << std::endl;
269 }
void process_transaction(const Transaction &transaction)

References scenarios::FinancialTransactionSystem::Transaction::account_from, scenarios::FinancialTransactionSystem::Transaction::account_to, scenarios::FinancialTransactionSystem::Transaction::amount, amount_mutex_, scenarios::FinancialTransactionSystem::Transaction::currency, fraud_alerts_, process_transaction(), scenarios::FinancialTransactionSystem::Transaction::timestamp, total_amount_, scenarios::FinancialTransactionSystem::Transaction::transaction_id, scenarios::FinancialTransactionSystem::Transaction::transaction_type, and transactions_processed_.

Referenced by main().

Here is the call graph for this function:
Here is the caller graph for this function:

Member Data Documentation

◆ amount_mutex_

std::mutex scenarios::FinancialTransactionSystem::amount_mutex_
private

◆ fraud_alerts_

std::atomic<int> scenarios::FinancialTransactionSystem::fraud_alerts_ {0}
private
Examples
real_world_scenarios.cpp.

Definition at line 199 of file real_world_scenarios.cpp.

199{0};

Referenced by process_transaction(), and simulate_financial_scenario().

◆ total_amount_

double scenarios::FinancialTransactionSystem::total_amount_ {0.0}
private
Examples
real_world_scenarios.cpp.

Definition at line 200 of file real_world_scenarios.cpp.

200{0.0};

Referenced by process_transaction(), and simulate_financial_scenario().

◆ transactions_processed_

std::atomic<int> scenarios::FinancialTransactionSystem::transactions_processed_ {0}
private
Examples
real_world_scenarios.cpp.

Definition at line 198 of file real_world_scenarios.cpp.

198{0};

Referenced by simulate_financial_scenario().


The documentation for this class was generated from the following file: