diff --git a/pkg/api/exchange_rates.go b/pkg/api/exchange_rates.go index 74e61795..db7b32bd 100644 --- a/pkg/api/exchange_rates.go +++ b/pkg/api/exchange_rates.go @@ -1,20 +1,10 @@ package api import ( - "crypto/tls" - "fmt" - "io" - "net/http" - "sort" - "time" - "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/errs" "github.com/mayswind/ezbookkeeping/pkg/exchangerates" - "github.com/mayswind/ezbookkeeping/pkg/log" - "github.com/mayswind/ezbookkeeping/pkg/models" "github.com/mayswind/ezbookkeeping/pkg/settings" - "github.com/mayswind/ezbookkeeping/pkg/utils" ) // ExchangeRatesApi represents exchange rate api @@ -39,98 +29,11 @@ func (a *ExchangeRatesApi) LatestExchangeRateHandler(c *core.WebContext) (any, * return nil, errs.ErrInvalidExchangeRatesDataSource } - uid := c.GetCurrentUid() - - transport := http.DefaultTransport.(*http.Transport).Clone() - utils.SetProxyUrl(transport, a.CurrentConfig().ExchangeRatesProxy) - - if a.CurrentConfig().ExchangeRatesSkipTLSVerify { - transport.TLSClientConfig = &tls.Config{ - InsecureSkipVerify: true, - } - } - - client := &http.Client{ - Transport: transport, - Timeout: time.Duration(a.CurrentConfig().ExchangeRatesRequestTimeout) * time.Millisecond, - } - - requests, err := dataSource.BuildRequests() + exchangeRateResponse, err := dataSource.GetLatestExchangeRates(c, c.GetCurrentUid(), a.container.Current) if err != nil { - log.Errorf(c, "[exchange_rates.LatestExchangeRateHandler] failed to build requests for user \"uid:%d\", because %s", uid, err.Error()) - return nil, errs.ErrFailedToRequestRemoteApi + return nil, errs.Or(err, errs.ErrOperationFailed) } - exchangeRateResps := make([]*models.LatestExchangeRateResponse, 0, len(requests)) - - for i := 0; i < len(requests); i++ { - req := requests[i] - - if len(req.Header.Values("User-Agent")) < 1 { - req.Header.Set("User-Agent", fmt.Sprintf("ezBookkeeping/%s", settings.Version)) - } else if req.Header.Get("User-Agent") == "" { - req.Header.Del("User-Agent") - } - - resp, err := client.Do(req) - - if err != nil { - log.Errorf(c, "[exchange_rates.LatestExchangeRateHandler] failed to request latest exchange rate data for user \"uid:%d\", because %s", uid, err.Error()) - return nil, errs.ErrFailedToRequestRemoteApi - } - - if resp.StatusCode != 200 { - log.Errorf(c, "[exchange_rates.LatestExchangeRateHandler] failed to get latest exchange rate data response for user \"uid:%d\", because response code is not 200", uid) - return nil, errs.ErrFailedToRequestRemoteApi - } - - defer resp.Body.Close() - body, err := io.ReadAll(resp.Body) - - log.Debugf(c, "[exchange_rates.LatestExchangeRateHandler] response#%d is %s", i, body) - - exchangeRateResp, err := dataSource.Parse(c, body) - - if err != nil { - log.Errorf(c, "[exchange_rates.LatestExchangeRateHandler] failed to parse response for user \"uid:%d\", because %s", uid, err.Error()) - return nil, errs.Or(err, errs.ErrFailedToRequestRemoteApi) - } - - exchangeRateResps = append(exchangeRateResps, exchangeRateResp) - } - - lastExchangeRateResponse := exchangeRateResps[len(exchangeRateResps)-1] - allExchangeRatesMap := make(map[string]string) - - for i := 0; i < len(exchangeRateResps); i++ { - exchangeRateResp := exchangeRateResps[i] - - for j := 0; j < len(exchangeRateResp.ExchangeRates); j++ { - exchangeRate := exchangeRateResp.ExchangeRates[j] - allExchangeRatesMap[exchangeRate.Currency] = exchangeRate.Rate - } - } - - allExchangeRatesMap[lastExchangeRateResponse.BaseCurrency] = "1" - allExchangeRates := make(models.LatestExchangeRateSlice, 0, len(allExchangeRatesMap)) - - for currency, rate := range allExchangeRatesMap { - allExchangeRates = append(allExchangeRates, &models.LatestExchangeRate{ - Currency: currency, - Rate: rate, - }) - } - - sort.Sort(allExchangeRates) - - finalExchangeRateResponse := &models.LatestExchangeRateResponse{ - DataSource: lastExchangeRateResponse.DataSource, - ReferenceUrl: lastExchangeRateResponse.ReferenceUrl, - UpdateTime: lastExchangeRateResponse.UpdateTime, - BaseCurrency: lastExchangeRateResponse.BaseCurrency, - ExchangeRates: allExchangeRates, - } - - return finalExchangeRateResponse, nil + return exchangeRateResponse, nil } diff --git a/pkg/exchangerates/bank_of_canada_datasource.go b/pkg/exchangerates/bank_of_canada_datasource.go index e05a9b6a..edb647d3 100644 --- a/pkg/exchangerates/bank_of_canada_datasource.go +++ b/pkg/exchangerates/bank_of_canada_datasource.go @@ -25,7 +25,7 @@ const bankOfCanadaDataUpdateDateTimezone = "America/Toronto" // BankOfCanadaDataSource defines the structure of exchange rates data source of bank of Canada type BankOfCanadaDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // BankOfCanadaExchangeRateData represents the whole data from bank of Canada diff --git a/pkg/exchangerates/bank_of_israel_datasource.go b/pkg/exchangerates/bank_of_israel_datasource.go index dec22867..4f5a3980 100644 --- a/pkg/exchangerates/bank_of_israel_datasource.go +++ b/pkg/exchangerates/bank_of_israel_datasource.go @@ -26,7 +26,7 @@ const bankOfIsraelDataUpdateDateFormat = "2006-01-02T15:04:05.9999999Z" // BankOfIsraelDataSource defines the structure of exchange rates data source of bank of Israel type BankOfIsraelDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // BankOfIsraelExchangeRateData represents the whole data from bank of Israel diff --git a/pkg/exchangerates/bank_of_russia_datasource.go b/pkg/exchangerates/bank_of_russia_datasource.go index 29cc9d84..015df9d5 100644 --- a/pkg/exchangerates/bank_of_russia_datasource.go +++ b/pkg/exchangerates/bank_of_russia_datasource.go @@ -28,7 +28,7 @@ const bankOfRussiaUpdateDateTimezone = "Europe/Moscow" // BankOfRussiaDataSource defines the structure of exchange rates data source of bank of Russia type BankOfRussiaDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // BankOfRussiaExchangeRateData represents the whole data from bank of Russia diff --git a/pkg/exchangerates/central_bank_of_hungary_datasource.go b/pkg/exchangerates/central_bank_of_hungary_datasource.go index f9f264ae..fdd73ec7 100644 --- a/pkg/exchangerates/central_bank_of_hungary_datasource.go +++ b/pkg/exchangerates/central_bank_of_hungary_datasource.go @@ -27,7 +27,7 @@ const centralBankOfHungaryUpdateDateTimezone = "Europe/Budapest" // CentralBankOfHungaryDataSource defines the structure of exchange rates data source of central bank of Hungary type CentralBankOfHungaryDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // CentralBankOfHungaryExchangeRateServiceResponse represents the response data of exchange rate service for central bank of Hungary diff --git a/pkg/exchangerates/central_bank_of_myanmar_datasource.go b/pkg/exchangerates/central_bank_of_myanmar_datasource.go index 146776cf..96112239 100644 --- a/pkg/exchangerates/central_bank_of_myanmar_datasource.go +++ b/pkg/exchangerates/central_bank_of_myanmar_datasource.go @@ -30,7 +30,7 @@ var centralBankOfMyanmarSpecialCurrencyUnits = map[string]int32{ // CentralBankOfMyanmarDataSource defines the structure of exchange rates data source of central bank of Myanmar type CentralBankOfMyanmarDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // CentralBankOfMyanmarExchangeRate represents the exchange rate data from central bank of Myanmar diff --git a/pkg/exchangerates/central_bank_of_uzbekistan_datasource.go b/pkg/exchangerates/central_bank_of_uzbekistan_datasource.go index 2c552cd7..0e210a6f 100644 --- a/pkg/exchangerates/central_bank_of_uzbekistan_datasource.go +++ b/pkg/exchangerates/central_bank_of_uzbekistan_datasource.go @@ -24,7 +24,7 @@ const centralBankOfUzbekistanUpdateDateTimezone = "Asia/Samarkand" // CentralBankOfUzbekistanDataSource defines the structure of exchange rates data source of the central bank of the Republic of Uzbekistan type CentralBankOfUzbekistanDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // CentralBankOfUzbekistanExchangeRates represents the exchange rates data from the central bank of the Republic of Uzbekistan diff --git a/pkg/exchangerates/czech_national_bank_datasource.go b/pkg/exchangerates/czech_national_bank_datasource.go index 8972a482..3dc7ef09 100644 --- a/pkg/exchangerates/czech_national_bank_datasource.go +++ b/pkg/exchangerates/czech_national_bank_datasource.go @@ -25,7 +25,7 @@ const czechNationalBankDataUpdateDateTimezone = "Europe/Prague" // CzechNationalBankDataSource defines the structure of exchange rates data source of Czech National Bank type CzechNationalBankDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // BuildRequests returns the Czech National Bank exchange rates http requests diff --git a/pkg/exchangerates/danmarks_national_bank_datasource.go b/pkg/exchangerates/danmarks_national_bank_datasource.go index ba9dbf6a..c133a4f7 100644 --- a/pkg/exchangerates/danmarks_national_bank_datasource.go +++ b/pkg/exchangerates/danmarks_national_bank_datasource.go @@ -26,7 +26,7 @@ const danmarksNationalbankDataUpdateDateTimezone = "Europe/Copenhagen" // DanmarksNationalbankDataSource defines the structure of exchange rates data source of Danmarks Nationalbank type DanmarksNationalbankDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // DanmarksNationalbankExchangeRateData represents the whole data from Danmarks Nationalbank diff --git a/pkg/exchangerates/euro_central_bank_datasource.go b/pkg/exchangerates/euro_central_bank_datasource.go index 092bc75e..4aeb53c6 100644 --- a/pkg/exchangerates/euro_central_bank_datasource.go +++ b/pkg/exchangerates/euro_central_bank_datasource.go @@ -26,7 +26,7 @@ const euroCentralBankDataUpdateDateTimezone = "Europe/Berlin" // EuroCentralBankDataSource defines the structure of exchange rates data source of euro central bank type EuroCentralBankDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // EuroCentralBankExchangeRateData represents the whole data from euro central bank diff --git a/pkg/exchangerates/exchange_rates_datasource.go b/pkg/exchangerates/exchange_rates_datasource.go index b16caec3..cbe87b31 100644 --- a/pkg/exchangerates/exchange_rates_datasource.go +++ b/pkg/exchangerates/exchange_rates_datasource.go @@ -1,17 +1,13 @@ package exchangerates import ( - "net/http" - "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/models" + "github.com/mayswind/ezbookkeeping/pkg/settings" ) // ExchangeRatesDataSource defines the structure of exchange rates data source type ExchangeRatesDataSource interface { - // BuildRequests returns the http requests - BuildRequests() ([]*http.Request, error) - - // Parse returns the common response entity according to the data source raw response - Parse(c core.Context, content []byte) (*models.LatestExchangeRateResponse, error) + // GetLatestExchangeRates returns the common response entities + GetLatestExchangeRates(c core.Context, uid int64, currentConfig *settings.Config) (*models.LatestExchangeRateResponse, error) } diff --git a/pkg/exchangerates/exchange_rates_datasource_container.go b/pkg/exchangerates/exchange_rates_datasource_container.go index 6efa0c2e..bd888cc9 100644 --- a/pkg/exchangerates/exchange_rates_datasource_container.go +++ b/pkg/exchangerates/exchange_rates_datasource_container.go @@ -18,55 +18,55 @@ var ( // InitializeExchangeRatesDataSource initializes the current exchange rates data source according to the config func InitializeExchangeRatesDataSource(config *settings.Config) error { if config.ExchangeRatesDataSource == settings.ReserveBankOfAustraliaDataSource { - Container.Current = &ReserveBankOfAustraliaDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&ReserveBankOfAustraliaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.BankOfCanadaDataSource { - Container.Current = &BankOfCanadaDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&BankOfCanadaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CzechNationalBankDataSource { - Container.Current = &CzechNationalBankDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&CzechNationalBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.DanmarksNationalbankDataSource { - Container.Current = &DanmarksNationalbankDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&DanmarksNationalbankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.EuroCentralBankDataSource { - Container.Current = &EuroCentralBankDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&EuroCentralBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfGeorgiaDataSource { - Container.Current = &NationalBankOfGeorgiaDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&NationalBankOfGeorgiaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CentralBankOfHungaryDataSource { - Container.Current = &CentralBankOfHungaryDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&CentralBankOfHungaryDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.BankOfIsraelDataSource { - Container.Current = &BankOfIsraelDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&BankOfIsraelDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CentralBankOfMyanmarDataSource { - Container.Current = &CentralBankOfMyanmarDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&CentralBankOfMyanmarDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NorgesBankDataSource { - Container.Current = &NorgesBankDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&NorgesBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfPolandDataSource { - Container.Current = &NationalBankOfPolandDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&NationalBankOfPolandDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfRomaniaDataSource { - Container.Current = &NationalBankOfRomaniaDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&NationalBankOfRomaniaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.BankOfRussiaDataSource { - Container.Current = &BankOfRussiaDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&BankOfRussiaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.SwissNationalBankDataSource { - Container.Current = &SwissNationalBankDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&SwissNationalBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfUkraineDataSource { - Container.Current = &NationalBankOfUkraineDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&NationalBankOfUkraineDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CentralBankOfUzbekistanDataSource { - Container.Current = &CentralBankOfUzbekistanDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&CentralBankOfUzbekistanDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.InternationalMonetaryFundDataSource { - Container.Current = &InternationalMonetaryFundDataSource{} + Container.Current = newCommonHttpExchangeRatesDataSource(&InternationalMonetaryFundDataSource{}) return nil } diff --git a/pkg/exchangerates/http_exchange_rates_datasource.go b/pkg/exchangerates/http_exchange_rates_datasource.go new file mode 100644 index 00000000..c4fb59a8 --- /dev/null +++ b/pkg/exchangerates/http_exchange_rates_datasource.go @@ -0,0 +1,133 @@ +package exchangerates + +import ( + "crypto/tls" + "fmt" + "io" + "net/http" + "sort" + "time" + + "github.com/mayswind/ezbookkeeping/pkg/core" + "github.com/mayswind/ezbookkeeping/pkg/errs" + "github.com/mayswind/ezbookkeeping/pkg/log" + "github.com/mayswind/ezbookkeeping/pkg/models" + "github.com/mayswind/ezbookkeeping/pkg/settings" + "github.com/mayswind/ezbookkeeping/pkg/utils" +) + +// HttpExchangeRatesDataSource defines the structure of http exchange rates data source +type HttpExchangeRatesDataSource interface { + // BuildRequests returns the http requests + BuildRequests() ([]*http.Request, error) + + // Parse returns the common response entity according to the data source raw response + Parse(c core.Context, content []byte) (*models.LatestExchangeRateResponse, error) +} + +// CommonHttpExchangeRatesDataSource defines the structure of common http exchange rates data source +type CommonHttpExchangeRatesDataSource struct { + ExchangeRatesDataSource + dataSource HttpExchangeRatesDataSource +} + +func (e *CommonHttpExchangeRatesDataSource) GetLatestExchangeRates(c core.Context, uid int64, currentConfig *settings.Config) (*models.LatestExchangeRateResponse, error) { + transport := http.DefaultTransport.(*http.Transport).Clone() + utils.SetProxyUrl(transport, currentConfig.ExchangeRatesProxy) + + if currentConfig.ExchangeRatesSkipTLSVerify { + transport.TLSClientConfig = &tls.Config{ + InsecureSkipVerify: true, + } + } + + client := &http.Client{ + Transport: transport, + Timeout: time.Duration(currentConfig.ExchangeRatesRequestTimeout) * time.Millisecond, + } + + requests, err := e.dataSource.BuildRequests() + + if err != nil { + log.Errorf(c, "[http_exchange_rates_datasource.GetLatestExchangeRates] failed to build requests for user \"uid:%d\", because %s", uid, err.Error()) + return nil, errs.ErrFailedToRequestRemoteApi + } + + exchangeRateResps := make([]*models.LatestExchangeRateResponse, 0, len(requests)) + + for i := 0; i < len(requests); i++ { + req := requests[i] + + if len(req.Header.Values("User-Agent")) < 1 { + req.Header.Set("User-Agent", fmt.Sprintf("ezBookkeeping/%s", settings.Version)) + } else if req.Header.Get("User-Agent") == "" { + req.Header.Del("User-Agent") + } + + resp, err := client.Do(req) + + if err != nil { + log.Errorf(c, "[http_exchange_rates_datasource.GetLatestExchangeRates] failed to request latest exchange rate data for user \"uid:%d\", because %s", uid, err.Error()) + return nil, errs.ErrFailedToRequestRemoteApi + } + + if resp.StatusCode != 200 { + log.Errorf(c, "[http_exchange_rates_datasource.GetLatestExchangeRates] failed to get latest exchange rate data response for user \"uid:%d\", because response code is not 200", uid) + return nil, errs.ErrFailedToRequestRemoteApi + } + + defer resp.Body.Close() + body, err := io.ReadAll(resp.Body) + + log.Debugf(c, "[http_exchange_rates_datasource.GetLatestExchangeRates] response#%d is %s", i, body) + + exchangeRateResp, err := e.dataSource.Parse(c, body) + + if err != nil { + log.Errorf(c, "[http_exchange_rates_datasource.GetLatestExchangeRates] failed to parse response for user \"uid:%d\", because %s", uid, err.Error()) + return nil, errs.Or(err, errs.ErrFailedToRequestRemoteApi) + } + + exchangeRateResps = append(exchangeRateResps, exchangeRateResp) + } + + lastExchangeRateResponse := exchangeRateResps[len(exchangeRateResps)-1] + allExchangeRatesMap := make(map[string]string) + + for i := 0; i < len(exchangeRateResps); i++ { + exchangeRateResp := exchangeRateResps[i] + + for j := 0; j < len(exchangeRateResp.ExchangeRates); j++ { + exchangeRate := exchangeRateResp.ExchangeRates[j] + allExchangeRatesMap[exchangeRate.Currency] = exchangeRate.Rate + } + } + + allExchangeRatesMap[lastExchangeRateResponse.BaseCurrency] = "1" + allExchangeRates := make(models.LatestExchangeRateSlice, 0, len(allExchangeRatesMap)) + + for currency, rate := range allExchangeRatesMap { + allExchangeRates = append(allExchangeRates, &models.LatestExchangeRate{ + Currency: currency, + Rate: rate, + }) + } + + sort.Sort(allExchangeRates) + + finalExchangeRateResponse := &models.LatestExchangeRateResponse{ + DataSource: lastExchangeRateResponse.DataSource, + ReferenceUrl: lastExchangeRateResponse.ReferenceUrl, + UpdateTime: lastExchangeRateResponse.UpdateTime, + BaseCurrency: lastExchangeRateResponse.BaseCurrency, + ExchangeRates: allExchangeRates, + } + + return finalExchangeRateResponse, nil +} + +func newCommonHttpExchangeRatesDataSource(dataSource HttpExchangeRatesDataSource) *CommonHttpExchangeRatesDataSource { + return &CommonHttpExchangeRatesDataSource{ + dataSource: dataSource, + } +} diff --git a/pkg/api/exchange_rates_test.go b/pkg/exchangerates/http_exchange_rates_datasource_test.go similarity index 97% rename from pkg/api/exchange_rates_test.go rename to pkg/exchangerates/http_exchange_rates_datasource_test.go index 0598ea58..593b4884 100644 --- a/pkg/api/exchange_rates_test.go +++ b/pkg/exchangerates/http_exchange_rates_datasource_test.go @@ -1,4 +1,4 @@ -package api +package exchangerates import ( "net/http/httptest" @@ -8,7 +8,6 @@ import ( "github.com/stretchr/testify/assert" "github.com/mayswind/ezbookkeeping/pkg/core" - "github.com/mayswind/ezbookkeeping/pkg/exchangerates" "github.com/mayswind/ezbookkeeping/pkg/models" "github.com/mayswind/ezbookkeeping/pkg/settings" "github.com/mayswind/ezbookkeeping/pkg/utils" @@ -318,27 +317,19 @@ func executeLatestExchangeRateHandler(t *testing.T, dataSourceType string) *mode ExchangeRatesSkipTLSVerify: true, } - settingsContainer := &settings.ConfigContainer{ - Current: config, - } - - err := exchangerates.InitializeExchangeRatesDataSource(config) + err := InitializeExchangeRatesDataSource(config) assert.Nil(t, err) - exchangeRatesApi := &ExchangeRatesApi{ - ApiUsingConfig: ApiUsingConfig{ - container: settingsContainer, - }, - } + dataSource := Container.Current + assert.NotNil(t, dataSource) ginContext, _ := gin.CreateTestContext(httptest.NewRecorder()) - - response, err := exchangeRatesApi.LatestExchangeRateHandler(&core.WebContext{ + context := &core.WebContext{ Context: ginContext, - }) - assert.Nil(t, err) + } - exchangeRateResponse := response.(*models.LatestExchangeRateResponse) + exchangeRateResponse, err := dataSource.GetLatestExchangeRates(context, context.GetCurrentUid(), config) + assert.Nil(t, err) assert.NotNil(t, exchangeRateResponse) return exchangeRateResponse diff --git a/pkg/exchangerates/international_monetary_fund_datasource.go b/pkg/exchangerates/international_monetary_fund_datasource.go index f05a74ba..f3565e27 100644 --- a/pkg/exchangerates/international_monetary_fund_datasource.go +++ b/pkg/exchangerates/international_monetary_fund_datasource.go @@ -27,7 +27,7 @@ var internationalMonetaryFundCurrencyNameCodeMap map[string]string // InternationalMonetaryFundDataSource defines the structure of exchange rates data source of international monetary fund type InternationalMonetaryFundDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } func init() { diff --git a/pkg/exchangerates/national_bank_of_georgia_datasource.go b/pkg/exchangerates/national_bank_of_georgia_datasource.go index 7eb3363f..2153c3f1 100644 --- a/pkg/exchangerates/national_bank_of_georgia_datasource.go +++ b/pkg/exchangerates/national_bank_of_georgia_datasource.go @@ -23,7 +23,7 @@ const nationalBankOfGeorgiaUpdateDateFormat = "2006-01-02T15:04:05.999Z" // NationalBankOfGeorgiaDataSource defines the structure of exchange rates data source of national bank of Georgia type NationalBankOfGeorgiaDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // NationalBankOfGeorgiaExchangeRates represents the exchange rates data from national bank of Georgia diff --git a/pkg/exchangerates/national_bank_of_poland_datasource.go b/pkg/exchangerates/national_bank_of_poland_datasource.go index 43d2c1d3..dd91f2c6 100644 --- a/pkg/exchangerates/national_bank_of_poland_datasource.go +++ b/pkg/exchangerates/national_bank_of_poland_datasource.go @@ -28,7 +28,7 @@ const nationalBankOfPolandDataUpdateDateTimezone = "Europe/Warsaw" // NationalBankOfPolandDataSource defines the structure of exchange rates data source of National Bank of Poland type NationalBankOfPolandDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // NationalBankOfPolandExchangeRateData represents the whole data from National Bank of Poland diff --git a/pkg/exchangerates/national_bank_of_romania_datasource.go b/pkg/exchangerates/national_bank_of_romania_datasource.go index ea4528cd..6b7a1af2 100644 --- a/pkg/exchangerates/national_bank_of_romania_datasource.go +++ b/pkg/exchangerates/national_bank_of_romania_datasource.go @@ -26,7 +26,7 @@ const nationalBankOfRomaniaUpdateDateTimezone = "Europe/Bucharest" // NationalBankOfRomaniaDataSource defines the structure of exchange rates data source of national bank of Romania type NationalBankOfRomaniaDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // NationalBankOfRomaniaExchangeRateData represents the whole data from national bank of Romania diff --git a/pkg/exchangerates/national_bank_of_ukraine_datasource.go b/pkg/exchangerates/national_bank_of_ukraine_datasource.go index cf3d1d6c..5d81afbc 100644 --- a/pkg/exchangerates/national_bank_of_ukraine_datasource.go +++ b/pkg/exchangerates/national_bank_of_ukraine_datasource.go @@ -23,7 +23,7 @@ const nationalBankOfUkraineUpdateDateFormat = "02.01.2006" // NationalBankOfUkraineDataSource defines the structure of exchange rates data source of National Bank of Ukraine type NationalBankOfUkraineDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // NationalBankOfUkraineExchangeRates represents the exchange rates data from National Bank of Ukraine diff --git a/pkg/exchangerates/norges_bank_datasource.go b/pkg/exchangerates/norges_bank_datasource.go index f745a467..0528d680 100644 --- a/pkg/exchangerates/norges_bank_datasource.go +++ b/pkg/exchangerates/norges_bank_datasource.go @@ -27,7 +27,7 @@ const norgesBankUpdateDateTimezone = "Europe/Oslo" // NorgesBankDataSource defines the structure of exchange rates data source of Norges Bank type NorgesBankDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // NorgesBankExchangeRateData represents the whole data from Norges Bank diff --git a/pkg/exchangerates/reserve_bank_of_australia_datasource.go b/pkg/exchangerates/reserve_bank_of_australia_datasource.go index 0eca300a..b2e15eb0 100644 --- a/pkg/exchangerates/reserve_bank_of_australia_datasource.go +++ b/pkg/exchangerates/reserve_bank_of_australia_datasource.go @@ -25,7 +25,7 @@ const reserveBankOfAustraliaDataUpdateDateFormat = "2006-01-02T15:04:05Z07:00" // ReserveBankOfAustraliaDataSource defines the structure of exchange rates data source of the reserve bank of Australia type ReserveBankOfAustraliaDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // ReserveBankOfAustraliaData represents the whole data from the reserve bank of Australia diff --git a/pkg/exchangerates/swiss_national_bank_datasource.go b/pkg/exchangerates/swiss_national_bank_datasource.go index 814133e9..e2c67af1 100644 --- a/pkg/exchangerates/swiss_national_bank_datasource.go +++ b/pkg/exchangerates/swiss_national_bank_datasource.go @@ -27,7 +27,7 @@ const swissNationalBankExchangeRatePeriodDateFormat = "2006-01-02" // SwissNationalBankDataSource defines the structure of exchange rates data source of the reserve Swiss National Bank type SwissNationalBankDataSource struct { - ExchangeRatesDataSource + HttpExchangeRatesDataSource } // SwissNationalBankData represents the whole data from the reserve Swiss National Bank