package user import ( "database/sql" "net/http" "sort" "github.com/imdotdev/im.dev/server/pkg/db" "github.com/imdotdev/im.dev/server/pkg/e" "github.com/imdotdev/im.dev/server/pkg/models" ) func SubmitNavbar(nav *models.Navbar) *e.Error { var err error if nav.ID == 0 { _, err = db.Conn.Exec("INSERT INTO user_navbar (user_id,label,type,value,weight) VALUES (?,?,?,?,?)", nav.UserID, nav.Label, nav.Type, nav.Value, nav.Weight) } else { _, err = db.Conn.Exec("UPDATE user_navbar SET label=?,type=?,value=?,weight=? WHERE id=? and user_id=?", nav.Label, nav.Type, nav.Value, nav.Weight, nav.ID, nav.UserID) } if err != nil { logger.Warn("submit user navbar error", "error", err) return e.New(http.StatusInternalServerError, e.Internal) } return nil } func GetNavbars(userID string) (models.Navbars, *e.Error) { rows, err := db.Conn.Query("SELECT id,label,type,value,weight FROM user_navbar WHERE user_id=?", userID) if err != nil { logger.Warn("get user navbar error", "error", err) return nil, e.New(http.StatusInternalServerError, e.Internal) } navs := make(models.Navbars, 0) for rows.Next() { nav := &models.Navbar{} rows.Scan(&nav.ID, &nav.Label, &nav.Type, &nav.Value, &nav.Weight) navs = append(navs, nav) } sort.Sort(navs) return navs, nil } func DeleteNavbar(userID string, id string) *e.Error { _, err := db.Conn.Exec("DELETE FROM user_navbar WHERE id=? and user_id=?", id, userID) if err != nil { logger.Warn("submit user navbar error", "error", err) return e.New(http.StatusInternalServerError, e.Internal) } return nil } func GetNavbar(id string) (*models.Navbar, *e.Error) { nav := &models.Navbar{} err := db.Conn.QueryRow("SELECT user_id,label,type,value,weight FROM user_navbar WHERE id=?", id).Scan( &nav.UserID, &nav.Label, &nav.Type, &nav.Value, &nav.Weight, ) if err != nil { if err == sql.ErrNoRows { return nil, e.New(http.StatusNotFound, e.NotFound) } logger.Warn("select navbar error", "error", err) return nil, e.New(http.StatusInternalServerError, e.Internal) } return nav, nil }