diff --git a/cmd/create.go b/cmd/create.go index d697ffa..554085e 100644 --- a/cmd/create.go +++ b/cmd/create.go @@ -13,7 +13,7 @@ import ( "github.com/spf13/cobra" ) -var cDue, cContent, cDummy string +var cDue, cContent string var cTags, cRels []string var createCmd = &cobra.Command{ @@ -60,11 +60,9 @@ var createCmd = &cobra.Command{ func init() { rootCmd.AddCommand(createCmd) + addPropertyFlags(createCmd) + createCmd.Flags().Set("type", "issue") 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(&cContent, "content", "", "") f.StringArrayVar(&cTags, "tag", nil, "") diff --git a/cmd/inbox.go b/cmd/inbox.go index b8b7d37..b999e1c 100644 --- a/cmd/inbox.go +++ b/cmd/inbox.go @@ -18,17 +18,8 @@ var inboxCmd = &cobra.Command{ fmt.Fprintln(os.Stderr, err) 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()) - 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) } }, diff --git a/cmd/list.go b/cmd/list.go index 4148649..3ea0172 100644 --- a/cmd/list.go +++ b/cmd/list.go @@ -10,7 +10,7 @@ import ( "github.com/spf13/cobra" ) -var lDummy, lAssignee string +var lAssignee string var lTags []string var listCmd = &cobra.Command{ @@ -32,11 +32,8 @@ var listCmd = &cobra.Command{ func init() { rootCmd.AddCommand(listCmd) + addPropertyFlags(listCmd) f := listCmd.Flags() - f.StringVar(&lDummy, "type", "", "") - f.StringVar(&lDummy, "status", "", "") - f.StringVar(&lDummy, "prio", "", "") - f.StringVar(&lDummy, "namespace", "", "") f.StringVar(&lAssignee, "assignee", "", "") f.StringArrayVar(&lTags, "tag", nil, "") } diff --git a/cmd/root.go b/cmd/root.go index 7d5e59a..7cac711 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -76,3 +76,10 @@ func transformArgs(args []string) []string { func init() { 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") +} diff --git a/cmd/update.go b/cmd/update.go index 9fe052e..1e4f807 100644 --- a/cmd/update.go +++ b/cmd/update.go @@ -14,7 +14,7 @@ import ( ) var ( - uTitle, uContent, uDue, dummy string + uTitle, uContent, uDue string uClearDue bool uAddTags, uRmTags, uAddRels, uRmRels []string ) @@ -118,13 +118,12 @@ var updateCmd = &cobra.Command{ func init() { rootCmd.AddCommand(updateCmd) + addPropertyFlags(updateCmd) f := updateCmd.Flags() f.StringVar(&uTitle, "title", "", "") f.StringVar(&uContent, "content", "", "") f.StringVar(&uDue, "due", "", "") f.BoolVar(&uClearDue, "clear-due", false, "") - f.StringVar(&dummy, "status", "", "") - f.StringVar(&dummy, "prio", "", "") f.StringArrayVar(&uAddTags, "tag", nil, "") f.StringArrayVar(&uRmTags, "tag-remove", nil, "") f.StringArrayVar(&uAddRels, "rel", nil, "") diff --git a/db/db.go b/db/db.go index 3f0cda0..0dedbd9 100644 --- a/db/db.go +++ b/db/db.go @@ -70,14 +70,3 @@ func Open(path string) (*DB, error) { 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 -} diff --git a/service/node_service_sqlite.go b/service/node_service_sqlite.go index 887fc58..7cca4eb 100644 --- a/service/node_service_sqlite.go +++ b/service/node_service_sqlite.go @@ -296,31 +296,29 @@ func (s *sqliteNodeService) Update(node *models.Node) error { 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 + 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 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::user' - LIMIT 1 - `, username).Scan(&id) + err = tx.QueryRow(query, title, tag).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::user' - LIMIT 1 - `, username).Scan(&id) + err = s.db.QueryRow(query, title, tag).Scan(&id) } if err == sql.ErrNoRows { return "", nil } - if err != nil { - return "", err - } - return id, nil + return id, err +} + +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) { @@ -328,30 +326,7 @@ func (s *sqliteNodeService) resolveUserIDByName(username string) (string, error) } func (s *sqliteNodeService) resolveNamespaceIDByNameTx(tx *sql.Tx, name string) (string, error) { - var id string - 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 + return s.resolveIDByNameAndTypeTx(tx, name, "namespace") } func (s *sqliteNodeService) resolveNamespaceIDByName(name string) (string, error) {