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