package exchangerates import ( "github.com/mayswind/ezbookkeeping/pkg/core" "github.com/mayswind/ezbookkeeping/pkg/errs" "github.com/mayswind/ezbookkeeping/pkg/models" "github.com/mayswind/ezbookkeeping/pkg/settings" ) // ExchangeRatesDataSourceContainer contains the current exchange rates data source type ExchangeRatesDataSourceContainer struct { current ExchangeRatesDataSource } // Initialize a exchange rates data source container singleton instance var ( Container = &ExchangeRatesDataSourceContainer{} ) // 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 = newCommonHttpExchangeRatesDataSource(&ReserveBankOfAustraliaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.BankOfCanadaDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&BankOfCanadaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CzechNationalBankDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&CzechNationalBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.DanmarksNationalbankDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&DanmarksNationalbankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.EuroCentralBankDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&EuroCentralBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfGeorgiaDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&NationalBankOfGeorgiaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CentralBankOfHungaryDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&CentralBankOfHungaryDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.BankOfIsraelDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&BankOfIsraelDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CentralBankOfMyanmarDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&CentralBankOfMyanmarDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NorgesBankDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&NorgesBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfPolandDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&NationalBankOfPolandDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfRomaniaDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&NationalBankOfRomaniaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.BankOfRussiaDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&BankOfRussiaDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.SwissNationalBankDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&SwissNationalBankDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.NationalBankOfUkraineDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&NationalBankOfUkraineDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.CentralBankOfUzbekistanDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&CentralBankOfUzbekistanDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.InternationalMonetaryFundDataSource { Container.current = newCommonHttpExchangeRatesDataSource(&InternationalMonetaryFundDataSource{}) return nil } else if config.ExchangeRatesDataSource == settings.UserCustomExchangeRatesDataSource { Container.current = newUserCustomExchangeRatesDataSource() return nil } return errs.ErrInvalidExchangeRatesDataSource } // GetLatestExchangeRates returns the latest exchange rates data from the current exchange rates data source func (e *ExchangeRatesDataSourceContainer) GetLatestExchangeRates(c core.Context, uid int64, currentConfig *settings.Config) (*models.LatestExchangeRateResponse, error) { if Container.current == nil { return nil, errs.ErrInvalidExchangeRatesDataSource } return e.current.GetLatestExchangeRates(c, uid, currentConfig) }