Passed
Push — main ( c0551b...3f0c00 )
by Acho
01:25
created

flutterwave.*billsService.Validate   A

Complexity

Conditions 4

Size

Total Lines 22
Code Lines 14

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 4
eloc 14
nop 4
dl 0
loc 22
rs 9.7
c 0
b 0
f 0
1
package flutterwave
2
3
import (
4
	"context"
5
	"encoding/json"
6
	"net/http"
7
)
8
9
// billsService is the API client for the `/gateway` endpoint
10
type billsService service
11
12
// CreatePayment creates bill payments.
13
//
14
// API Docs: https://developer.flutterwave.com/reference/create-a-bill-payment
15
func (service *billsService) CreatePayment(ctx context.Context, payload *BillsCreatePaymentRequest) (*BillsCreatePaymentResponse, *Response, error) {
16
	request, err := service.client.newRequest(ctx, http.MethodPost, "/v3/bills", payload)
17
	if err != nil {
18
		return nil, nil, err
19
	}
20
21
	response, err := service.client.do(request)
22
	if err != nil {
23
		return nil, response, err
24
	}
25
26
	var data BillsCreatePaymentResponse
27
	if err = json.Unmarshal(*response.Body, &data); err != nil {
28
		return nil, response, err
29
	}
30
31
	return &data, response, nil
32
}
33
34
// Validate validates services like DSTV smartcard number, Meter number etc.
35
//
36
// API Docs: https://developer.flutterwave.com/reference/validate-bill-service
37
func (service *billsService) Validate(ctx context.Context, itemCode string, billerCode string, customer string) (*BillsValidateResponse, *Response, error) {
38
	request, err := service.client.newRequest(ctx, http.MethodGet, "/v3/bill-items/"+itemCode+"/validate", nil)
39
	if err != nil {
40
		return nil, nil, err
41
	}
42
43
	request = service.client.addURLParams(request, map[string]string{
44
		"code":     billerCode,
45
		"customer": customer,
46
	})
47
48
	response, err := service.client.do(request)
49
	if err != nil {
50
		return nil, response, err
51
	}
52
53
	var data BillsValidateResponse
54
	if err = json.Unmarshal(*response.Body, &data); err != nil {
55
		return nil, response, err
56
	}
57
58
	return &data, response, nil
59
}
60
61
// GetStatusVerbose gets the verbose status of a bill payment.
62
//
63
// API Docs: https://developer.flutterwave.com/reference/get-status-of-a-bill-payment
64
func (service *billsService) GetStatusVerbose(ctx context.Context, transactionReference string) (*BillsStatusVerboseResponse, *Response, error) {
65
	request, err := service.client.newRequest(ctx, http.MethodGet, "/v3/bills/"+transactionReference, map[string]int{"verbose": 1})
66
	if err != nil {
67
		return nil, nil, err
68
	}
69
70
	response, err := service.client.do(request)
71
	if err != nil {
72
		return nil, response, err
73
	}
74
75
	var data BillsStatusVerboseResponse
76
	if err = json.Unmarshal(*response.Body, &data); err != nil {
77
		return nil, response, err
78
	}
79
80
	return &data, response, nil
81
}
82