package cmd import ( "fmt" "os" "awesome_cli/internal/client" "awesome_cli/internal/handler" "awesome_cli/internal/service" "github.com/spf13/cobra" ) var ( baseURL string verbose bool ) var rootCmd = &cobra.Command{ Use: "coffee-cli", Short: "CLI client for Coffee Shop API", Long: `A comprehensive CLI client for interacting with the Coffee Shop REST API`, PersistentPreRun: func(cmd *cobra.Command, args []string) { if verbose { fmt.Printf("Using API base URL: %s\n", baseURL) } }, } var listCmd = &cobra.Command{ Use: "list", Short: "List all coffees", Run: func(cmd *cobra.Command, args []string) { apiClient := client.NewAPIClient(baseURL) coffeeService := service.NewCoffeeService(apiClient) coffeeHandler := handler.NewCoffeeHandler(coffeeService) if err := coffeeHandler.HandleList(); err != nil { os.Exit(1) } }, } var getCmd = &cobra.Command{ Use: "get [id]", Short: "Get coffee by ID", Args: cobra.ExactArgs(1), Run: func(cmd *cobra.Command, args []string) { apiClient := client.NewAPIClient(baseURL) coffeeService := service.NewCoffeeService(apiClient) coffeeHandler := handler.NewCoffeeHandler(coffeeService) retry, _ := cmd.Flags().GetInt("retry") coffeeID := args[0] if retry > 0 { if err := coffeeHandler.HandleGetWithRetry(coffeeID, retry); err != nil { os.Exit(1) } } else { if err := coffeeHandler.HandleGet(coffeeID); err != nil { os.Exit(1) } } }, } func init() { // Global flags rootCmd.PersistentFlags().StringVarP(&baseURL, "url", "u", "http://localhost:8080", "API base URL") rootCmd.PersistentFlags().BoolVarP(&verbose, "verbose", "v", false, "Verbose output") // Get command flags getCmd.Flags().IntP("retry", "r", 0, "Number of retries on failure") // Add commands rootCmd.AddCommand(listCmd) rootCmd.AddCommand(getCmd) } func Execute() { if err := rootCmd.Execute(); err != nil { fmt.Fprintf(os.Stderr, "Error: %v\n", err) os.Exit(1) } }