diff --git a/cmd/folder/delete.go b/cmd/folder/delete.go index 0e61926..7471cda 100644 --- a/cmd/folder/delete.go +++ b/cmd/folder/delete.go @@ -110,8 +110,7 @@ func runFolderDelete(cmd *cobra.Command, args []string) error { response = strings.TrimSpace(strings.ToLower(response)) if response != "yes" { - fmt.Println("Deletion cancelled.") - return nil + return fmt.Errorf("deletion cancelled") } } diff --git a/cmd/routine/delete.go b/cmd/routine/delete.go deleted file mode 100644 index c8e045f..0000000 --- a/cmd/routine/delete.go +++ /dev/null @@ -1,117 +0,0 @@ -package routine - -import ( - "bufio" - "fmt" - "os" - "strings" - - "github.com/spf13/cobra" - - "github.com/obay/hevycli/internal/api" - "github.com/obay/hevycli/internal/cmdutil" - "github.com/obay/hevycli/internal/config" - "github.com/obay/hevycli/internal/tui/prompt" -) - -var ( - deleteForce bool -) - -var deleteCmd = &cobra.Command{ - Use: "delete ", - Short: "Delete a routine", - Long: `Delete a routine by ID. - -By default, you will be prompted to confirm the deletion. -Use --force to skip the confirmation prompt. - -Examples: - hevycli routine delete # Delete with confirmation - hevycli routine delete --force # Delete without confirmation`, - Args: cmdutil.RequireArgs(1, ""), - RunE: runDelete, -} - -func init() { - deleteCmd.Flags().BoolVarP(&deleteForce, "force", "f", false, "Skip confirmation prompt") - Cmd.AddCommand(deleteCmd) -} - -func runDelete(cmd *cobra.Command, args []string) error { - cfg, err := config.Load("") - if err != nil { - return fmt.Errorf("failed to load config: %w", err) - } - - apiKey := cfg.GetAPIKey() - if apiKey == "" { - return fmt.Errorf("API key not configured. Run 'hevycli config init' to set up") - } - - client := api.NewClient(apiKey) - - var routineID string - if len(args) > 0 { - routineID = args[0] - } else { - // Interactive mode - let user select from routines - selected, err := prompt.SearchSelect(prompt.SearchSelectConfig{ - Title: "Select Routine to Delete", - Placeholder: "Search routines...", - Help: "Type to filter by routine title", - LoadFunc: func() ([]prompt.SelectOption, error) { - routines, err := client.GetRoutines(1, 20) - if err != nil { - return nil, err - } - options := make([]prompt.SelectOption, len(routines.Routines)) - for i, r := range routines.Routines { - options[i] = prompt.SelectOption{ - ID: r.ID, - Title: r.Title, - Description: fmt.Sprintf("%d exercises", len(r.Exercises)), - } - } - return options, nil - }, - }) - if err != nil { - return err - } - routineID = selected.ID - } - - // Get routine details first to show what we're deleting - routine, err := client.GetRoutine(routineID) - if err != nil { - return fmt.Errorf("failed to fetch routine: %w", err) - } - - // Confirm deletion unless --force is used - if !deleteForce { - fmt.Printf("Are you sure you want to delete routine '%s' (%s)?\n", routine.Title, routine.ID) - fmt.Printf("This action cannot be undone.\n") - fmt.Print("Type 'yes' to confirm: ") - - reader := bufio.NewReader(os.Stdin) - response, err := reader.ReadString('\n') - if err != nil { - return fmt.Errorf("failed to read input: %w", err) - } - - response = strings.TrimSpace(strings.ToLower(response)) - if response != "yes" { - fmt.Println("Deletion cancelled.") - return nil - } - } - - // Delete the routine - if err := client.DeleteRoutine(routineID); err != nil { - return fmt.Errorf("failed to delete routine: %w", err) - } - - fmt.Printf("Routine '%s' deleted successfully.\n", routine.Title) - return nil -} diff --git a/cmd/routine/routine.go b/cmd/routine/routine.go index 3807b90..ede2715 100644 --- a/cmd/routine/routine.go +++ b/cmd/routine/routine.go @@ -13,7 +13,6 @@ Examples: hevycli routine get # Get routine details hevycli routine create --file r.json # Create from JSON hevycli routine update --file r.json # Update routine - hevycli routine delete # Delete routine hevycli routine builder # Interactive routine builder`, } @@ -22,5 +21,4 @@ func init() { Cmd.AddCommand(getCmd) Cmd.AddCommand(createCmd) Cmd.AddCommand(updateCmd) - // deleteCmd is added in delete.go's init() } diff --git a/cmd/workout/delete.go b/cmd/workout/delete.go index a0761d0..507afa8 100644 --- a/cmd/workout/delete.go +++ b/cmd/workout/delete.go @@ -101,8 +101,7 @@ func runDelete(cmd *cobra.Command, args []string) error { response = strings.TrimSpace(strings.ToLower(response)) if response != "yes" { - fmt.Println("Deletion cancelled.") - return nil + return fmt.Errorf("deletion cancelled") } } diff --git a/internal/api/client.go b/internal/api/client.go index e654965..af79310 100644 --- a/internal/api/client.go +++ b/internal/api/client.go @@ -530,21 +530,6 @@ func (c *Client) GetWorkoutEvents(since time.Time, page, pageSize int) (*Workout return &result, nil } -// DeleteRoutine deletes a routine by ID -func (c *Client) DeleteRoutine(id string) error { - resp, err := c.httpClient.R(). - Delete("/routines/" + id) - - if err != nil { - return &APIError{ - ErrorCode: "NETWORK_ERROR", - ErrorMessage: fmt.Sprintf("failed to delete routine: %v", err), - } - } - - return c.handleResponse(resp) -} - // UpdateRoutineFolder updates an existing routine folder func (c *Client) UpdateRoutineFolder(id int, req *UpdateRoutineFolderRequest) (*RoutineFolder, error) { var result RoutineFolderResponse