ynote.*RefundService.Refund   B
last analyzed

Complexity

Conditions 6

Size

Total Lines 42
Code Lines 30

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 6
eloc 30
nop 2
dl 0
loc 42
rs 8.2266
c 0
b 0
f 0
1
package ynote
2
3
import (
4
	"context"
5
	"encoding/json"
6
	"net/http"
7
)
8
9
// RefundService is the API client for the `/prod/refund` endpoint
10
type RefundService service
11
12
// Status returns the status of an initiated transaction
13
func (service *RefundService) Status(ctx context.Context, transactionID string) (*RefundTransactionStatus, *Response, error) {
14
	err := service.client.refreshToken(ctx)
15
	if err != nil {
16
		return nil, nil, err
17
	}
18
19
	payload := map[string]any{
20
		"customerkey":    service.client.customerKey,
21
		"customersecret": service.client.customerSecret,
22
	}
23
24
	request, err := service.client.newRequest(ctx, http.MethodGet, "/prod/refund/status/"+transactionID, payload)
25
	if err != nil {
26
		return nil, nil, err
27
	}
28
29
	response, err := service.client.do(request)
30
	if err != nil {
31
		return nil, response, err
32
	}
33
34
	transaction := new(RefundTransactionStatus)
35
	if err = json.Unmarshal(*response.Body, transaction); err != nil {
36
		return nil, response, err
37
	}
38
39
	return transaction, response, nil
40
}
41
42
// Refund executes an initiated transaction
43
func (service *RefundService) Refund(ctx context.Context, params *RefundParams) (*RefundTransaction, *Response, error) {
44
	err := service.client.refreshToken(ctx)
45
	if err != nil {
46
		return nil, nil, err
47
	}
48
49
	feesIncluded := "No"
50
	if params.FeesIncluded {
51
		feesIncluded = "Yes"
52
	}
53
54
	payload := map[string]any{
55
		"customerkey":                  service.client.customerKey,
56
		"customersecret":               service.client.customerSecret,
57
		"channelUserMsisdn":            params.ChannelUserMsisdn,
58
		"pin":                          params.Pin,
59
		"webhook":                      params.Webhook,
60
		"amount":                       params.Amount,
61
		"final_customer_phone":         params.FinalCustomerPhone,
62
		"final_customer_name":          params.FinalCustomerName,
63
		"refund_method":                params.RefundMethod,
64
		"fees_included":                feesIncluded,
65
		"maximum_retries":              params.MaximumRetries,
66
		"final_customer_name_accuracy": params.FinalCustomerNameAccuracy,
67
	}
68
69
	request, err := service.client.newRequest(ctx, http.MethodPost, "/prod/refund", payload)
70
	if err != nil {
71
		return nil, nil, err
72
	}
73
74
	response, err := service.client.do(request)
75
	if err != nil {
76
		return nil, response, err
77
	}
78
79
	transaction := new(RefundTransaction)
80
	if err = json.Unmarshal(*response.Body, transaction); err != nil {
81
		return nil, response, err
82
	}
83
84
	return transaction, response, nil
85
}
86