Files
code-utils/launch_category.go

116 lines
2.9 KiB
Go
Raw Normal View History

2026-08-15 17:18:00 +08:00
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)
}