From 5ab3fbd17efa1df89e8c00662abc600298047efd Mon Sep 17 00:00:00 2001 From: chweez Date: Mon, 5 Feb 2018 15:20:25 +0300 Subject: [PATCH] Improvements and spelling fixes --- .gitignore | 1 + .idea/vcs.xml | 6 ++++++ account/account.go | 4 +++- airtime/airtime.go | 7 ++++--- demo/main.go | 12 ++++++++++-- sms/sms.go | 38 +++++++++++++++++++++----------------- util/currency_utils.go | 8 +++++--- 7 files changed, 50 insertions(+), 26 deletions(-) create mode 100644 .idea/vcs.xml diff --git a/.gitignore b/.gitignore index 36d3e58..83cd478 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ +.idea/* demo/demo demo/secrets.go \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..94a25f7 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/account/account.go b/account/account.go index 2f7b742..9488dc9 100644 --- a/account/account.go +++ b/account/account.go @@ -51,7 +51,9 @@ func (service Service) GetUser() (*User, error) { return nil, fmt.Errorf("could not get rsponse %v", err) } + body := response.Body var accountResponse Response - json.NewDecoder(response.Body).Decode(&accountResponse) + json.NewDecoder(body).Decode(&accountResponse) + defer body.Close() return &accountResponse.User, nil } diff --git a/airtime/airtime.go b/airtime/airtime.go index 1a70f20..64da664 100644 --- a/airtime/airtime.go +++ b/airtime/airtime.go @@ -48,9 +48,10 @@ func (service Service) Send() (*Response, error) { return nil, fmt.Errorf("unable to create request %v", err) } - q := request.URL.Query() - q.Add("username", service.Username) - request.URL.RawQuery = q.Encode() + values := request.URL.Query() + values.Add("username", service.Username) + request.URL.RawQuery = values.Encode() + request.Header.Set("apikey", service.APIKey) request.Header.Set("Accept", "application/json") diff --git a/demo/main.go b/demo/main.go index 726aab3..331e288 100644 --- a/demo/main.go +++ b/demo/main.go @@ -7,6 +7,7 @@ import ( "os" "github.com/AndroidStudyOpenSource/africastalking-go/sms" + "africastalking/account" ) const ( @@ -25,13 +26,20 @@ func main() { os.Exit(1) } - send(*recipient, "202020", *env) smsService := sms.NewService(username, apiKey, *env) // Entered at the commandline sendResponse, err := smsService.Send("Me4u", *recipient, *message) if err != nil { fmt.Println(err) + } else { + fmt.Println(sendResponse) } - fmt.Println(sendResponse) + accountService := account.NewService(username, apiKey, *env) + user, err := accountService.GetUser() + if err != nil { + fmt.Println(err) + } else { + fmt.Println(user) + } } diff --git a/sms/sms.go b/sms/sms.go index f96261e..dda629d 100644 --- a/sms/sms.go +++ b/sms/sms.go @@ -47,11 +47,11 @@ func (service Service) Send(from, to, message string) (*SendMessageResponse, err values.Set("from", from) } - url := util.GetSmsURL(service.Env) + smsURL := util.GetSmsURL(service.Env) headers := make(map[string]string) headers["Content-Type"] = "application/x-www-form-urlencoded" - res, err := service.newPostRequest(url, values, headers) + res, err := service.newPostRequest(smsURL, values, headers) if err != nil { return nil, err } @@ -80,11 +80,11 @@ func (service Service) SendBulk(from, to, message string, bulkMode int, enqueue values.Set("bulkMode", string(bulkMode)) values.Set("enqueue", enqueue) - url := util.GetSmsURL(service.Env) + smsURL := util.GetSmsURL(service.Env) headers := make(map[string]string) headers["Content-Type"] = "application/x-www-form-urlencoded" - res, err := service.newPostRequest(url, values, headers) + res, err := service.newPostRequest(smsURL, values, headers) if err != nil { return nil, err } @@ -98,7 +98,7 @@ func (service Service) SendBulk(from, to, message string, bulkMode int, enqueue // SendPremium - POST func (service Service) SendPremium(username, to, from, message, keyword, - linkID, retryDurationInHours string, bulkMode int) (*SendMessageResponse, error) { +linkID, retryDurationInHours string, bulkMode int) (*SendMessageResponse, error) { values := url.Values{} values.Set("username", username) values.Set("to", to) @@ -109,11 +109,11 @@ func (service Service) SendPremium(username, to, from, message, keyword, values.Set("linkId", linkID) values.Set("retryDurationInHours", retryDurationInHours) - url := util.GetSmsURL(service.Env) + smsURL := util.GetSmsURL(service.Env) headers := make(map[string]string) headers["Content-Type"] = "application/x-www-form-urlencoded" - res, err := service.newPostRequest(url, values, headers) + res, err := service.newPostRequest(smsURL, values, headers) if err != nil { return nil, err } @@ -127,12 +127,12 @@ func (service Service) SendPremium(username, to, from, message, keyword, // FetchMessage - username = query func (service Service) FetchMessage(username, lastReceivedID string) (*FetchMessageResponse, error) { - url := util.GetAPIHost(service.Env) + apiURL := util.GetAPIHost(service.Env) queries := make(map[string]string) queries["username"] = username queries["lastReceivedID"] = lastReceivedID - res, err := service.newGetRequest(url, queries) + res, err := service.newGetRequest(apiURL, queries) if err != nil { return nil, fmt.Errorf("could not get response: %v", err) } @@ -146,14 +146,14 @@ func (service Service) FetchMessage(username, lastReceivedID string) (*FetchMess // FetchSubscription - query func (service Service) FetchSubscription(username, shortCode, keyword, lastReceivedID string) (*FetchSubscriptionResponse, error) { - url := util.GetAPIHost(service.Env) + "/version1/subscription" + apiURL := util.GetAPIHost(service.Env) + "/version1/subscription" queries := make(map[string]string) queries["username"] = username queries["shortCode"] = shortCode queries["keyword"] = keyword queries["lastReceivedID"] = lastReceivedID - res, err := service.newGetRequest(url, queries) + res, err := service.newGetRequest(apiURL, queries) if err != nil { return nil, fmt.Errorf("could not get response: %v", err) } @@ -176,17 +176,17 @@ func (service Service) CreateSubscription(username, shortCode, keyword, phoneNum headers := make(map[string]string) - url := util.GetAPIHost(service.Env) + "/version1/subscription/create" - res, err := service.newPostRequest(url, values, headers) + apiURL := util.GetAPIHost(service.Env) + "/version1/subscription/create" + res, err := service.newPostRequest(apiURL, values, headers) if err != nil { return nil, fmt.Errorf("could not get response: %v", err) } - var subsciprionResponse SubscriptionResponse - json.NewDecoder(res.Body).Decode(&subsciprionResponse) + var subscriptionResponse SubscriptionResponse + json.NewDecoder(res.Body).Decode(&subscriptionResponse) defer res.Body.Close() - return &subsciprionResponse, nil + return &subscriptionResponse, nil } func (service Service) newPostRequest(url string, values url.Values, headers map[string]string) (*http.Response, error) { @@ -218,9 +218,13 @@ func (service Service) newGetRequest(url string, queries map[string]string) (*ht for key, value := range queries { values.Add(key, value) } + + if len(values) > 0 { + req.URL.RawQuery = values.Encode() + } + req.Header.Set("apikey", service.APIKey) req.Header.Set("Accept", "application/json") - req.URL.RawQuery = values.Encode() client := &http.Client{Timeout: 10 * time.Second} return client.Do(req) diff --git a/util/currency_utils.go b/util/currency_utils.go index 4926ff7..5e63717 100644 --- a/util/currency_utils.go +++ b/util/currency_utils.go @@ -4,7 +4,7 @@ import "strings" import "fmt" import "strconv" -// FromCurrencied converts a currencied amount +// FromCurrencied converts a currencied amount to component currency sign and amount func FromCurrencied(currenciedAmount string) (string, float64, error) { amount := strings.Split(strings.TrimSpace(currenciedAmount), " ") if len(amount) != 2 { @@ -13,8 +13,10 @@ func FromCurrencied(currenciedAmount string) (string, float64, error) { currency, err := strconv.ParseFloat(amount[1], 64) if err != nil { - return "", 0, nil + return "", 0, fmt.Errorf("could not get currency amount: %v", err) } - return amount[0], currency, nil + currencySign := strings.ToUpper(amount[0]) + + return currencySign, currency, nil }