cbrfWorker/internal/handlers/quote.go
2023-06-22 11:26:42 +03:00

66 lines
1.5 KiB
Go

package handlers
import (
"net/http"
"strconv"
"github.com/danilsolovyov/croupierCbrf/internal/dal"
"github.com/danilsolovyov/croupierCbrf/internal/utils"
)
func (h *Handler) GetQuotes(w http.ResponseWriter, r *http.Request) {
result, err := h.mongo.GetQuoteList(r.Context())
if err != nil {
h.reportError(w, r, http.StatusInternalServerError, err.Error(), err)
return
}
h.sendResponse(w, r, Response{
Success: true,
Message: result,
})
}
func (h *Handler) Translate(response http.ResponseWriter, request *http.Request) {
params := request.URL.Query()
currencyFrom := params.Get("currencyFrom")
currencyTo := params.Get("currencyTo")
value := params.Get("value")
if currencyFrom == "" {
currencyFrom = dal.DefaultCurrency
}
if currencyTo == "" {
currencyTo = dal.DefaultCurrency
}
parsedValue, err := strconv.ParseInt(value, 10, 64)
if err != nil {
h.reportError(response, request, http.StatusBadRequest, "invalid value format", err)
return
}
quotes, err := h.mongo.GetQuoteList(request.Context())
if err != nil {
h.reportError(response, request, http.StatusInternalServerError, err.Error(), err)
return
}
quotesMap := utils.ArrayToMap(quotes, func(quote dal.Quote) string {
return quote.ID
})
result, err := utils.CurrencyExchange(quotesMap, currencyFrom, currencyTo, parsedValue)
if err != nil {
h.reportError(response, request, http.StatusInternalServerError, err.Error(), err)
}
h.sendResponse(response, request, Response{
Success: true,
Message: result,
})
}