diff --git a/README.md b/README.md index 9bc9a90..1540cfb 100644 --- a/README.md +++ b/README.md @@ -130,9 +130,9 @@ curl "http://localhost:8000/v1/currencies" { "date": "2025-12-05", "data": [ - {"symbol": "EUR", "name": "Euro"}, - {"symbol": "USD", "name": "US Dollar"}, - {"symbol": "GBP", "name": "British Pound Sterling"} + {"symbol": "EUR", "name": "Euro", "sign": "€"}, + {"symbol": "USD", "name": "US Dollar", "sign": "$"}, + {"symbol": "GBP", "name": "British Pound Sterling", "sign": "£"} ] } ``` diff --git a/handlers/named_symbols_test.go b/handlers/named_symbols_test.go index f96394d..29125dd 100644 --- a/handlers/named_symbols_test.go +++ b/handlers/named_symbols_test.go @@ -49,9 +49,9 @@ func TestGetCurrenciesHandler(t *testing.T) { mockErr: nil, wantStatusCode: http.StatusOK, wantSymbols: []NamedSymbol{ - {Symbol: "EUR", Name: "Euro"}, - {Symbol: "USD", Name: "US Dollar"}, - {Symbol: "GBP", Name: "British Pound Sterling"}, + {Symbol: "EUR", Name: "Euro", Sign: "€"}, + {Symbol: "USD", Name: "US Dollar", Sign: "$"}, + {Symbol: "GBP", Name: "British Pound Sterling", Sign: "£"}, }, }, { @@ -114,6 +114,9 @@ func TestGetCurrenciesHandler(t *testing.T) { if record.Data[i].Name != expected.Name { t.Errorf("GetCurrencies() data[%d].name = %q, want %q", i, record.Data[i].Name, expected.Name) } + if record.Data[i].Sign != expected.Sign { + t.Errorf("GetCurrencies() data[%d].sign = %q, want %q", i, record.Data[i].Sign, expected.Sign) + } } } }) diff --git a/handlers/service.go b/handlers/service.go index ead8989..01651df 100644 --- a/handlers/service.go +++ b/handlers/service.go @@ -17,9 +17,15 @@ type SymbolsRecord struct { Symbols []string `json:"symbols" firestore:"symbols"` } +type CurrencyInfo struct { + Name string + Sign string +} + type NamedSymbol struct { Symbol string `json:"symbol"` Name string `json:"name"` + Sign string `json:"sign"` } type CurrenciesRecord struct { @@ -85,11 +91,9 @@ func (s *RatesService) GetAllNamedSymbols() (*CurrenciesRecord, error) { named := make([]NamedSymbol, 0, len(record.Symbols)) for _, symbol := range record.Symbols { - name, ok := CurrencyNames[symbol] - if !ok { - name = symbol + if info, ok := CurrencyNames[symbol]; ok { + named = append(named, NamedSymbol{Symbol: symbol, Name: info.Name, Sign: info.Sign}) } - named = append(named, NamedSymbol{Symbol: symbol, Name: name}) } return &CurrenciesRecord{Date: record.Date, Data: named}, nil @@ -119,49 +123,49 @@ func MakeSymbolsArray(raw string, base string) []string { return symbolsArray } -var CurrencyNames = map[string]string{ - "EUR": "Euro", - "USD": "US Dollar", - "JPY": "Japanese Yen", - "BGN": "Bulgarian Lev", - "CYP": "Cypriot Pound", - "CZK": "Czech Koruna", - "DKK": "Danish Krone", - "EEK": "Estonian Kroon", - "GBP": "British Pound Sterling", - "HUF": "Hungarian Forint", - "LTL": "Lithuanian Litas", - "LVL": "Latvian Lats", - "MTL": "Maltese Lira", - "PLN": "Polish Zloty", - "ROL": "Romanian Leu (old)", - "RON": "Romanian Leu", - "SEK": "Swedish Krona", - "SIT": "Slovenian Tolar", - "SKK": "Slovak Koruna", - "CHF": "Swiss Franc", - "ISK": "Icelandic Krona", - "ILS": "Israeli New Shekel", - "NOK": "Norwegian Krone", - "HRK": "Croatian Kuna", - "RUB": "Russian Ruble", - "TRL": "Turkish Lira (old)", - "TRY": "Turkish Lira", - "AUD": "Australian Dollar", - "BRL": "Brazilian Real", - "CAD": "Canadian Dollar", - "CNY": "Chinese Yuan", - "HKD": "Hong Kong Dollar", - "IDR": "Indonesian Rupiah", - "INR": "Indian Rupee", - "KRW": "South Korean Won", - "MXN": "Mexican Peso", - "MYR": "Malaysian Ringgit", - "NZD": "New Zealand Dollar", - "PHP": "Philippine Peso", - "SGD": "Singapore Dollar", - "THB": "Thai Baht", - "ZAR": "South African Rand", +var CurrencyNames = map[string]CurrencyInfo{ + "EUR": {Name: "Euro", Sign: "€"}, + "USD": {Name: "US Dollar", Sign: "$"}, + "JPY": {Name: "Japanese Yen", Sign: "¥"}, + "BGN": {Name: "Bulgarian Lev", Sign: "лв"}, + "CYP": {Name: "Cypriot Pound", Sign: "£"}, + "CZK": {Name: "Czech Koruna", Sign: "Kč"}, + "DKK": {Name: "Danish Krone", Sign: "kr"}, + "EEK": {Name: "Estonian Kroon", Sign: "kr"}, + "GBP": {Name: "British Pound Sterling", Sign: "£"}, + "HUF": {Name: "Hungarian Forint", Sign: "Ft"}, + "LTL": {Name: "Lithuanian Litas", Sign: "Lt"}, + "LVL": {Name: "Latvian Lats", Sign: "Ls"}, + "MTL": {Name: "Maltese Lira", Sign: "₤"}, + "PLN": {Name: "Polish Zloty", Sign: "zł"}, + "ROL": {Name: "Romanian Leu (old)", Sign: "lei"}, + "RON": {Name: "Romanian Leu", Sign: "lei"}, + "SEK": {Name: "Swedish Krona", Sign: "kr"}, + "SIT": {Name: "Slovenian Tolar", Sign: "SIT"}, + "SKK": {Name: "Slovak Koruna", Sign: "Sk"}, + "CHF": {Name: "Swiss Franc", Sign: "Fr"}, + "ISK": {Name: "Icelandic Krona", Sign: "kr"}, + "ILS": {Name: "Israeli New Shekel", Sign: "₪"}, + "NOK": {Name: "Norwegian Krone", Sign: "kr"}, + "HRK": {Name: "Croatian Kuna", Sign: "kn"}, + "RUB": {Name: "Russian Ruble", Sign: "₽"}, + "TRL": {Name: "Turkish Lira (old)", Sign: "₤"}, + "TRY": {Name: "Turkish Lira", Sign: "₺"}, + "AUD": {Name: "Australian Dollar", Sign: "$"}, + "BRL": {Name: "Brazilian Real", Sign: "R$"}, + "CAD": {Name: "Canadian Dollar", Sign: "$"}, + "CNY": {Name: "Chinese Yuan", Sign: "¥"}, + "HKD": {Name: "Hong Kong Dollar", Sign: "$"}, + "IDR": {Name: "Indonesian Rupiah", Sign: "Rp"}, + "INR": {Name: "Indian Rupee", Sign: "₹"}, + "KRW": {Name: "South Korean Won", Sign: "₩"}, + "MXN": {Name: "Mexican Peso", Sign: "$"}, + "MYR": {Name: "Malaysian Ringgit", Sign: "RM"}, + "NZD": {Name: "New Zealand Dollar", Sign: "$"}, + "PHP": {Name: "Philippine Peso", Sign: "₱"}, + "SGD": {Name: "Singapore Dollar", Sign: "$"}, + "THB": {Name: "Thai Baht", Sign: "฿"}, + "ZAR": {Name: "South African Rand", Sign: "R"}, } var Currencies = func() []string { diff --git a/test/integration/integration_test.go b/test/integration/integration_test.go index 16d7f32..217ddba 100644 --- a/test/integration/integration_test.go +++ b/test/integration/integration_test.go @@ -25,6 +25,7 @@ type ErrorResponse struct { type NamedSymbol struct { Symbol string `json:"symbol"` Name string `json:"name"` + Sign string `json:"sign"` } type CurrenciesRecord struct { @@ -393,9 +394,9 @@ func TestGetCurrenciesEndpoint(t *testing.T) { } wantSymbols := []NamedSymbol{ - {Symbol: "EUR", Name: "Euro"}, - {Symbol: "USD", Name: "US Dollar"}, - {Symbol: "GBP", Name: "British Pound Sterling"}, + {Symbol: "EUR", Name: "Euro", Sign: "€"}, + {Symbol: "USD", Name: "US Dollar", Sign: "$"}, + {Symbol: "GBP", Name: "British Pound Sterling", Sign: "£"}, } if len(record.Data) != len(wantSymbols) { @@ -410,6 +411,9 @@ func TestGetCurrenciesEndpoint(t *testing.T) { if got.Name != want.Name { t.Errorf("data[%d].name = %q, want %q", i, got.Name, want.Name) } + if got.Sign != want.Sign { + t.Errorf("data[%d].sign = %q, want %q", i, got.Sign, want.Sign) + } } })