更新若干功能
This commit is contained in:
115
launch_category.go
Normal file
115
launch_category.go
Normal file
@@ -0,0 +1,115 @@
|
||||
package main
|
||||
|
||||
// launch_category.go:启动台一级分类(仅本地,不同步)。
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func (s *Store) ListLaunchCategories() ([]LaunchCategory, error) {
|
||||
rows, e := s.db.Query(`SELECT id,name,sort,created_at FROM launch_categories ORDER BY sort ASC, id ASC`)
|
||||
if e != nil {
|
||||
return nil, e
|
||||
}
|
||||
defer rows.Close()
|
||||
out := []LaunchCategory{}
|
||||
for rows.Next() {
|
||||
var x LaunchCategory
|
||||
if e = rows.Scan(&x.ID, &x.Name, &x.Sort, &x.CreatedAt); e != nil {
|
||||
return nil, e
|
||||
}
|
||||
out = append(out, x)
|
||||
}
|
||||
return out, rows.Err()
|
||||
}
|
||||
|
||||
func (s *Store) SaveLaunchCategory(in LaunchCategory) (LaunchCategory, error) {
|
||||
in.Name = strings.TrimSpace(in.Name)
|
||||
if in.Name == "" {
|
||||
return in, errors.New("NAME_REQUIRED")
|
||||
}
|
||||
now := nowRFC()
|
||||
if in.ID == 0 {
|
||||
var maxSort int
|
||||
_ = s.db.QueryRow(`SELECT COALESCE(MAX(sort),0) FROM launch_categories`).Scan(&maxSort)
|
||||
in.Sort = maxSort + 1
|
||||
res, e := s.db.Exec(`INSERT INTO launch_categories(name,sort,created_at) VALUES(?,?,?)`, in.Name, in.Sort, now)
|
||||
if e != nil {
|
||||
if strings.Contains(strings.ToLower(e.Error()), "unique") {
|
||||
return in, errors.New("CATEGORY_EXISTS")
|
||||
}
|
||||
return in, e
|
||||
}
|
||||
in.ID, _ = res.LastInsertId()
|
||||
in.CreatedAt = now
|
||||
return in, nil
|
||||
}
|
||||
_, e := s.db.Exec(`UPDATE launch_categories SET name=?,sort=? WHERE id=?`, in.Name, in.Sort, in.ID)
|
||||
if e != nil {
|
||||
if strings.Contains(strings.ToLower(e.Error()), "unique") {
|
||||
return in, errors.New("CATEGORY_EXISTS")
|
||||
}
|
||||
return in, e
|
||||
}
|
||||
_ = s.db.QueryRow(`SELECT id,name,sort,created_at FROM launch_categories WHERE id=?`, in.ID).
|
||||
Scan(&in.ID, &in.Name, &in.Sort, &in.CreatedAt)
|
||||
return in, nil
|
||||
}
|
||||
|
||||
func (s *Store) DeleteLaunchCategory(id int64) error {
|
||||
tx, e := s.db.Begin()
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
defer tx.Rollback()
|
||||
if _, e = tx.Exec(`UPDATE launch_apps SET category_id=0 WHERE category_id=?`, id); e != nil {
|
||||
return e
|
||||
}
|
||||
if _, e = tx.Exec(`DELETE FROM launch_categories WHERE id=?`, id); e != nil {
|
||||
return e
|
||||
}
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (s *Store) ReorderLaunchCategories(ids []int64) error {
|
||||
tx, e := s.db.Begin()
|
||||
if e != nil {
|
||||
return e
|
||||
}
|
||||
defer tx.Rollback()
|
||||
for i, id := range ids {
|
||||
if _, e = tx.Exec(`UPDATE launch_categories SET sort=? WHERE id=?`, i+1, id); e != nil {
|
||||
return e
|
||||
}
|
||||
}
|
||||
return tx.Commit()
|
||||
}
|
||||
|
||||
func (a *App) ListLaunchCategories() ([]LaunchCategory, error) {
|
||||
if e := a.ready(); e != nil {
|
||||
return nil, e
|
||||
}
|
||||
return a.store.ListLaunchCategories()
|
||||
}
|
||||
|
||||
func (a *App) SaveLaunchCategory(in LaunchCategory) (LaunchCategory, error) {
|
||||
if e := a.ready(); e != nil {
|
||||
return LaunchCategory{}, e
|
||||
}
|
||||
return a.store.SaveLaunchCategory(in)
|
||||
}
|
||||
|
||||
func (a *App) DeleteLaunchCategory(id int64) error {
|
||||
if e := a.ready(); e != nil {
|
||||
return e
|
||||
}
|
||||
return a.store.DeleteLaunchCategory(id)
|
||||
}
|
||||
|
||||
func (a *App) ReorderLaunchCategories(ids []int64) error {
|
||||
if e := a.ready(); e != nil {
|
||||
return e
|
||||
}
|
||||
return a.store.ReorderLaunchCategories(ids)
|
||||
}
|
||||
Reference in New Issue
Block a user