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  }