66 lines
1.5 KiB
Go
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,
|
|
})
|
|
}
|