Taobin-Recipe-Manager/server/routers/topping.go
pakintada@gmail.com 16e0e4f9d8 add topping WIP
2024-02-02 17:07:49 +07:00

69 lines
1.8 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) {
r.Route("/toppings", func(r chi.Router) {
r.Get("/groups/{country}/{filename}", tr.GetToppingGroups)
r.Get("/lists/{country}/{filename}", 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")
// 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")
country := chi.URLParam(r, "country")
filename := chi.URLParam(r, "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
}
}