浏览代码

no longer making duplicates. need to organize all my methods more. will do later

aeth 6 天之前
父节点
当前提交
a51b189c4c
共有 1 个文件被更改,包括 61 次插入1 次删除
  1. 61 1
      pkg/storage/storage.go

+ 61 - 1
pkg/storage/storage.go

@@ -242,6 +242,51 @@ func (s *SQLiteRepo) GetDropdownElementByName(text string) (LinkPair, bool) {
 
 
 }
 }
 
 
+// get Admin table entry by its display name, link, and category.
+func (s *SQLiteRepo) GetAdminTableEntry(displayName, link, category string) (TableData, bool) {
+	rows := s.db.QueryRow("SELECT * FROM admin WHERE display_name = ? AND link = ? AND category = ?", displayName, link, category)
+	var item TableData
+	var id int
+	if err := rows.Scan(&id, &item.DisplayName, &item.Link, &category); err != nil {
+		if errors.Is(err, sql.ErrNoRows) {
+			return item, false
+		}
+		log.Fatal(err)
+	}
+	return item, true
+
+}
+
+// get navbar entry.
+func (s *SQLiteRepo) GetNavbarLink(link, redirect string) (NavBarItem, bool) {
+	rows := s.db.QueryRow("SELECT * FROM navbar WHERE link = ? AND redirect = ?", link, redirect)
+	var item NavBarItem
+	var id int
+	if err := rows.Scan(&id, &item.Png, &item.Link, &item.Redirect); err != nil {
+		if errors.Is(err, sql.ErrNoRows) {
+			return item, false
+		}
+		log.Fatal(err)
+	}
+	return item, true
+
+}
+
+// get an asset from the store
+func (s *SQLiteRepo) GetAsset(name string) (Asset, bool) {
+	rows := s.db.QueryRow("SELECT * FROM assets WHERE name = ?", name)
+	var item Asset
+	var id int
+	if err := rows.Scan(&id, &item.Name, &item.Data); err != nil {
+		if errors.Is(err, sql.ErrNoRows) {
+			return item, false
+		}
+		log.Fatal(err)
+	}
+	return item, true
+
+}
+
 /*
 /*
 Get all nav bar items. Returns a list of NavBarItem structs with the png data, the file name, and the redirect location of the icon
 Get all nav bar items. Returns a list of NavBarItem structs with the png data, the file name, and the redirect location of the icon
 
 
@@ -470,7 +515,7 @@ func (s *SQLiteRepo) AddMenuItem(item LinkPair) error {
 	_, found := s.GetDropdownElementByName(item.Text)
 	_, found := s.GetDropdownElementByName(item.Text)
 	if found {
 	if found {
 		tx.Rollback()
 		tx.Rollback()
-		return errors.New("Row exists.")
+		return ErrDuplicate
 	}
 	}
 	stmt, _ := tx.Prepare("INSERT INTO menu(link, text) VALUES (?,?)")
 	stmt, _ := tx.Prepare("INSERT INTO menu(link, text) VALUES (?,?)")
 	_, err = stmt.Exec(item.Link, item.Text)
 	_, err = stmt.Exec(item.Link, item.Text)
@@ -493,6 +538,11 @@ func (s *SQLiteRepo) AddNavbarItem(item NavBarItem) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	_, found := s.GetNavbarLink(item.Link, item.Redirect)
+	if found {
+		tx.Rollback()
+		return ErrDuplicate
+	}
 	stmt, err := tx.Prepare("INSERT INTO navbar(png, link, redirect) VALUES (?,?,?)")
 	stmt, err := tx.Prepare("INSERT INTO navbar(png, link, redirect) VALUES (?,?,?)")
 	if err != nil {
 	if err != nil {
 		tx.Rollback()
 		tx.Rollback()
@@ -519,6 +569,11 @@ func (s *SQLiteRepo) AddAsset(name string, data []byte) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	_, found := s.GetAsset(name)
+	if found {
+		tx.Rollback()
+		return ErrDuplicate
+	}
 	stmt, _ := tx.Prepare("INSERT INTO assets(name, data) VALUES (?,?)")
 	stmt, _ := tx.Prepare("INSERT INTO assets(name, data) VALUES (?,?)")
 	_, err = stmt.Exec(name, data)
 	_, err = stmt.Exec(name, data)
 	if err != nil {
 	if err != nil {
@@ -562,6 +617,11 @@ func (s *SQLiteRepo) AddAdminTableEntry(item TableData, category string) error {
 	if err != nil {
 	if err != nil {
 		return err
 		return err
 	}
 	}
+	_, found := s.GetAdminTableEntry(item.DisplayName, item.Link, category)
+	if found {
+		tx.Rollback()
+		return ErrDuplicate
+	}
 	stmt, _ := tx.Prepare("INSERT INTO admin (display_name, link, category) VALUES (?,?,?)")
 	stmt, _ := tx.Prepare("INSERT INTO admin (display_name, link, category) VALUES (?,?,?)")
 	_, err = stmt.Exec(item.DisplayName, item.Link, category)
 	_, err = stmt.Exec(item.DisplayName, item.Link, category)
 	if err != nil {
 	if err != nil {