Taobin-Recipe-Manager/server/routers/topping.go
2024-02-23 16:48:23 +07:00

82 lines
1.9 KiB
Go

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
}
}