Skip to content

Commit 86ae1ff

Browse files
authored
chore(lo-4751): send as a shortcut for transactional send (#12)
1 parent 618a813 commit 86ae1ff

2 files changed

Lines changed: 66 additions & 46 deletions

File tree

cmd/send.go

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package cmd
2+
3+
import "github.com/spf13/cobra"
4+
5+
var sendCmd = &cobra.Command{
6+
Use: "send",
7+
Short: "Send a transactional email",
8+
RunE: transactionalSendRunE,
9+
}
10+
11+
func init() {
12+
addTransactionalSendFlags(sendCmd)
13+
rootCmd.AddCommand(sendCmd)
14+
}

cmd/transactional.go

Lines changed: 52 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -103,67 +103,73 @@ var transactionalListCmd = &cobra.Command{
103103
},
104104
}
105105

106-
var transactionalSendCmd = &cobra.Command{
107-
Use: "send",
108-
Short: "Send a transactional email",
109-
RunE: func(cmd *cobra.Command, args []string) error {
110-
cfg, err := config.Load()
111-
if err != nil {
112-
return err
113-
}
114-
115-
email, _ := cmd.Flags().GetString("email")
116-
id, _ := cmd.Flags().GetString("id")
117-
dataRaw, _ := cmd.Flags().GetString("data")
106+
func transactionalSendRunE(cmd *cobra.Command, args []string) error {
107+
cfg, err := config.Load()
108+
if err != nil {
109+
return err
110+
}
118111

119-
req := api.SendTransactionalRequest{
120-
Email: email,
121-
TransactionalID: id,
122-
}
112+
email, _ := cmd.Flags().GetString("email")
113+
id, _ := cmd.Flags().GetString("id")
114+
dataRaw, _ := cmd.Flags().GetString("data")
123115

124-
if cmd.Flags().Changed("add-to-audience") {
125-
v, _ := cmd.Flags().GetBool("add-to-audience")
126-
req.AddToAudience = &v
127-
}
116+
req := api.SendTransactionalRequest{
117+
Email: email,
118+
TransactionalID: id,
119+
}
128120

129-
if dataRaw != "" {
130-
if err := json.Unmarshal([]byte(dataRaw), &req.DataVariables); err != nil {
131-
return fmt.Errorf("--data must be a valid JSON object: %w", err)
132-
}
133-
}
121+
if cmd.Flags().Changed("add-to-audience") {
122+
v, _ := cmd.Flags().GetBool("add-to-audience")
123+
req.AddToAudience = &v
124+
}
134125

135-
paths, _ := cmd.Flags().GetStringArray("attachment")
136-
for _, path := range paths {
137-
a, err := attachmentFromPath(path)
138-
if err != nil {
139-
return err
140-
}
141-
req.Attachments = append(req.Attachments, a)
126+
if dataRaw != "" {
127+
if err := json.Unmarshal([]byte(dataRaw), &req.DataVariables); err != nil {
128+
return fmt.Errorf("--data must be a valid JSON object: %w", err)
142129
}
130+
}
143131

144-
if err := runTransactionalSend(cfg, req); err != nil {
132+
paths, _ := cmd.Flags().GetStringArray("attachment")
133+
for _, path := range paths {
134+
a, err := attachmentFromPath(path)
135+
if err != nil {
145136
return err
146137
}
138+
req.Attachments = append(req.Attachments, a)
139+
}
147140

148-
if isJSONOutput() {
149-
return printJSON(cmd.OutOrStdout(), Result{Success: true})
150-
}
151-
fmt.Fprintln(cmd.OutOrStdout(), "Sent.")
152-
return nil
153-
},
141+
if err := runTransactionalSend(cfg, req); err != nil {
142+
return err
143+
}
144+
145+
if isJSONOutput() {
146+
return printJSON(cmd.OutOrStdout(), Result{Success: true})
147+
}
148+
fmt.Fprintln(cmd.OutOrStdout(), "Sent.")
149+
return nil
150+
}
151+
152+
func addTransactionalSendFlags(cmd *cobra.Command) {
153+
cmd.Flags().String("email", "", "Recipient email address")
154+
cmd.Flags().String("id", "", "Transactional email ID")
155+
cmd.Flags().BoolP("add-to-audience", "a", false, "Create a contact if one doesn't exist")
156+
cmd.Flags().String("data", "", "Data variables as a JSON object")
157+
cmd.Flags().StringArrayP("attachment", "A", nil, "Path to a file to attach (repeatable)")
158+
cmd.MarkFlagRequired("email")
159+
cmd.MarkFlagRequired("id")
160+
}
161+
162+
var transactionalSendCmd = &cobra.Command{
163+
Use: "send",
164+
Short: "Send a transactional email",
165+
RunE: transactionalSendRunE,
154166
}
155167

156168
func init() {
157169
addPaginationFlags(transactionalListCmd)
158170
transactionalCmd.AddCommand(transactionalListCmd)
159171

160-
transactionalSendCmd.Flags().String("email", "", "Recipient email address")
161-
transactionalSendCmd.Flags().String("id", "", "Transactional email ID")
162-
transactionalSendCmd.Flags().BoolP("add-to-audience", "a", false, "Create a contact if one doesn't exist")
163-
transactionalSendCmd.Flags().String("data", "", "Data variables as a JSON object")
164-
transactionalSendCmd.Flags().StringArrayP("attachment", "A", nil, "Path to a file to attach (repeatable)")
165-
transactionalSendCmd.MarkFlagRequired("email")
166-
transactionalSendCmd.MarkFlagRequired("id")
172+
addTransactionalSendFlags(transactionalSendCmd)
167173
transactionalCmd.AddCommand(transactionalSendCmd)
168174

169175
rootCmd.AddCommand(transactionalCmd)

0 commit comments

Comments
 (0)