Finance manager
Лабораторна робота №2 - Документація коду
Loading...
Searching...
No Matches
CurrencyConverter.h
Go to the documentation of this file.
1#pragma once
2#include <string>
3#include <map>
4#include <vector>
5#include <chrono>
6#include <functional>
7
16public:
17 std::string baseCurrency = "USD";
18 std::map<std::string, double> exchangeRate;
19
20 std::string apiKey;
21 std::string apiUrl = "https://api.exchangerate-api.com/v4/latest/"; // Default free API
22
23 std::chrono::system_clock::time_point lastUpdate;
24 std::chrono::minutes cacheTimeout{60};
25
26 double convert(double amount, const std::string &from, const std::string &to);
27 void updateRate(const std::string &currency, double rate);
28
34 bool fetchRatesFromAPI(const std::string &base = "");
35
42 bool fetchRatesForCurrencies(const std::vector<std::string> &currencies, const std::string &base = "");
43
44 void fetchRatesFromAPIAsync(std::function<void(bool)> callback, const std::string &base = "");
45
51
56 void setApiUrl(const std::string &url);
57
62 void setApiKey(const std::string &key);
63
68 bool isCacheValid() const;
69};
70
71inline double CurrencyConverter::convert(double amount, const std::string &from, const std::string &to) {
72 if (from == to) return amount;
73 double fromRate = (exchangeRate.count(from) ? exchangeRate[from] : 1.0);
74 double toRate = (exchangeRate.count(to) ? exchangeRate[to] : 1.0);
75 if (from == baseCurrency) return amount * toRate;
76 if (to == baseCurrency) return amount / fromRate;
77 double inBase = amount / fromRate;
78 return inBase * toRate;
79}
80
81inline void CurrencyConverter::updateRate(const std::string &currency, double rate) {
82 exchangeRate[currency] = rate;
83}
84
85inline void CurrencyConverter::setApiUrl(const std::string &url) {
86 apiUrl = url;
87}
88
89inline void CurrencyConverter::setApiKey(const std::string &key) {
90 apiKey = key;
91}
92
94 auto now = std::chrono::system_clock::now();
95 auto elapsed = std::chrono::duration_cast<std::chrono::minutes>(now - lastUpdate);
96 return elapsed < cacheTimeout;
97}
Handles currency conversion with automatic exchange rate updates from API.
Definition CurrencyConverter.h:15
double convert(double amount, const std::string &from, const std::string &to)
Definition CurrencyConverter.h:71
bool isCacheValid() const
Checks if cached rates are still valid.
Definition CurrencyConverter.h:93
std::chrono::system_clock::time_point lastUpdate
Definition CurrencyConverter.h:23
bool updateRatesIfNeeded()
Automatically updates rates if cache has expired.
Definition CurrencyConverter.cpp:99
bool fetchRatesFromAPI(const std::string &base="")
Fetches exchange rates from the configured API.
Definition CurrencyConverter.cpp:10
std::chrono::minutes cacheTimeout
Definition CurrencyConverter.h:24
std::string apiKey
Definition CurrencyConverter.h:20
void setApiUrl(const std::string &url)
Sets a custom API URL (for different exchange rate providers)
Definition CurrencyConverter.h:85
void setApiKey(const std::string &key)
Sets API key for services that require authentication.
Definition CurrencyConverter.h:89
std::map< std::string, double > exchangeRate
Definition CurrencyConverter.h:18
std::string apiUrl
Definition CurrencyConverter.h:21
bool fetchRatesForCurrencies(const std::vector< std::string > &currencies, const std::string &base="")
Fetches exchange rates for specific currencies.
Definition CurrencyConverter.cpp:72
void updateRate(const std::string &currency, double rate)
Definition CurrencyConverter.h:81
std::string baseCurrency
Definition CurrencyConverter.h:17
void fetchRatesFromAPIAsync(std::function< void(bool)> callback, const std::string &base="")
Definition CurrencyConverter.cpp:89