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
|
2024-02-23 16:48:23 +07:00
|
|
|
// 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
|
|
|
|
|
}
|
|
|
|
|
}
|