ynote.*RefundTransactionStatus.IsPending   A
last analyzed

Complexity

Conditions 5

Size

Total Lines 3
Code Lines 3

Duplication

Lines 0
Ratio 0 %

Importance

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