package routers import ( "encoding/json" "net/http" "recipe-manager/data" "recipe-manager/services/logger" "github.com/go-chi/chi/v5" "go.uber.org/zap" ) // this does different from normal topping fetcher in recipe type ToppingRouter struct { data *data.Data taoLogger *logger.TaoLogger } func NewToppingRouter(data *data.Data, taoLogger *logger.TaoLogger) *ToppingRouter { return &ToppingRouter{ data: data, taoLogger: taoLogger, } } func (tr *ToppingRouter) Route(r chi.Router) { // check incoming request // fmt.Println("topping router", r.Routes()) r.Route("/toppover", func(r chi.Router) { r.Get("/groups", tr.GetToppingGroups) r.Get("/lists", tr.GetToppingLists) }) } // get all topping group func (tr *ToppingRouter) GetToppingGroups(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") // just in case: params country and filename // country := chi.URLParam(r, "country") // filename := chi.URLParam(r, "filename") query := r.URL.Query() country := query.Get("country") filename := query.Get("filename") // get topping groups toppingGroups := tr.data.GetAllToppingGroups(country, filename) // send without new mapping if err := json.NewEncoder(w).Encode(toppingGroups); err != nil { tr.taoLogger.Log.Error("ToppingRouter.GetToppingGroups", zap.Error(err)) http.Error(w, "Internal Error", http.StatusInternalServerError) return } } func (tr *ToppingRouter) GetToppingLists(w http.ResponseWriter, r *http.Request) { w.Header().Add("Content-Type", "application/json") query := r.URL.Query() country := query.Get("country") filename := query.Get("filename") // get toppping list toppingLists := tr.data.GetToppingsList(country, filename) if err := json.NewEncoder(w).Encode(toppingLists); err != nil { tr.taoLogger.Log.Debug("ToppingRouter.GetToppingLists", zap.Error(err)) http.Error(w, "Internal Error", http.StatusInternalServerError) return } }