refactor: simplify db and cmd flags, reduce code duplication
- Abstract property flags into addPropertyFlags in cmd/root.go and apply to commands - Remove unused GetUserByUsername from db.go (it's redundant with service.resolveUserIDByName) - Use configured user in WithMentions directly in inbox command - Refactor resolve methods in node_service_sqlite.go to reduce duplication
This commit is contained in:
@@ -13,7 +13,7 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var cDue, cContent, cDummy string
|
var cDue, cContent string
|
||||||
var cTags, cRels []string
|
var cTags, cRels []string
|
||||||
|
|
||||||
var createCmd = &cobra.Command{
|
var createCmd = &cobra.Command{
|
||||||
@@ -60,11 +60,9 @@ var createCmd = &cobra.Command{
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(createCmd)
|
rootCmd.AddCommand(createCmd)
|
||||||
|
addPropertyFlags(createCmd)
|
||||||
|
createCmd.Flags().Set("type", "issue")
|
||||||
f := createCmd.Flags()
|
f := createCmd.Flags()
|
||||||
f.StringVar(&cDummy, "type", "issue", "")
|
|
||||||
f.StringVar(&cDummy, "status", "", "")
|
|
||||||
f.StringVar(&cDummy, "prio", "", "")
|
|
||||||
f.StringVar(&cDummy, "namespace", "", "")
|
|
||||||
f.StringVar(&cDue, "due", "", "")
|
f.StringVar(&cDue, "due", "", "")
|
||||||
f.StringVar(&cContent, "content", "", "")
|
f.StringVar(&cContent, "content", "", "")
|
||||||
f.StringArrayVar(&cTags, "tag", nil, "")
|
f.StringArrayVar(&cTags, "tag", nil, "")
|
||||||
|
|||||||
11
cmd/inbox.go
11
cmd/inbox.go
@@ -18,17 +18,8 @@ var inboxCmd = &cobra.Command{
|
|||||||
fmt.Fprintln(os.Stderr, err)
|
fmt.Fprintln(os.Stderr, err)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
userID, err := d.GetUserByUsername(cfg.GetUser())
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintln(os.Stderr, err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if userID == "" {
|
|
||||||
output.PrintNodes(cmd.OutOrStdout(), nil, jsonFlag)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
svc := service.NewSQLiteNodeService(d.DB, cfg.GetUser())
|
svc := service.NewSQLiteNodeService(d.DB, cfg.GetUser())
|
||||||
if nodes, err := svc.List(service.WithMentions(userID)); err == nil {
|
if nodes, err := svc.List(service.WithMentions(cfg.GetUser())); err == nil {
|
||||||
output.PrintNodes(cmd.OutOrStdout(), nodes, jsonFlag)
|
output.PrintNodes(cmd.OutOrStdout(), nodes, jsonFlag)
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -10,7 +10,7 @@ import (
|
|||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
var lDummy, lAssignee string
|
var lAssignee string
|
||||||
var lTags []string
|
var lTags []string
|
||||||
|
|
||||||
var listCmd = &cobra.Command{
|
var listCmd = &cobra.Command{
|
||||||
@@ -32,11 +32,8 @@ var listCmd = &cobra.Command{
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(listCmd)
|
rootCmd.AddCommand(listCmd)
|
||||||
|
addPropertyFlags(listCmd)
|
||||||
f := listCmd.Flags()
|
f := listCmd.Flags()
|
||||||
f.StringVar(&lDummy, "type", "", "")
|
|
||||||
f.StringVar(&lDummy, "status", "", "")
|
|
||||||
f.StringVar(&lDummy, "prio", "", "")
|
|
||||||
f.StringVar(&lDummy, "namespace", "", "")
|
|
||||||
f.StringVar(&lAssignee, "assignee", "", "")
|
f.StringVar(&lAssignee, "assignee", "", "")
|
||||||
f.StringArrayVar(&lTags, "tag", nil, "")
|
f.StringArrayVar(&lTags, "tag", nil, "")
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,3 +76,10 @@ func transformArgs(args []string) []string {
|
|||||||
func init() {
|
func init() {
|
||||||
rootCmd.PersistentFlags().BoolVar(&jsonFlag, "json", false, "")
|
rootCmd.PersistentFlags().BoolVar(&jsonFlag, "json", false, "")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func addPropertyFlags(cmd *cobra.Command) {
|
||||||
|
cmd.Flags().String("type", "", "node type")
|
||||||
|
cmd.Flags().String("status", "", "node status")
|
||||||
|
cmd.Flags().String("prio", "", "node priority")
|
||||||
|
cmd.Flags().String("namespace", "", "node namespace")
|
||||||
|
}
|
||||||
|
|||||||
@@ -14,7 +14,7 @@ import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
uTitle, uContent, uDue, dummy string
|
uTitle, uContent, uDue string
|
||||||
uClearDue bool
|
uClearDue bool
|
||||||
uAddTags, uRmTags, uAddRels, uRmRels []string
|
uAddTags, uRmTags, uAddRels, uRmRels []string
|
||||||
)
|
)
|
||||||
@@ -118,13 +118,12 @@ var updateCmd = &cobra.Command{
|
|||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
rootCmd.AddCommand(updateCmd)
|
rootCmd.AddCommand(updateCmd)
|
||||||
|
addPropertyFlags(updateCmd)
|
||||||
f := updateCmd.Flags()
|
f := updateCmd.Flags()
|
||||||
f.StringVar(&uTitle, "title", "", "")
|
f.StringVar(&uTitle, "title", "", "")
|
||||||
f.StringVar(&uContent, "content", "", "")
|
f.StringVar(&uContent, "content", "", "")
|
||||||
f.StringVar(&uDue, "due", "", "")
|
f.StringVar(&uDue, "due", "", "")
|
||||||
f.BoolVar(&uClearDue, "clear-due", false, "")
|
f.BoolVar(&uClearDue, "clear-due", false, "")
|
||||||
f.StringVar(&dummy, "status", "", "")
|
|
||||||
f.StringVar(&dummy, "prio", "", "")
|
|
||||||
f.StringArrayVar(&uAddTags, "tag", nil, "")
|
f.StringArrayVar(&uAddTags, "tag", nil, "")
|
||||||
f.StringArrayVar(&uRmTags, "tag-remove", nil, "")
|
f.StringArrayVar(&uRmTags, "tag-remove", nil, "")
|
||||||
f.StringArrayVar(&uAddRels, "rel", nil, "")
|
f.StringArrayVar(&uAddRels, "rel", nil, "")
|
||||||
|
|||||||
11
db/db.go
11
db/db.go
@@ -70,14 +70,3 @@ func Open(path string) (*DB, error) {
|
|||||||
return &DB{DB: db, path: path}, nil
|
return &DB{DB: db, path: path}, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (db *DB) GetUserByUsername(username string) (string, error) {
|
|
||||||
var id string
|
|
||||||
err := db.QueryRow(`
|
|
||||||
SELECT n.id FROM nodes n
|
|
||||||
JOIN tags t ON n.id = t.node_id
|
|
||||||
WHERE n.title = ? AND t.tag = '_type::user'`, username).Scan(&id)
|
|
||||||
if err == sql.ErrNoRows {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
return id, err
|
|
||||||
}
|
|
||||||
|
|||||||
@@ -296,31 +296,29 @@ func (s *sqliteNodeService) Update(node *models.Node) error {
|
|||||||
return tx.Commit()
|
return tx.Commit()
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *sqliteNodeService) resolveUserIDByNameTx(tx *sql.Tx, username string) (string, error) {
|
func (s *sqliteNodeService) resolveIDByNameAndTypeTx(tx *sql.Tx, title, nodeType string) (string, error) {
|
||||||
var id string
|
var id string
|
||||||
|
query := `
|
||||||
|
SELECT n.id FROM nodes n
|
||||||
|
JOIN tags t ON n.id = t.node_id
|
||||||
|
WHERE n.title = ? AND t.tag = ?
|
||||||
|
LIMIT 1
|
||||||
|
`
|
||||||
|
tag := "_type::" + nodeType
|
||||||
var err error
|
var err error
|
||||||
if tx != nil {
|
if tx != nil {
|
||||||
err = tx.QueryRow(`
|
err = tx.QueryRow(query, title, tag).Scan(&id)
|
||||||
SELECT n.id FROM nodes n
|
|
||||||
JOIN tags t ON n.id = t.node_id
|
|
||||||
WHERE n.title = ? AND t.tag = '_type::user'
|
|
||||||
LIMIT 1
|
|
||||||
`, username).Scan(&id)
|
|
||||||
} else {
|
} else {
|
||||||
err = s.db.QueryRow(`
|
err = s.db.QueryRow(query, title, tag).Scan(&id)
|
||||||
SELECT n.id FROM nodes n
|
|
||||||
JOIN tags t ON n.id = t.node_id
|
|
||||||
WHERE n.title = ? AND t.tag = '_type::user'
|
|
||||||
LIMIT 1
|
|
||||||
`, username).Scan(&id)
|
|
||||||
}
|
}
|
||||||
if err == sql.ErrNoRows {
|
if err == sql.ErrNoRows {
|
||||||
return "", nil
|
return "", nil
|
||||||
}
|
}
|
||||||
if err != nil {
|
return id, err
|
||||||
return "", err
|
}
|
||||||
}
|
|
||||||
return id, nil
|
func (s *sqliteNodeService) resolveUserIDByNameTx(tx *sql.Tx, username string) (string, error) {
|
||||||
|
return s.resolveIDByNameAndTypeTx(tx, username, "user")
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *sqliteNodeService) resolveUserIDByName(username string) (string, error) {
|
func (s *sqliteNodeService) resolveUserIDByName(username string) (string, error) {
|
||||||
@@ -328,30 +326,7 @@ func (s *sqliteNodeService) resolveUserIDByName(username string) (string, error)
|
|||||||
}
|
}
|
||||||
|
|
||||||
func (s *sqliteNodeService) resolveNamespaceIDByNameTx(tx *sql.Tx, name string) (string, error) {
|
func (s *sqliteNodeService) resolveNamespaceIDByNameTx(tx *sql.Tx, name string) (string, error) {
|
||||||
var id string
|
return s.resolveIDByNameAndTypeTx(tx, name, "namespace")
|
||||||
var err error
|
|
||||||
if tx != nil {
|
|
||||||
err = tx.QueryRow(`
|
|
||||||
SELECT n.id FROM nodes n
|
|
||||||
JOIN tags t ON n.id = t.node_id
|
|
||||||
WHERE n.title = ? AND t.tag = '_type::namespace'
|
|
||||||
LIMIT 1
|
|
||||||
`, name).Scan(&id)
|
|
||||||
} else {
|
|
||||||
err = s.db.QueryRow(`
|
|
||||||
SELECT n.id FROM nodes n
|
|
||||||
JOIN tags t ON n.id = t.node_id
|
|
||||||
WHERE n.title = ? AND t.tag = '_type::namespace'
|
|
||||||
LIMIT 1
|
|
||||||
`, name).Scan(&id)
|
|
||||||
}
|
|
||||||
if err == sql.ErrNoRows {
|
|
||||||
return "", nil
|
|
||||||
}
|
|
||||||
if err != nil {
|
|
||||||
return "", err
|
|
||||||
}
|
|
||||||
return id, nil
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *sqliteNodeService) resolveNamespaceIDByName(name string) (string, error) {
|
func (s *sqliteNodeService) resolveNamespaceIDByName(name string) (string, error) {
|
||||||
|
|||||||
Reference in New Issue
Block a user