From dbea03e0c49be4d030a9068a550981fd9d043b36 Mon Sep 17 00:00:00 2001 From: Sercan Yesildal <sercan.yesildal@gmail.com> Date: Sun, 9 Jul 2023 19:41:13 +0200 Subject: [PATCH] filter added --- service/meal/db/mealdb/client.go | 40 ++++++++++++++++++++++++++++++++ service/meal/db/mealdb/model.go | 2 ++ service/meal/handler/meal.go | 27 +++++++++++++++++++++ service/meal/main.go | 4 ++++ service/meal/model/meal.go | 4 ++-- service/meal/service/meal.go | 9 +++++++ 6 files changed, 84 insertions(+), 2 deletions(-) diff --git a/service/meal/db/mealdb/client.go b/service/meal/db/mealdb/client.go index 0a3de13..1796d8e 100644 --- a/service/meal/db/mealdb/client.go +++ b/service/meal/db/mealdb/client.go @@ -123,6 +123,46 @@ func SearchMealBy(value string, filter model.Filter) ([]*model.MealOverview, err return meals, nil } +func GetFilter(filter model.Filter) (*model.FilterOverview, error) { + path := fmt.Sprintf("list.php?%s=list", filter) + request, err := http.NewRequest(http.MethodGet, baseUrl+path, nil) + if err != nil { + return nil, err + } + response, err := client.Do(request) + if err != nil { + return nil, err + } + var mealResponse *MealResponse + err = json.NewDecoder(response.Body).Decode(&mealResponse) + if err != nil { + return nil, err + } + filterOverview := &model.FilterOverview{} + switch filter { + case model.CATEGORY: + for _, v := range mealResponse.Meals { + if v.StrCategory != nil { + filterOverview.ValidValues = append(filterOverview.ValidValues, *v.StrCategory) + } + } + case model.AREA: + for _, v := range mealResponse.Meals { + if v.StrArea != nil { + filterOverview.ValidValues = append(filterOverview.ValidValues, *v.StrArea) + } + } + case model.INGREDIENT: + for _, v := range mealResponse.Meals { + if v.StrIngredient != nil { + filterOverview.ValidValues = append(filterOverview.ValidValues, *v.StrIngredient) + } + } + } + + return filterOverview, nil +} + func createMeal(currentMeal *Meal) (*model.Meal, error) { meal := &model.Meal{} if currentMeal.IdMeal != nil { diff --git a/service/meal/db/mealdb/model.go b/service/meal/db/mealdb/model.go index 4584377..4cd7116 100644 --- a/service/meal/db/mealdb/model.go +++ b/service/meal/db/mealdb/model.go @@ -8,6 +8,8 @@ type Meal struct { IdMeal *string StrMeal *string StrCategory *string + StrArea *string + StrIngredient *string StrInstructions *string StrMealThumb *string StrIngredient1 *string diff --git a/service/meal/handler/meal.go b/service/meal/handler/meal.go index 069c55b..13b1612 100644 --- a/service/meal/handler/meal.go +++ b/service/meal/handler/meal.go @@ -65,3 +65,30 @@ func SearchMealByIngredient(w http.ResponseWriter, r *http.Request) { } sendJson(w, meals) } + +func GetCategoryOverview(w http.ResponseWriter, r *http.Request) { + categoryOverview, err := service.GetFilter(model.CATEGORY) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + sendJson(w, categoryOverview) +} + +func GetAreaOverview(w http.ResponseWriter, r *http.Request) { + areaOverview, err := service.GetFilter(model.AREA) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + sendJson(w, areaOverview) +} + +func GetIngredientOverview(w http.ResponseWriter, r *http.Request) { + ingredientOverview, err := service.GetFilter(model.INGREDIENT) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + sendJson(w, ingredientOverview) +} diff --git a/service/meal/main.go b/service/meal/main.go index 3427f29..04b06cc 100644 --- a/service/meal/main.go +++ b/service/meal/main.go @@ -15,9 +15,13 @@ func main() { router.HandleFunc("/random", handler.GetRandomMeal).Methods(http.MethodGet) router.HandleFunc("/search/{value}", handler.SearchMealByName).Methods(http.MethodGet) router.HandleFunc("/category/{value}", handler.SearchMealByCategory).Methods(http.MethodGet) + router.HandleFunc("/category", handler.GetCategoryOverview).Methods(http.MethodGet) router.HandleFunc("/area/{value}", handler.SearchMealByArea).Methods(http.MethodGet) + router.HandleFunc("/area", handler.GetAreaOverview).Methods(http.MethodGet) router.HandleFunc("/ingredient/{value}", handler.SearchMealByIngredient).Methods(http.MethodGet) + router.HandleFunc("/ingredient", handler.GetIngredientOverview).Methods(http.MethodGet) router.HandleFunc("/{id}", handler.GetMeal).Methods(http.MethodGet) + fmt.Printf("Server is listening on port :%v\n", port) if err := http.ListenAndServe(fmt.Sprintf(":%v", port), router); err != nil { log.Fatal(err) } diff --git a/service/meal/model/meal.go b/service/meal/model/meal.go index 92c65d0..d83cf19 100644 --- a/service/meal/model/meal.go +++ b/service/meal/model/meal.go @@ -20,8 +20,8 @@ type MealOverview struct { ImagePath string `json:"imagePath"` } -type FilterValues struct { - Values []string `json:"values"` +type FilterOverview struct { + ValidValues []string `json:"validValues"` } const ( diff --git a/service/meal/service/meal.go b/service/meal/service/meal.go index 2f51a74..b3a17fe 100644 --- a/service/meal/service/meal.go +++ b/service/meal/service/meal.go @@ -40,3 +40,12 @@ func SearchMealBy(value string, filter model.Filter) ([]*model.MealOverview, err return meals, nil } + +func GetFilter(filter model.Filter) (*model.FilterOverview, error) { + filterOverview, err := mealdb.GetFilter(filter) + if err != nil { + return nil, err + } + + return filterOverview, nil +} -- GitLab