From 35a00cb9ea990bbf258e82a3c0d0b1a0941f3388 Mon Sep 17 00:00:00 2001 From: Sercan Yesildal <sercan.yesildal@gmail.com> Date: Mon, 10 Jul 2023 02:38:17 +0200 Subject: [PATCH] added handler and routing --- service/planner/handler/group.go | 74 ++++++++++++++++++++++++++ service/planner/handler/meal.go | 82 +++++++++++++++++++++++++++++ service/planner/handler/shopping.go | 45 ++++++++++++++++ service/planner/handler/user.go | 78 +++++++++++++++++++++++++++ service/planner/handler/utils.go | 43 +++++++++++++++ service/planner/main.go | 17 +++++- service/planner/service/meal.go | 13 +++-- service/planner/service/shopping.go | 9 ++-- service/planner/service/user.go | 8 +-- 9 files changed, 356 insertions(+), 13 deletions(-) create mode 100644 service/planner/handler/utils.go diff --git a/service/planner/handler/group.go b/service/planner/handler/group.go index abeebd1..4cd476b 100644 --- a/service/planner/handler/group.go +++ b/service/planner/handler/group.go @@ -1 +1,75 @@ package handler + +import ( + "net/http" + + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service" +) + +func CreateGroup(w http.ResponseWriter, r *http.Request) { + if err := service.CreateGroup(); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} + +func GetGroup(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + group, err := service.GetGroup(id) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + sendJson(w, group) +} + +func DeleteGroup(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteGroup(id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} + +func CreateUserGroupRelation(w http.ResponseWriter, r *http.Request) { + userId, err := getUserId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + groupId, err := getGroupId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateUserGroupRelation(userId, groupId); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} + +func DeleteUserGroupRelation(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteUserGroupRelation(id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} diff --git a/service/planner/handler/meal.go b/service/planner/handler/meal.go index abeebd1..793190e 100644 --- a/service/planner/handler/meal.go +++ b/service/planner/handler/meal.go @@ -1 +1,83 @@ package handler + +import ( + "encoding/json" + "net/http" + + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service" +) + +func getUserMeal(r *http.Request) (*model.UserMeal, error) { + var meal model.UserMeal + err := json.NewDecoder(r.Body).Decode(&meal) + if err != nil { + return nil, err + } + + return &meal, nil +} + +func getGroupMeal(r *http.Request) (*model.GroupMeal, error) { + var meal model.GroupMeal + err := json.NewDecoder(r.Body).Decode(&meal) + if err != nil { + return nil, err + } + + return &meal, nil +} + +func CreateUserMeal(w http.ResponseWriter, r *http.Request) { + meal, err := getUserMeal(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateUserMeal(meal); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, meal) +} + +func DeleteUserMeal(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteUserMeal(id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} + +func CreateGroupMeal(w http.ResponseWriter, r *http.Request) { + meal, err := getGroupMeal(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateGroupMeal(meal); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, meal) +} + +func DeleteGroupMeal(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteGroupMeal(id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} diff --git a/service/planner/handler/shopping.go b/service/planner/handler/shopping.go index abeebd1..ab6254d 100644 --- a/service/planner/handler/shopping.go +++ b/service/planner/handler/shopping.go @@ -1 +1,46 @@ package handler + +import ( + "encoding/json" + "net/http" + + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service" +) + +func getShoppingDate(r *http.Request) (*model.ShoppingDate, error) { + var shoppingDate model.ShoppingDate + err := json.NewDecoder(r.Body).Decode(&shoppingDate) + if err != nil { + return nil, err + } + + return &shoppingDate, nil +} + +func CreateShoppingDate(w http.ResponseWriter, r *http.Request) { + shoppingDate, err := getShoppingDate(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateShoppingDate(shoppingDate); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, shoppingDate) +} + +func DeleteShoppingDate(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteShoppingDate(id) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, nil) +} diff --git a/service/planner/handler/user.go b/service/planner/handler/user.go index abeebd1..3517dbb 100644 --- a/service/planner/handler/user.go +++ b/service/planner/handler/user.go @@ -1 +1,79 @@ package handler + +import ( + "encoding/json" + "net/http" + + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/service" +) + +func getUser(r *http.Request) (*model.User, error) { + var user model.User + err := json.NewDecoder(r.Body).Decode(&user) + if err != nil { + return nil, err + } + + return &user, nil +} + +func CreateUser(w http.ResponseWriter, r *http.Request) { + user, err := getUser(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + if err := service.CreateUser(user); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, user) +} + +func GetUser(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + user, err := service.GetUser(id) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + sendJson(w, user) +} + +func UpdateUser(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + user, err := getUser(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.UpdateUser(id, user) + if err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + return + } + sendJson(w, user) +} + +func DeleteUser(w http.ResponseWriter, r *http.Request) { + id, err := getId(r) + if err != nil { + http.Error(w, err.Error(), http.StatusBadRequest) + return + } + err = service.DeleteUser(id) + 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 new file mode 100644 index 0000000..92a7066 --- /dev/null +++ b/service/planner/handler/utils.go @@ -0,0 +1,43 @@ +package handler + +import ( + "encoding/json" + "net/http" + "strconv" + + "github.com/gorilla/mux" +) + +func sendJson(w http.ResponseWriter, value interface{}) { + w.Header().Set("Content-Type", "application/json") + if err := json.NewEncoder(w).Encode(value); err != nil { + http.Error(w, err.Error(), http.StatusInternalServerError) + } +} + +func getId(r *http.Request) (int, error) { + vars := mux.Vars(r) + id, err := strconv.Atoi(vars["id"]) + if err != nil { + return 0, err + } + return id, nil +} + +func getUserId(r *http.Request) (int, error) { + vars := mux.Vars(r) + id, err := strconv.Atoi(vars["userId"]) + if err != nil { + return 0, err + } + return id, nil +} + +func getGroupId(r *http.Request) (int, error) { + vars := mux.Vars(r) + id, err := strconv.Atoi(vars["groupId"]) + if err != nil { + return 0, err + } + return id, nil +} diff --git a/service/planner/main.go b/service/planner/main.go index f4e311e..7e3687e 100644 --- a/service/planner/main.go +++ b/service/planner/main.go @@ -7,6 +7,7 @@ import ( "github.com/gorilla/mux" "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/handler" ) func init() { @@ -19,7 +20,21 @@ func init() { func main() { port := 8000 router := mux.NewRouter() - + router.HandleFunc("/user/date/{id}", handler.DeleteShoppingDate).Methods(http.MethodDelete) + 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/{id}", handler.GetUser).Methods(http.MethodGet) + router.HandleFunc("/user/{id}", handler.UpdateUser).Methods(http.MethodPut) + router.HandleFunc("/user/{id}", handler.DeleteUser).Methods(http.MethodDelete) + router.HandleFunc("/user", handler.CreateUser).Methods(http.MethodPost) + router.HandleFunc("/group/{groupId}/{userId}", handler.CreateUserGroupRelation).Methods(http.MethodPost) + router.HandleFunc("/group/{groupId}/{userId}", handler.DeleteUserGroupRelation).Methods(http.MethodDelete) + router.HandleFunc("/group/meal/{id}", handler.DeleteGroupMeal).Methods(http.MethodDelete) + router.HandleFunc("/group/meal", handler.CreateGroupMeal).Methods(http.MethodPost) + router.HandleFunc("/group/{id}", handler.GetGroup).Methods(http.MethodGet) + router.HandleFunc("/group/{id}", handler.DeleteGroup).Methods(http.MethodDelete) + router.HandleFunc("/group", handler.CreateGroup).Methods(http.MethodPost) 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/planner/service/meal.go b/service/planner/service/meal.go index e4d76e4..5bc1d17 100644 --- a/service/planner/service/meal.go +++ b/service/planner/service/meal.go @@ -1,9 +1,12 @@ package service -import "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db" +import ( + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model" +) -func CreateUserMeal(userId int, mealId int, date string) error { - err := db.CreateUserMeal(userId, mealId, date) +func CreateUserMeal(meal *model.UserMeal) error { + err := db.CreateUserMeal(meal.UserID, meal.MealID, meal.Date) if err != nil { return err } @@ -20,8 +23,8 @@ func DeleteUserMeal(id int) error { return nil } -func CreateGroupMeal(groupId int, mealId int, date string) error { - err := db.CreateGroupMeal(groupId, mealId, date) +func CreateGroupMeal(meal *model.GroupMeal) error { + err := db.CreateGroupMeal(meal.GroupID, meal.MealID, meal.Date) if err != nil { return err } diff --git a/service/planner/service/shopping.go b/service/planner/service/shopping.go index 7935517..296d0f4 100644 --- a/service/planner/service/shopping.go +++ b/service/planner/service/shopping.go @@ -1,9 +1,12 @@ package service -import "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db" +import ( + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model" +) -func CreateShoppingDate(userId int, date string) error { - err := db.CreateShoppingDate(userId, date) +func CreateShoppingDate(shoppingDate *model.ShoppingDate) error { + err := db.CreateShoppingDate(shoppingDate.UserID, shoppingDate.Date) if err != nil { return err } diff --git a/service/planner/service/user.go b/service/planner/service/user.go index 8ce8fcb..1426ca0 100644 --- a/service/planner/service/user.go +++ b/service/planner/service/user.go @@ -5,8 +5,8 @@ import ( "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/model" ) -func CreateUser(mail string, firstName string, lastName string) error { - err := db.CreateUser(mail, firstName, lastName) +func CreateUser(user *model.User) error { + err := db.CreateUser(user.Mail, user.FirstName, user.LastName) if err != nil { return err } @@ -23,8 +23,8 @@ func GetUser(id int) (*model.User, error) { return user, nil } -func UpdateUser(id int, mail string, firstName string, lastName string) error { - err := db.UpdateUser(id, mail, firstName, lastName) +func UpdateUser(id int, user *model.User) error { + err := db.UpdateUser(id, user.Mail, user.FirstName, user.LastName) if err != nil { return err } -- GitLab