Passed
Push — main ( ba9a6e...3c92bc )
by Acho
02:17
created

ynote.*RefundService.Status   A

Complexity

Conditions 5

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 5
eloc 14
dl 0
loc 22
rs 9.2333
c 0
b 0
f 0
nop 2
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) (*map[string]any, *Response, error) {
14
	err := service.client.refreshToken(ctx)
15
	if err != nil {
16
		return nil, nil, err
17
	}
18
19
	request, err := service.client.newRequest(ctx, http.MethodGet, "/prod/refund/status/"+transactionID, nil)
20
	if err != nil {
21
		return nil, nil, err
22
	}
23
24
	response, err := service.client.do(request)
25
	if err != nil {
26
		return nil, response, err
27
	}
28
29
	transaction := new(map[string]any)
30
	if err = json.Unmarshal(*response.Body, transaction); err != nil {
31
		return nil, response, err
32
	}
33
34
	return transaction, response, nil
35
}
36
37
// Refund executes an initiated transaction
38
func (service *RefundService) Refund(ctx context.Context, params *RefundParams) (*map[string]any, *Response, error) {
39
	err := service.client.refreshToken(ctx)
40
	if err != nil {
41
		return nil, nil, err
42
	}
43
44
	payload := map[string]any{
45
		"customerkey":                  service.client.customerKey,
46
		"customersecret":               service.client.customerSecret,
47
		"channelUserMsisdn":            params.ChannelUserMsisdn,
48
		"pin":                          params.Pin,
49
		"webhook":                      params.Webhook,
50
		"amount":                       params.Amount,
51
		"final_customer_phone":         params.FinalCustomerPhone,
52
		"final_customer_name":          params.FinalCustomerName,
53
		"refund_method":                params.RefundMethod,
54
		"fees_included":                params.FeesIncluded,
55
		"final_customer_name_accuracy": params.FinalCustomerNameAccuracy,
56
		"debit_policy":                 params.DebitPolicy,
57
	}
58
59
	request, err := service.client.newRequest(ctx, http.MethodPost, "/prod/refund", payload)
60
	if err != nil {
61
		return nil, nil, err
62
	}
63
64
	response, err := service.client.do(request)
65
	if err != nil {
66
		return nil, response, err
67
	}
68
69
	transaction := new(map[string]any)
70
	if err = json.Unmarshal(*response.Body, transaction); err != nil {
71
		return nil, response, err
72
	}
73
74
	return transaction, response, nil
75
}
76