package cmd import ( "fmt" "os" "git.franklin.lab/steve.cliff/pcli/output" "github.com/spf13/cobra" ) var taskListCmd = &cobra.Command{ Use: "task-list", Short: "Manage task lists", Long: "Commands for managing Planka task lists", } var taskListCreateCmd = &cobra.Command{ Use: "create", Short: "Create a new task list", RunE: func(cmd *cobra.Command, args []string) error { cardId, _ := cmd.Flags().GetString("card") name, _ := cmd.Flags().GetString("name") if cardId == "" { return fmt.Errorf("--card 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 showOnFront, _ := cmd.Flags().GetBool("show-on-front"); cmd.Flags().Changed("show-on-front") { fields["showOnFrontOfCard"] = showOnFront } if hideCompleted, _ := cmd.Flags().GetBool("hide-completed"); cmd.Flags().Changed("hide-completed") { fields["hideCompletedTasks"] = hideCompleted } taskList, err := getClient().CreateTaskList(getContext(), cardId, fields) if err != nil { return err } return output.Print(taskList, getFormat(), os.Stdout) }, } var taskListGetCmd = &cobra.Command{ Use: "get ", Short: "Get a task list by ID", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { taskList, err := getClient().GetTaskList(getContext(), args[0]) if err != nil { return err } return output.Print(taskList, getFormat(), os.Stdout) }, } var taskListUpdateCmd = &cobra.Command{ Use: "update ", Short: "Update a task list", 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 showOnFront, _ := cmd.Flags().GetBool("show-on-front"); cmd.Flags().Changed("show-on-front") { fields["showOnFrontOfCard"] = showOnFront } if hideCompleted, _ := cmd.Flags().GetBool("hide-completed"); cmd.Flags().Changed("hide-completed") { fields["hideCompletedTasks"] = hideCompleted } if len(fields) == 0 { return fmt.Errorf("at least one field must be specified for update") } taskList, err := getClient().UpdateTaskList(getContext(), args[0], fields) if err != nil { return err } return output.Print(taskList, getFormat(), os.Stdout) }, } var taskListDeleteCmd = &cobra.Command{ Use: "delete ", Short: "Delete a task list", Args: cobra.ExactArgs(1), RunE: func(cmd *cobra.Command, args []string) error { err := getClient().DeleteTaskList(getContext(), args[0]) if err != nil { return err } return output.Print(map[string]string{"status": "deleted"}, getFormat(), os.Stdout) }, } func init() { rootCmd.AddCommand(taskListCmd) taskListCmd.AddCommand(taskListCreateCmd) taskListCmd.AddCommand(taskListGetCmd) taskListCmd.AddCommand(taskListUpdateCmd) taskListCmd.AddCommand(taskListDeleteCmd) taskListCreateCmd.Flags().String("card", "", "Card ID (required)") taskListCreateCmd.Flags().String("name", "", "Task list name (required)") taskListCreateCmd.Flags().Float64("position", 0, "Position") taskListCreateCmd.Flags().Bool("show-on-front", true, "Show on front of card") taskListCreateCmd.Flags().Bool("hide-completed", false, "Hide completed tasks") taskListUpdateCmd.Flags().String("name", "", "Task list name") taskListUpdateCmd.Flags().Float64("position", 0, "Position") taskListUpdateCmd.Flags().Bool("show-on-front", true, "Show on front of card") taskListUpdateCmd.Flags().Bool("hide-completed", false, "Hide completed tasks") }