package cmd import ( "axolotl/db" "axolotl/models" "axolotl/output" "fmt" "os" "slices" "strings" "github.com/spf13/cobra" ) var cDue, cContent, cDummy string var cTags, cRels []string var createCmd = &cobra.Command{ Use: "create ", Short: "Create a new node", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { d, err := db.GetDB() if err != nil { fmt.Fprintln(os.Stderr, err) return } if !slices.ContainsFunc(cTags, func(e string) bool { return strings.HasPrefix(e, "_type::") }) { cTags = append(cTags, "_type::issue") } if slices.Contains(cTags, "_type::issue") && !slices.ContainsFunc(cTags, func(e string) bool { return strings.HasPrefix(e, "_status::") }) { cTags = append(cTags, "_status::open") } rels := make(map[models.RelType][]string) relCreated, relNamespace := false, false for _, r := range cRels { rt, tgt, err := db.ParseRelFlag(r) if err != nil { fmt.Fprintln(os.Stderr, err) return } if rt == models.RelCreated { relCreated = true } if rt == models.RelInNamespace { relNamespace = true } rels[rt] = append(rels[rt], tgt) } if !relCreated { rels[models.RelCreated] = append(rels[models.RelCreated], db.GetCurrentUser()) } if !relNamespace { rels[models.RelInNamespace] = append(rels[models.RelInNamespace], db.GetCurrentUser()) } if n, err := d.CreateNode(db.CreateParams{Title: args[0], Content: cContent, DueDate: cDue, Tags: cTags, Rels: rels}); err != nil { fmt.Fprintln(os.Stderr, "failed to create:", err) } else { output.PrintNode(cmd.OutOrStdout(), n, jsonFlag) } }, } func init() { rootCmd.AddCommand(createCmd) 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, "") f.StringArrayVar(&cRels, "rel", nil, "") }