package cmd import ( "axolotl/models" "axolotl/output" "axolotl/service" "fmt" "os" "slices" "strings" "github.com/spf13/cobra" ) var cDue, cContent string var cTags, cRels []string var addCmd = &cobra.Command{ Use: "add ", Short: "Create a new node", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { svc, err := service.GetNodeService(cfg) if err != nil { fmt.Fprintln(os.Stderr, "failed to create:", err) } // default relations if !slices.ContainsFunc(cRels, func(e string) bool { return strings.HasPrefix(e, "in_namespace:") }) { cRels = append(cRels, "in_namespace:"+cfg.GetUser()) } // parse relations rels := make(map[models.RelType][]string) for _, r := range cRels { rel, err := parseRelFlag(svc, r) if err != nil { fmt.Fprintln(os.Stderr, err) return } rels[rel.Type] = append(rels[rel.Type], rel.Target) } // create n, err := svc.Create(args[0], cContent, cDue, nil, rels) if err != nil { fmt.Fprintln(os.Stderr, "failed to create:", err) return } for _, t := range cTags { n.AddTag(t) } // default tags if !slices.ContainsFunc(cTags, func(e string) bool { return strings.HasPrefix(e, "_type::") }) { n.AddTag("_type::issue") } if n.HasTag("_type::issue") && !slices.ContainsFunc(cTags, func(e string) bool { return strings.HasPrefix(e, "_status::") }) { n.AddTag("_status::open") } // persist tags added above if err := svc.Update(n); err != nil { fmt.Fprintln(os.Stderr, "failed to update with tags:", err) return } output.PrintNode(cmd.OutOrStdout(), svc, n, jsonFlag) }, } func init() { rootCmd.AddCommand(addCmd) addPropertyFlags(addCmd) addCmd.Flags().Set("type", "issue") f := addCmd.Flags() f.StringVar(&cDue, "due", "", "") f.StringVar(&cContent, "content", "", "") f.StringArrayVar(&cTags, "tag", nil, "") f.StringArrayVar(&cRels, "rel", nil, "") }