github.com/mikejeuga/temperature-converter@v0.0.0-20220721135550-2cf6fcec7145/src/internal/adapters/transport/server/handlers/conversion-handler.go (about) 1 package handlers 2 3 import ( 4 "fmt" 5 "github.com/gorilla/mux" 6 "github.com/mikejeuga/temperature-converter/models" 7 "github.com/mikejeuga/temperature-converter/src/internal/domain" 8 "net/http" 9 "strconv" 10 ) 11 12 type ConversionHandler struct { 13 degreeConverter domain.Converter 14 } 15 16 func (h ConversionHandler) ConvertCtoF(w http.ResponseWriter, r *http.Request) { 17 vars := mux.Vars(r) 18 temp, err := strconv.ParseFloat(vars["temp"], 64) 19 if err != nil { 20 http.Error(w, "Error parsing temperature", http.StatusInternalServerError) 21 } 22 23 f, err := h.degreeConverter.ConvertCtoF(models.Celsius(temp)) 24 if err != nil { 25 http.Error(w, err.Error(), http.StatusInternalServerError) 26 } 27 28 fmt.Fprint(w, f) 29 30 } 31 32 func (h ConversionHandler) ConvertFtoC(w http.ResponseWriter, r *http.Request) { 33 vars := mux.Vars(r) 34 temp, err := strconv.ParseFloat(vars["temp"], 64) 35 if err != nil { 36 http.Error(w, "Error parsing temperature", http.StatusInternalServerError) 37 } 38 39 f, err := h.degreeConverter.ConvertFtoC(models.Fahrenheit(temp)) 40 if err != nil { 41 http.Error(w, err.Error(), http.StatusInternalServerError) 42 } 43 44 fmt.Fprint(w, f) 45 } 46 47 func NewConversionHandler(degreeConverter domain.Converter) *ConversionHandler { 48 return &ConversionHandler{degreeConverter: degreeConverter} 49 }