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) }