Passed
Push — main ( d0fa02...05b894 )
by Acho
02:12
created

ynote.*RefundTransactionStatus.IsFailed   B

Complexity

Conditions 7

Size

Total Lines 2
Code Lines 2

Duplication

Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
cc 7
eloc 2
nop 0
dl 0
loc 2
rs 8
c 0
b 0
f 0
1
package ynote
2
3
// RefundParams are the parameters for executing a refund transaction
4
type RefundParams struct {
5
	ChannelUserMsisdn         string `json:"channelUserMsisdn"`
6
	Pin                       string `json:"pin"`
7
	Webhook                   string `json:"webhook"`
8
	Amount                    string `json:"amount"`
9
	FinalCustomerPhone        string `json:"final_customer_phone"`
10
	FinalCustomerName         string `json:"final_customer_name"`
11
	RefundMethod              string `json:"refund_method"`
12
	FeesIncluded              bool   `json:"fees_included"`
13
	FinalCustomerNameAccuracy string `json:"final_customer_name_accuracy"`
14
}
15
16
// RefundTransaction is the response from a refund transaction
17
type RefundTransaction struct {
18
	MD5OfMessageBody       string `json:"MD5OfMessageBody"`
19
	MD5OfMessageAttributes string `json:"MD5OfMessageAttributes"`
20
	MessageID              string `json:"MessageId"`
21
	ResponseMetadata       struct {
22
		RequestID      string `json:"RequestId"`
23
		HTTPStatusCode int    `json:"HTTPStatusCode"`
24
		HTTPHeaders    struct {
25
			XAmznRequestid string `json:"x-amzn-requestid"`
26
			Date           string `json:"date"`
27
			ContentType    string `json:"content-type"`
28
			ContentLength  string `json:"content-length"`
29
			Connection     string `json:"connection"`
30
		} `json:"HTTPHeaders"`
31
		RetryAttempts int `json:"RetryAttempts"`
32
	} `json:"ResponseMetadata"`
33
}
34
35
// RefundTransactionStatus is the response from a refund transaction status
36
type RefundTransactionStatus struct {
37
	Status       *string `json:"status"`
38
	ErrorCode    *int    `json:"ErrorCode"`
39
	ErrorMessage *string `json:"ErrorMessage"`
40
	Result       *struct {
41
		Message string `json:"message"`
42
		Data    struct {
43
			CreatedAt         string `json:"createtime"`
44
			SubscriberMsisdn  string `json:"subscriberMsisdn"`
45
			Amount            int    `json:"amount"`
46
			PayToken          string `json:"payToken"`
47
			TransactionID     string `json:"txnid"`
48
			TransactionMode   string `json:"txnmode"`
49
			TransactionStatus string `json:"txnstatus"`
50
			OrderID           string `json:"orderId"`
51
			Status            string `json:"status"`
52
			ChannelUserMsisdn string `json:"channelUserMsisdn"`
53
			Description       string `json:"description"`
54
		} `json:"data"`
55
	} `json:"result"`
56
	Parameters struct {
57
		Amount                    string `json:"amount"`
58
		Xauth                     string `json:"xauth"`
59
		ChannelUserMsisdn         string `json:"channel_user_msisdn"`
60
		CustomerKey               string `json:"customer_key"`
61
		CustomerSecret            string `json:"customer_secret"`
62
		FinalCustomerName         string `json:"final_customer_name"`
63
		FinalCustomerPhone        string `json:"final_customer_phone"`
64
		FinalCustomerNameAccuracy any    `json:"final_customer_name_accuracy"`
65
	} `json:"parameters"`
66
	CreatedAt  string `json:"CreateAt"`
67
	MessageID  string `json:"MessageId"`
68
	RefundStep string `json:"RefundStep"`
69
}
70
71
// IsPending checks if the refund transaction is pending
72
func (status *RefundTransactionStatus) IsPending() bool {
73
	return status.Status == nil && (status.Result == nil || status.Result.Data.Status == "" || status.Result.Data.Status == "PENDING" || status.Result.Data.Status == "INITIATED")
74
}
75
76
// IsSuccessful checks if the refund transaction is successful
77
func (status *RefundTransactionStatus) IsSuccessful() bool {
78
	return status.Result != nil && (status.Result.Data.Status == "SUCCESSFULL" || status.Result.Data.Status == "SUCCESSFUL")
79
}
80
81
// IsFailed checks if the refund transaction is failed
82
func (status *RefundTransactionStatus) IsFailed() bool {
83
	return (status.Status != nil && *status.Status == "FAILED") || (status.ErrorCode != nil && *status.ErrorCode == 5019) || (status.Result != nil && (status.Result.Data.Status == "FAILED" || status.Result.Data.Status == "EXPIRED"))
84
}
85