package cmd import ( "fmt" "os" "git.franklin.lab/steve.cliff/pcli/output" "github.com/spf13/cobra" ) var taskCmd = &cobra.Command{ Use: "task", Short: "Manage tasks", Long: "Commands for managing Planka tasks", } var taskCreateCmd = &cobra.Command{ Use: "create", Short: "Create a new task", RunE: func(cmd *cobra.Command, args []string) error { taskListId, _ := cmd.Flags().GetString("task-list") name, _ := cmd.Flags().GetString("name") if taskListId == "" { return fmt.Errorf("--task-list is required") } if name == "" { return fmt.Errorf("--name is required") } fields := map[string]any{ "name": name, "position": float64(65536), } if pos, _ := cmd.Flags().GetFloat64("position"); cmd.Flags().Changed("position") { fields["position"] = pos } if completed, _ := cmd.Flags().GetBool("completed"); cmd.Flags().Changed("completed") { fields["isCompleted"] = completed } task, err := getClient().CreateTask(getContext(), taskListId, fields) if err != nil { return err } return output.Print(task, getFormat(), os.Stdout) }, } var taskUpdateCmd = &cobra.Command{ Use: "update ", Short: "Update a task", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { fields := make(map[string]any) if name, _ := cmd.Flags().GetString("name"); name != "" { fields["name"] = name } if pos, _ := cmd.Flags().GetFloat64("position"); cmd.Flags().Changed("position") { fields["position"] = pos } if completed, _ := cmd.Flags().GetBool("completed"); cmd.Flags().Changed("completed") { fields["isCompleted"] = completed } if len(fields) == 0 { return fmt.Errorf("at least one field must be specified for update") } task, err := getClient().UpdateTask(getContext(), args[0], fields) if err != nil { return err } return output.Print(task, getFormat(), os.Stdout) }, } var taskDeleteCmd = &cobra.Command{ Use: "delete ", Short: "Delete a task", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { err := getClient().DeleteTask(getContext(), args[0]) if err != nil { return err } return output.Print(map[string]string{"status": "deleted"}, getFormat(), os.Stdout) }, } func init() { rootCmd.AddCommand(taskCmd) taskCmd.AddCommand(taskCreateCmd) taskCmd.AddCommand(taskUpdateCmd) taskCmd.AddCommand(taskDeleteCmd) taskCreateCmd.Flags().String("task-list", "", "Task list ID (required)") taskCreateCmd.Flags().String("name", "", "Task name (required)") taskCreateCmd.Flags().Float64("position", 0, "Position") taskCreateCmd.Flags().Bool("completed", false, "Whether task is completed") taskUpdateCmd.Flags().String("name", "", "Task name") taskUpdateCmd.Flags().Float64("position", 0, "Position") taskUpdateCmd.Flags().Bool("completed", false, "Whether task is completed") }