Files
Steve Cliff b07572fed5 Released v1
2026-02-12 10:37:19 +00:00

111 lines
2.8 KiB
Go

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