Taobin-Recipe-Manager/server/routers/topping.go

83 lines
1.9 KiB
Go
Raw Normal View History

2024-02-02 17:07:49 +07:00
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) {
2024-02-09 08:54:43 +07:00
// check incoming request
// fmt.Println("topping router", r.Routes())
2024-02-09 08:54:43 +07:00
2024-02-09 17:02:02 +07:00
r.Route("/toppover", func(r chi.Router) {
2024-02-09 08:54:43 +07:00
r.Get("/groups", tr.GetToppingGroups)
r.Get("/lists", tr.GetToppingLists)
2024-02-02 17:07:49 +07:00
})
}
// 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
2024-02-09 08:54:43 +07:00
// country := chi.URLParam(r, "country")
// filename := chi.URLParam(r, "filename")
query := r.URL.Query()
country := query.Get("country")
filename := query.Get("filename")
2024-02-02 17:07:49 +07:00
// 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")
2024-02-09 08:54:43 +07:00
query := r.URL.Query()
country := query.Get("country")
filename := query.Get("filename")
2024-02-02 17:07:49 +07:00
// 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
}
}