package cmd import ( "fmt" "strconv" "git.db.org.ai/dborg/internal/client" "git.db.org.ai/dborg/internal/formatter" "git.db.org.ai/dborg/internal/models" "github.com/spf13/cobra" ) var adminCmd = &cobra.Command{ Use: "admin", Short: "Admin operations", Long: `Administrative operations for managing accounts`, } var adminListCmd = &cobra.Command{ Use: "list", Short: "List all accounts", RunE: runAdminList, } var adminCreateCmd = &cobra.Command{ Use: "create [name]", Short: "Create new account", Args: cobra.ExactArgs(1), RunE: runAdminCreate, } var adminDeleteCmd = &cobra.Command{ Use: "delete [api_key]", Short: "Delete account", Args: cobra.ExactArgs(1), RunE: runAdminDelete, } var adminCreditsCmd = &cobra.Command{ Use: "credits [api_key] [amount]", Short: "Add credits to account", Args: cobra.ExactArgs(2), RunE: runAdminCredits, } var adminSetCreditsCmd = &cobra.Command{ Use: "set-credits [api_key] [amount]", Short: "Set account credits to specific amount", Args: cobra.ExactArgs(2), RunE: runAdminSetCredits, } var adminDisableCmd = &cobra.Command{ Use: "disable [api_key]", Short: "Disable/enable account", Args: cobra.ExactArgs(1), RunE: runAdminDisable, } func init() { rootCmd.AddCommand(adminCmd) adminCmd.AddCommand(adminListCmd) adminCmd.AddCommand(adminCreateCmd) adminCmd.AddCommand(adminDeleteCmd) adminCmd.AddCommand(adminCreditsCmd) adminCmd.AddCommand(adminSetCreditsCmd) adminCmd.AddCommand(adminDisableCmd) adminCreateCmd.Flags().IntP("credits", "c", 0, "Initial credits") adminCreateCmd.Flags().BoolP("unlimited", "u", false, "Unlimited credits") adminCreateCmd.Flags().BoolP("premium", "p", false, "Premium account (enables skiptrace access)") adminDisableCmd.Flags().BoolP("enable", "e", false, "Enable account instead of disable") } func getAdminClient(cmd *cobra.Command) (*client.Client, error) { return newClient() } func runAdminList(cmd *cobra.Command, args []string) error { c, err := getAdminClient(cmd) if err != nil { return err } response, err := c.ListAccounts() if err != nil { return err } if err := checkError(response.Error); err != nil { return err } output, err := formatter.FormatAccountList(response.Accounts, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil } func runAdminCreate(cmd *cobra.Command, args []string) error { c, err := getAdminClient(cmd) if err != nil { return err } credits, _ := cmd.Flags().GetInt("credits") unlimited, _ := cmd.Flags().GetBool("unlimited") premium, _ := cmd.Flags().GetBool("premium") req := &models.AccountCreateRequest{ Name: args[0], Credits: credits, Unlimited: unlimited, IsPremium: premium, } response, err := c.CreateAccount(req) if err != nil { return err } if err := checkError(response.Error); err != nil { return err } output, err := formatter.FormatAccountCreated(response.Account, response.Message, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil } func runAdminDelete(cmd *cobra.Command, args []string) error { c, err := getAdminClient(cmd) if err != nil { return err } response, err := c.DeleteAccount(args[0]) if err != nil { return err } if err := checkError(response.Error); err != nil { return err } output, err := formatter.FormatAccountDeleted(response.Message, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil } func runAdminCredits(cmd *cobra.Command, args []string) error { c, err := getAdminClient(cmd) if err != nil { return err } credits, err := strconv.Atoi(args[1]) if err != nil { return fmt.Errorf("invalid credits amount: %s", args[1]) } response, err := c.UpdateCredits(args[0], credits) if err != nil { return err } if err := checkError(response.Error); err != nil { return err } output, err := formatter.FormatCreditsUpdated(response.Message, nil, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil } func runAdminSetCredits(cmd *cobra.Command, args []string) error { c, err := getAdminClient(cmd) if err != nil { return err } credits, err := strconv.Atoi(args[1]) if err != nil { return fmt.Errorf("invalid credits amount: %s", args[1]) } response, err := c.SetCredits(args[0], credits) if err != nil { return err } if err := checkError(response.Error); err != nil { return err } output, err := formatter.FormatCreditsUpdated(response.Message, response.Account, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil } func runAdminDisable(cmd *cobra.Command, args []string) error { c, err := getAdminClient(cmd) if err != nil { return err } enable, _ := cmd.Flags().GetBool("enable") response, err := c.ToggleAccount(args[0], enable) if err != nil { return err } if err := checkError(response.Error); err != nil { return err } output, err := formatter.FormatAccountToggled(response.Message, IsJSONOutput()) if err != nil { return err } printOutput(output) return nil }