From 82054b47b64e339d94d2aec96c20e8dd70e1e3bd Mon Sep 17 00:00:00 2001 From: Sercan Yesildal <sercan.yesildal@gmail.com> Date: Mon, 10 Jul 2023 18:55:22 +0200 Subject: [PATCH] fav feature added --- service/planner/db/client.go | 55 ++++++++++++++++++++++++++++++++ service/planner/db/init.sql | 9 ++++++ service/planner/handler/meal.go | 37 +++++++++++++++++++++ service/planner/handler/utils.go | 9 ++++++ service/planner/main.go | 2 ++ service/planner/model/user.go | 1 + service/planner/service/meal.go | 18 +++++++++++ 7 files changed, 131 insertions(+) diff --git a/service/planner/db/client.go b/service/planner/db/client.go index 2a8e4b4..7a55e50 100644 --- a/service/planner/db/client.go +++ b/service/planner/db/client.go @@ -148,6 +148,20 @@ func GetUser(id int) (*model.User, error) { user.ShoppingDates = append(user.ShoppingDates, date) } + queryFavoriteMeals, err := udb.Query("SELECT mealId FROM favoriteMeal WHERE userId = ?;", id) + if err != nil { + return nil, err + } + defer queryFavoriteMeals.Close() + for queryFavoriteMeals.Next() { + var mealId int + err = queryFavoriteMeals.Scan(&mealId) + if err != nil { + continue + } + user.FavoriteMeal = append(user.FavoriteMeal, mealId) + } + return user, nil } @@ -422,6 +436,47 @@ func DeleteUserMeal(id int) error { return nil } +func CreateFavoriteMeal(userId int, mealId int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + queryCheck, err := udb.Query("SELECT * FROM favoriteMeal WHERE userId = ? AND mealId = ?;", userId, mealId) + if err != nil { + return err + } + defer queryCheck.Close() + if queryCheck.Next() { + return errors.New("favorite meal already added") + } + + query, err := udb.Query("INSERT INTO favoriteMeal (userId, mealId) VALUES (?, ?);", userId, mealId) + if err != nil { + return err + } + query.Close() + + return nil +} + +func DeleteFavoriteMeal(userId int, mealId int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("DELETE FROM favoriteMeal WHERE userId = ? AND mealId = ?;", userId, mealId) + if err != nil { + return err + } + query.Close() + + return nil +} + func CreateGroupMeal(groupId int, mealId int, date string) error { udb, err := sql.Open(driverName, cfg.FormatDSN()) if err != nil { diff --git a/service/planner/db/init.sql b/service/planner/db/init.sql index 710a1ce..b1e6939 100644 --- a/service/planner/db/init.sql +++ b/service/planner/db/init.sql @@ -28,6 +28,15 @@ CREATE TABLE FOREIGN KEY (`userId`) REFERENCES userAccount(`id`) ); +CREATE TABLE + IF NOT EXISTS `favoriteMeal` ( + `id` int NOT NULL AUTO_INCREMENT, + `userId` int NOT NULL, + `mealId` int NOT NULL, + PRIMARY KEY (`id`), + FOREIGN KEY (`userId`) REFERENCES userAccount(`id`) + ); + CREATE TABLE IF NOT EXISTS `groupMeal` ( `id` int NOT NULL AUTO_INCREMENT, diff --git a/service/planner/handler/meal.go b/service/planner/handler/meal.go index 793190e..46784f3 100644 --- a/service/planner/handler/meal.go +++ b/service/planner/handler/meal.go @@ -81,3 +81,40 @@ func DeleteGroupMeal(w http.ResponseWriter, r *http.Request) { } sendJson(w, nil) } + +func CreateFavoriteMeal(w http.ResponseWriter, r *http.Request) { + userId, err := getUserId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + mealId, err := getMealId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateFavoriteMeal(userId, mealId); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} + +func DeleteFavoriteMeal(w http.ResponseWriter, r *http.Request) { + userId, err := getUserId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + mealId, err := getMealId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteFavoriteMeal(userId, mealId) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} diff --git a/service/planner/handler/utils.go b/service/planner/handler/utils.go index 60cefdc..02ca54a 100644 --- a/service/planner/handler/utils.go +++ b/service/planner/handler/utils.go @@ -42,6 +42,15 @@ func getGroupId(r *http.Request) (int, error) { return id, nil } +func getMealId(r *http.Request) (int, error) { + vars := mux.Vars(r) + id, err := strconv.Atoi(vars["mealId"]) + if err != nil { + return 0, err + } + return id, nil +} + func getValue(r *http.Request) string { vars := mux.Vars(r) return vars["value"] diff --git a/service/planner/main.go b/service/planner/main.go index f17e725..ad739ae 100644 --- a/service/planner/main.go +++ b/service/planner/main.go @@ -38,6 +38,8 @@ func main() { router.HandleFunc("/user/date", handler.CreateShoppingDate).Methods(http.MethodPost) router.HandleFunc("/user/meal/{id}", handler.DeleteUserMeal).Methods(http.MethodDelete) router.HandleFunc("/user/meal", handler.CreateUserMeal).Methods(http.MethodPost) + router.HandleFunc("/user/{userId}/{mealId}", handler.CreateFavoriteMeal).Methods(http.MethodPost) + router.HandleFunc("/user/{userId}/{mealId}", handler.DeleteFavoriteMeal).Methods(http.MethodDelete) router.HandleFunc("/user/{id}", handler.GetUser).Methods(http.MethodGet) router.HandleFunc("/user/{id}", handler.UpdateUser).Methods(http.MethodPut) router.HandleFunc("/user/{id}", handler.DeleteUser).Methods(http.MethodDelete) diff --git a/service/planner/model/user.go b/service/planner/model/user.go index 58d6325..571e717 100644 --- a/service/planner/model/user.go +++ b/service/planner/model/user.go @@ -6,6 +6,7 @@ type User struct { FirstName string `json:"firstName"` LastName string `json:"lastName"` GroupIds []int `json:"groupIds"` + FavoriteMeal []int `json:"favoriteMeals"` Meals []UserMealWithId `json:"meals"` ShoppingDates []ShoppingDateWithId `json:"shoppingDates"` } diff --git a/service/planner/service/meal.go b/service/planner/service/meal.go index 5bc1d17..f3352e5 100644 --- a/service/planner/service/meal.go +++ b/service/planner/service/meal.go @@ -40,3 +40,21 @@ func DeleteGroupMeal(id int) error { return nil } + +func CreateFavoriteMeal(userId int, mealId int) error { + err := db.CreateFavoriteMeal(userId, mealId) + if err != nil { + return err + } + + return nil +} + +func DeleteFavoriteMeal(userId int, mealId int) error { + err := db.DeleteFavoriteMeal(userId, mealId) + if err != nil { + return err + } + + return nil +} -- GitLab