Files
pcli/cmd/task_list.go
Steve Cliff b07572fed5 Released v1
2026-02-12 10:37:19 +00:00

134 lines
3.8 KiB
Go

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 <id>",
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 <id>",
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 <id>",
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")
}