diff --git a/service/planner/handler/group.go b/service/planner/handler/group.go index abeebd162ee44d9c076ced7c51310c2501f7b7af..4cd476ba1ad918f2f7a64fcf0d4693a8d30d43b4 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 abeebd162ee44d9c076ced7c51310c2501f7b7af..793190ec2d4bac04e09197c73107e41062f2ece0 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 abeebd162ee44d9c076ced7c51310c2501f7b7af..ab6254d723d40b289af79434008469cc2c4c38c3 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 abeebd162ee44d9c076ced7c51310c2501f7b7af..3517dbbddc234c0d91ce85c72a4665d00102b380 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 0000000000000000000000000000000000000000..92a7066b5edc415fe8333499672c7f1cebd3477c --- /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 f4e311e00b804cbe79298526973d5e4defd7673d..7e3687ebcd8d9370beeade5f1521800845a9a10d 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 e4d76e40b8d02eb650e9f15ebc33dd5a7c3cec1f..5bc1d17690c70e4a77e4617903024e08b5ed2a39 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 79355170dd4b74411ca29c653d7cb2ced9d3f15c..296d0f4182cfcfd60ff87135b9922ccb2f150fc5 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 8ce8fcbfb0acab6a574a6442b1cee7fa2dbf0690..1426ca0286d39c0d208da46cb0647c54018d2b92 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 }