From b68c14ddf59208739dc1cdb203d67d7ab4675cc1 Mon Sep 17 00:00:00 2001 From: Sercan Yesildal <sercan.yesildal@gmail.com> Date: Mon, 10 Jul 2023 01:40:48 +0200 Subject: [PATCH] db client functions implemented --- service/planner/db/client.go | 287 ++++++++++++++++++++++++++++++++--- service/planner/main.go | 8 + 2 files changed, 271 insertions(+), 24 deletions(-) diff --git a/service/planner/db/client.go b/service/planner/db/client.go index da05ebe..4240b83 100644 --- a/service/planner/db/client.go +++ b/service/planner/db/client.go @@ -10,34 +10,32 @@ import ( const driverName = "mysql" -type MariaDB struct { - cfg *mysql.Config -} +var cfg *mysql.Config -func New() (*MariaDB, error) { +func Init() error { vp := viper.New() - vp.AddConfigPath("./data/mariadb") + vp.AddConfigPath("./service/planner/db") vp.SetConfigName("config") vp.SetConfigType("json") err := vp.ReadInConfig() if err != nil { - return nil, err + return err } - return &MariaDB{ - cfg: &mysql.Config{ - User: vp.GetString("user"), - Passwd: vp.GetString("passwd"), - Addr: vp.GetString("addr"), - DBName: vp.GetString("dbName"), - AllowNativePasswords: true, - }, - }, nil + cfg = &mysql.Config{ + User: vp.GetString("user"), + Passwd: vp.GetString("passwd"), + Addr: vp.GetString("addr"), + DBName: vp.GetString("dbName"), + AllowNativePasswords: true, + } + + return nil } -func (db *MariaDB) CreateUser(mail string, firstName string, lastName string) error { - udb, err := sql.Open(driverName, db.cfg.FormatDSN()) +func CreateUser(mail string, firstName string, lastName string) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) if err != nil { return err } @@ -52,8 +50,8 @@ func (db *MariaDB) CreateUser(mail string, firstName string, lastName string) er return nil } -func (db *MariaDB) GetUser(id int) (*model.User, error) { - udb, err := sql.Open(driverName, db.cfg.FormatDSN()) +func GetUser(id int) (*model.User, error) { + udb, err := sql.Open(driverName, cfg.FormatDSN()) if err != nil { return nil, err } @@ -103,8 +101,8 @@ func (db *MariaDB) GetUser(id int) (*model.User, error) { return user, nil } -func (db *MariaDB) UpdateUser(id int, mail string, firstName string, lastName string) error { - udb, err := sql.Open(driverName, db.cfg.FormatDSN()) +func UpdateUser(id int, mail string, firstName string, lastName string) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) if err != nil { return err } @@ -119,14 +117,255 @@ func (db *MariaDB) UpdateUser(id int, mail string, firstName string, lastName st return nil } -func (db *MariaDB) DeleteUser(id int) error { - udb, err := sql.Open(driverName, db.cfg.FormatDSN()) +func DeleteUser(id int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + queryMeals, err := udb.Query("DELETE FROM userMeal WHERE userId = ?;", id) + if err != nil { + return err + } + queryMeals.Close() + + queryShoppingDates, err := udb.Query("DELETE FROM shoppingDate WHERE userId = ?;", id) + if err != nil { + return err + } + queryShoppingDates.Close() + + queryRelation, err := udb.Query("DELETE FROM userGroupRelation WHERE userId = ?;", id) + if err != nil { + return err + } + queryRelation.Close() + + query, err := udb.Query("DELETE FROM userAccount WHERE id = ?;", id) + if err != nil { + return err + } + query.Close() + + return nil +} + +func CreateGroup() error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("INSERT INTO userGroup;") + if err != nil { + return err + } + query.Close() + + return nil +} + +func GetGroup(id int) (*model.Group, error) { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return nil, err + } + defer udb.Close() + + query, err := udb.Query("SELECT * FROM userGroup WHERE id = ?;", id) + if err != nil { + return nil, err + } + defer query.Close() + group := &model.Group{} + for query.Next() { + err = query.Scan(&group.ID) + if err != nil { + return nil, err + } + } + + queryMeals, err := udb.Query("SELECT groupId, mealId, date FROM groupMeal WHERE groupId = ?;", id) + if err != nil { + return nil, err + } + defer queryMeals.Close() + for queryMeals.Next() { + var meal model.GroupMeal + err = queryMeals.Scan(&meal.GroupID, &meal.MealID, &meal.Date) + if err != nil { + continue + } + group.Meals = append(group.Meals, meal) + } + + queryUserIds, err := udb.Query("SELECT userId FROM userGroupRelation WHERE groupId = ?;", id) + if err != nil { + return nil, err + } + defer queryUserIds.Close() + for queryUserIds.Next() { + var userId int + err = queryUserIds.Scan(&userId) + if err != nil { + continue + } + group.UserIDs = append(group.UserIDs, userId) + } + + return group, nil +} + +func DeleteGroup(id int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + queryMeals, err := udb.Query("DELETE FROM groupMeal WHERE groupId = ?;", id) + if err != nil { + return err + } + queryMeals.Close() + + queryRelation, err := udb.Query("DELETE FROM userGroupRelation WHERE groupId = ?;", id) + if err != nil { + return err + } + queryRelation.Close() + + query, err := udb.Query("DELETE FROM userGroup WHERE id = ?;", id) + if err != nil { + return err + } + query.Close() + + return nil +} + +func CreateUserMeal(userId int, mealId int, date string) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("INSERT INTO userMeal (userId, mealId, date) VALUES (?, ?, ?);", userId, mealId, date) + if err != nil { + return err + } + query.Close() + + return nil +} + +func DeleteUserMeal(id int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("DELETE FROM userMeal WHERE id = ?;", id) + 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 { + return err + } + defer udb.Close() + + query, err := udb.Query("INSERT INTO groupMeal (groupId, mealId, date) VALUES (?, ?, ?);", groupId, mealId, date) + if err != nil { + return err + } + query.Close() + + return nil +} + +func DeleteGroupMeal(id int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("DELETE FROM groupMeal WHERE id = ?;", id) + if err != nil { + return err + } + query.Close() + + return nil +} + +func CreateShoppingDate(userId int, date string) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("INSERT INTO shoppingDate (userId, date) VALUES (?, ?);", userId, date) + if err != nil { + return err + } + query.Close() + + return nil +} + +func DeleteShoppingDate(id int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("DELETE FROM shoppingDate WHERE id = ?;", id) + if err != nil { + return err + } + query.Close() + + return nil +} + +func CreateUserGroupRelation(userId int, groupId int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) + if err != nil { + return err + } + defer udb.Close() + + query, err := udb.Query("INSERT INTO userGroupRelation (userId, groupId) VALUES (?, ?);", userId, groupId) + if err != nil { + return err + } + query.Close() + + return nil +} + +func DeleteUserGroupRelation(id int) error { + udb, err := sql.Open(driverName, cfg.FormatDSN()) if err != nil { return err } defer udb.Close() - query, err := udb.Query("DELETE FROM userAccount WHERE userId = ?;", id) + query, err := udb.Query("DELETE FROM userGroupRelation WHERE id = ?;", id) if err != nil { return err } diff --git a/service/planner/main.go b/service/planner/main.go index 476fe4f..f4e311e 100644 --- a/service/planner/main.go +++ b/service/planner/main.go @@ -6,8 +6,16 @@ import ( "net/http" "github.com/gorilla/mux" + "gitlab.reutlingen-university.de/yesildas/mealplanner2go/service/planner/db" ) +func init() { + err := db.Init() + if err != nil { + log.Fatal(err) + } +} + func main() { port := 8000 router := mux.NewRouter() -- GitLab