summaryrefslogtreecommitdiffstats
path: root/internal
diff options
context:
space:
mode:
Diffstat (limited to 'internal')
-rw-r--r--internal/client/admin.go23
-rw-r--r--internal/formatter/admin.go47
-rw-r--r--internal/models/admin.go7
3 files changed, 75 insertions, 2 deletions
diff --git a/internal/client/admin.go b/internal/client/admin.go
index bf8c5ce..c776b7c 100644
--- a/internal/client/admin.go
+++ b/internal/client/admin.go
@@ -123,6 +123,29 @@ func (c *Client) ToggleAccount(apiKey string, enable bool) (*models.AdminRespons
return &response, nil
}
+func (c *Client) UpdateAccount(apiKey string, req *models.AccountUpdateRequest) (*models.AdminResponse, error) {
+ path := fmt.Sprintf("/admin/accounts/%s", url.PathEscape(apiKey))
+ data, err := c.Patch(path, req)
+ if err != nil {
+ return nil, err
+ }
+
+ var account models.Account
+ if err := json.Unmarshal(data, &account); err == nil && account.APIKey != "" {
+ return &models.AdminResponse{
+ Success: true,
+ Account: &account,
+ }, nil
+ }
+
+ var response models.AdminResponse
+ if err := json.Unmarshal(data, &response); err != nil {
+ return nil, fmt.Errorf("failed to parse admin response: %w", err)
+ }
+
+ return &response, nil
+}
+
func (c *Client) GetAccountStats() (*models.AccountStatsResponse, error) {
data, err := c.Get("/me", nil)
if err != nil {
diff --git a/internal/formatter/admin.go b/internal/formatter/admin.go
index 12ffcd0..16b8041 100644
--- a/internal/formatter/admin.go
+++ b/internal/formatter/admin.go
@@ -122,6 +122,53 @@ func FormatAccountCreated(account *models.Account, message string, asJSON bool)
return sb.String(), nil
}
+func FormatAccountUpdated(account *models.Account, message string, asJSON bool) (string, error) {
+ if asJSON {
+ response := map[string]interface{}{
+ "account": account,
+ "message": message,
+ }
+ err := PrintColorizedJSON(response)
+ if err != nil {
+ return "", fmt.Errorf("failed to marshal JSON: %w", err)
+ }
+ return "", nil
+ }
+
+ var sb strings.Builder
+ sb.WriteString(fmt.Sprintf("\n%s\n\n", Bold(Green("✓ Account updated successfully!"))))
+
+ if account != nil && account.Name != "" {
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("Name:"), Bold(account.Name)))
+ } else {
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("Message:"), message))
+ }
+
+ if account != nil {
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("API Key:"), Dim(account.APIKey)))
+
+ if account.Unlimited {
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("Credits:"), Green("Unlimited")))
+ } else {
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("Credits:"), FormatCredits(int64(account.Credits))))
+ }
+
+ premiumStr := Gray("No")
+ if account.IsPremium {
+ premiumStr = Magenta("Yes")
+ }
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("Premium:"), premiumStr))
+
+ statusStr := Green("Active")
+ if account.Disabled {
+ statusStr = Red("Disabled")
+ }
+ sb.WriteString(fmt.Sprintf("%s %s\n", Cyan("Status:"), statusStr))
+ }
+
+ return sb.String(), nil
+}
+
func FormatAccountDeleted(message string, asJSON bool) (string, error) {
if asJSON {
response := map[string]string{"message": message}
diff --git a/internal/models/admin.go b/internal/models/admin.go
index ee551f3..7d774a8 100644
--- a/internal/models/admin.go
+++ b/internal/models/admin.go
@@ -21,8 +21,11 @@ type AccountCreateRequest struct {
}
type AccountUpdateRequest struct {
- Credits int `json:"credits,omitempty"`
- Disabled bool `json:"disabled"`
+ Name *string `json:"name,omitempty"`
+ Credits *int `json:"credits,omitempty"`
+ Unlimited *bool `json:"unlimited,omitempty"`
+ IsPremium *bool `json:"is_premium,omitempty"`
+ Disabled *bool `json:"disabled,omitempty"`
}
type AddCreditsRequest struct {