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