|
| 1 | +package profiles |
| 2 | + |
| 3 | +import ( |
| 4 | + "bytes" |
| 5 | + "context" |
| 6 | + "encoding/json" |
| 7 | + "log" |
| 8 | + |
| 9 | + "github.com/hostinger/api-cli/api" |
| 10 | + "github.com/hostinger/api-cli/output" |
| 11 | + "github.com/hostinger/api-cli/utils" |
| 12 | + "github.com/spf13/cobra" |
| 13 | +) |
| 14 | + |
| 15 | +var UpdateSettingsCmd = &cobra.Command{ |
| 16 | + Use: "update-settings <profile-uuid>", |
| 17 | + Short: "Update profile settings", |
| 18 | + Long: "Change the profile's default sender and brand details.\n\nSend only the fields to change: every omitted field keeps its value, and `null` or an empty\nstring clears a text field. The default sender is what campaigns created afterwards start\nfrom; existing campaigns keep their own sender. `sender_email` is only the part before the\n`@`, because Reach combines it with the profile's connected sending domain, so an address\noutside that domain cannot be set. Connecting a sending domain is a separate endpoint and\na connected domain cannot be changed here. Returns the settings after the change.", |
| 19 | + Args: cobra.MatchAll(cobra.ExactArgs(1)), |
| 20 | + Run: func(cmd *cobra.Command, args []string) { |
| 21 | + payload, err := json.Marshal(updateSettingsBody(cmd)) |
| 22 | + if err != nil { |
| 23 | + log.Fatal(err) |
| 24 | + } |
| 25 | + r, err := api.Request().ReachUpdateProfileSettingsV1WithBodyWithResponse(context.TODO(), args[0], "application/json", bytes.NewReader(payload)) |
| 26 | + if err != nil { |
| 27 | + log.Fatal(err) |
| 28 | + } |
| 29 | + |
| 30 | + output.Format(cmd, r.Body, r.StatusCode()) |
| 31 | + }, |
| 32 | +} |
| 33 | + |
| 34 | +func init() { |
| 35 | + UpdateSettingsCmd.Flags().StringP("about", "", "", "") |
| 36 | + UpdateSettingsCmd.Flags().StringP("accent-color", "", "", "") |
| 37 | + UpdateSettingsCmd.Flags().StringP("background-color", "", "", "") |
| 38 | + UpdateSettingsCmd.Flags().StringP("brand-name", "", "", "") |
| 39 | + UpdateSettingsCmd.Flags().StringP("business-address", "", "", "") |
| 40 | + UpdateSettingsCmd.Flags().StringP("button-color", "", "", "") |
| 41 | + UpdateSettingsCmd.Flags().IntP("button-corners", "", 0, "") |
| 42 | + UpdateSettingsCmd.Flags().StringP("button-text", "", "", "Button text colour.") |
| 43 | + UpdateSettingsCmd.Flags().StringP("font-family", "", "", "") |
| 44 | + UpdateSettingsCmd.Flags().StringP("heading-font-family", "", "", "") |
| 45 | + UpdateSettingsCmd.Flags().StringSliceP("keywords", "", nil, "") |
| 46 | + UpdateSettingsCmd.Flags().StringP("links-color", "", "", "") |
| 47 | + UpdateSettingsCmd.Flags().StringP("logo-url", "", "", "Public image URL. Logo uploads are not supported.") |
| 48 | + UpdateSettingsCmd.Flags().StringP("privacy-policy-url", "", "", "") |
| 49 | + UpdateSettingsCmd.Flags().StringSliceP("selling-points", "", nil, "") |
| 50 | + UpdateSettingsCmd.Flags().StringP("sender-email", "", "", "Part of the default sender address before the `@`, for example `hello`. Never send a\nfull address: Reach adds the profile's connected sending domain itself.") |
| 51 | + UpdateSettingsCmd.Flags().StringP("sender-name", "", "", "Default sender name. Letters, numbers and spaces only.") |
| 52 | + UpdateSettingsCmd.Flags().StringSliceP("social-links", "", nil, "") |
| 53 | + UpdateSettingsCmd.Flags().StringP("socials", "", "", "Social profile links keyed by platform. (JSON)") |
| 54 | + UpdateSettingsCmd.Flags().StringP("text-color", "", "", "") |
| 55 | + UpdateSettingsCmd.Flags().StringSliceP("topics", "", nil, "") |
| 56 | + UpdateSettingsCmd.Flags().StringP("website-url", "", "", "") |
| 57 | +} |
| 58 | + |
| 59 | +func updateSettingsBody(cmd *cobra.Command) map[string]any { |
| 60 | + body := map[string]any{} |
| 61 | + if cmd.Flags().Changed("about") { |
| 62 | + v, _ := cmd.Flags().GetString("about") |
| 63 | + body["about"] = v |
| 64 | + } |
| 65 | + if cmd.Flags().Changed("accent-color") { |
| 66 | + v, _ := cmd.Flags().GetString("accent-color") |
| 67 | + body["accent_color"] = v |
| 68 | + } |
| 69 | + if cmd.Flags().Changed("background-color") { |
| 70 | + v, _ := cmd.Flags().GetString("background-color") |
| 71 | + body["background_color"] = v |
| 72 | + } |
| 73 | + if cmd.Flags().Changed("brand-name") { |
| 74 | + v, _ := cmd.Flags().GetString("brand-name") |
| 75 | + body["brand_name"] = v |
| 76 | + } |
| 77 | + if cmd.Flags().Changed("business-address") { |
| 78 | + v, _ := cmd.Flags().GetString("business-address") |
| 79 | + body["business_address"] = v |
| 80 | + } |
| 81 | + if cmd.Flags().Changed("button-color") { |
| 82 | + v, _ := cmd.Flags().GetString("button-color") |
| 83 | + body["button_color"] = v |
| 84 | + } |
| 85 | + if cmd.Flags().Changed("button-corners") { |
| 86 | + v, _ := cmd.Flags().GetInt("button-corners") |
| 87 | + body["button_corners"] = v |
| 88 | + } |
| 89 | + if cmd.Flags().Changed("button-text") { |
| 90 | + v, _ := cmd.Flags().GetString("button-text") |
| 91 | + body["button_text"] = v |
| 92 | + } |
| 93 | + if cmd.Flags().Changed("font-family") { |
| 94 | + v, _ := cmd.Flags().GetString("font-family") |
| 95 | + body["font_family"] = v |
| 96 | + } |
| 97 | + if cmd.Flags().Changed("heading-font-family") { |
| 98 | + v, _ := cmd.Flags().GetString("heading-font-family") |
| 99 | + body["heading_font_family"] = v |
| 100 | + } |
| 101 | + if cmd.Flags().Changed("keywords") { |
| 102 | + v, _ := cmd.Flags().GetStringSlice("keywords") |
| 103 | + body["keywords"] = v |
| 104 | + } |
| 105 | + if cmd.Flags().Changed("links-color") { |
| 106 | + v, _ := cmd.Flags().GetString("links-color") |
| 107 | + body["links_color"] = v |
| 108 | + } |
| 109 | + if cmd.Flags().Changed("logo-url") { |
| 110 | + v, _ := cmd.Flags().GetString("logo-url") |
| 111 | + body["logo_url"] = v |
| 112 | + } |
| 113 | + if cmd.Flags().Changed("privacy-policy-url") { |
| 114 | + v, _ := cmd.Flags().GetString("privacy-policy-url") |
| 115 | + body["privacy_policy_url"] = v |
| 116 | + } |
| 117 | + if cmd.Flags().Changed("selling-points") { |
| 118 | + v, _ := cmd.Flags().GetStringSlice("selling-points") |
| 119 | + body["selling_points"] = v |
| 120 | + } |
| 121 | + if cmd.Flags().Changed("sender-email") { |
| 122 | + v, _ := cmd.Flags().GetString("sender-email") |
| 123 | + body["sender_email"] = v |
| 124 | + } |
| 125 | + if cmd.Flags().Changed("sender-name") { |
| 126 | + v, _ := cmd.Flags().GetString("sender-name") |
| 127 | + body["sender_name"] = v |
| 128 | + } |
| 129 | + if cmd.Flags().Changed("social-links") { |
| 130 | + v, _ := cmd.Flags().GetStringSlice("social-links") |
| 131 | + body["social_links"] = v |
| 132 | + } |
| 133 | + if cmd.Flags().Changed("socials") { |
| 134 | + v, _ := cmd.Flags().GetString("socials") |
| 135 | + body["socials"] = utils.JSONValue(v, "socials") |
| 136 | + } |
| 137 | + if cmd.Flags().Changed("text-color") { |
| 138 | + v, _ := cmd.Flags().GetString("text-color") |
| 139 | + body["text_color"] = v |
| 140 | + } |
| 141 | + if cmd.Flags().Changed("topics") { |
| 142 | + v, _ := cmd.Flags().GetStringSlice("topics") |
| 143 | + body["topics"] = v |
| 144 | + } |
| 145 | + if cmd.Flags().Changed("website-url") { |
| 146 | + v, _ := cmd.Flags().GetString("website-url") |
| 147 | + body["website_url"] = v |
| 148 | + } |
| 149 | + return body |
| 150 | +} |
0 commit comments