mirror of
https://github.com/juspay/hyperswitch.git
synced 2025-11-03 13:30:39 +08:00
feat(connector): [BOA] Handle refund status 201 (#4908)
Co-authored-by: Deepanshu Bansal <deepanshu.bansal@Deepanshu-Bansal-K3PYF02LFW.local>
This commit is contained in:
@ -2649,9 +2649,12 @@ impl<F> TryFrom<&BankOfAmericaRouterData<&types::RefundsRouterData<F>>>
|
||||
}
|
||||
}
|
||||
|
||||
impl From<BankofamericaRefundStatus> for enums::RefundStatus {
|
||||
fn from(item: BankofamericaRefundStatus) -> Self {
|
||||
match item {
|
||||
impl From<BankOfAmericaRefundResponse> for enums::RefundStatus {
|
||||
fn from(item: BankOfAmericaRefundResponse) -> Self {
|
||||
let error_reason = item
|
||||
.error_information
|
||||
.and_then(|error_info| error_info.reason);
|
||||
match item.status {
|
||||
BankofamericaRefundStatus::Succeeded | BankofamericaRefundStatus::Transmitted => {
|
||||
Self::Success
|
||||
}
|
||||
@ -2659,11 +2662,18 @@ impl From<BankofamericaRefundStatus> for enums::RefundStatus {
|
||||
| BankofamericaRefundStatus::Failed
|
||||
| BankofamericaRefundStatus::Voided => Self::Failure,
|
||||
BankofamericaRefundStatus::Pending => Self::Pending,
|
||||
BankofamericaRefundStatus::TwoZeroOne => {
|
||||
if error_reason == Some("PROCESSOR_DECLINED".to_string()) {
|
||||
Self::Failure
|
||||
} else {
|
||||
Self::Pending
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
#[derive(Debug, Clone, Deserialize, Serialize)]
|
||||
#[serde(rename_all = "camelCase")]
|
||||
pub struct BankOfAmericaRefundResponse {
|
||||
id: String,
|
||||
@ -2678,19 +2688,19 @@ impl TryFrom<types::RefundsResponseRouterData<api::Execute, BankOfAmericaRefundR
|
||||
fn try_from(
|
||||
item: types::RefundsResponseRouterData<api::Execute, BankOfAmericaRefundResponse>,
|
||||
) -> Result<Self, Self::Error> {
|
||||
let refund_status = enums::RefundStatus::from(item.response.status.clone());
|
||||
let refund_status = enums::RefundStatus::from(item.response.clone());
|
||||
let response = if utils::is_refund_failure(refund_status) {
|
||||
Err(types::ErrorResponse::foreign_from((
|
||||
&item.response.error_information,
|
||||
&None,
|
||||
None,
|
||||
item.http_code,
|
||||
item.response.id.clone(),
|
||||
item.response.id,
|
||||
)))
|
||||
} else {
|
||||
Ok(types::RefundsResponseData {
|
||||
connector_refund_id: item.response.id,
|
||||
refund_status: enums::RefundStatus::from(item.response.status),
|
||||
refund_status,
|
||||
})
|
||||
};
|
||||
|
||||
@ -2710,6 +2720,8 @@ pub enum BankofamericaRefundStatus {
|
||||
Pending,
|
||||
Voided,
|
||||
Cancelled,
|
||||
#[serde(rename = "201")]
|
||||
TwoZeroOne,
|
||||
}
|
||||
|
||||
#[derive(Debug, Deserialize, Serialize)]
|
||||
@ -2739,8 +2751,26 @@ impl TryFrom<types::RefundsResponseRouterData<api::RSync, BankOfAmericaRsyncResp
|
||||
.and_then(|application_information| application_information.status)
|
||||
{
|
||||
Some(status) => {
|
||||
let refund_status: common_enums::RefundStatus =
|
||||
enums::RefundStatus::from(status.clone());
|
||||
let error_reason = item
|
||||
.response
|
||||
.error_information
|
||||
.clone()
|
||||
.and_then(|error_info| error_info.reason);
|
||||
let refund_status = match status {
|
||||
BankofamericaRefundStatus::Succeeded
|
||||
| BankofamericaRefundStatus::Transmitted => enums::RefundStatus::Success,
|
||||
BankofamericaRefundStatus::Cancelled
|
||||
| BankofamericaRefundStatus::Failed
|
||||
| BankofamericaRefundStatus::Voided => enums::RefundStatus::Failure,
|
||||
BankofamericaRefundStatus::Pending => enums::RefundStatus::Pending,
|
||||
BankofamericaRefundStatus::TwoZeroOne => {
|
||||
if error_reason == Some("PROCESSOR_DECLINED".to_string()) {
|
||||
enums::RefundStatus::Failure
|
||||
} else {
|
||||
enums::RefundStatus::Pending
|
||||
}
|
||||
}
|
||||
};
|
||||
if utils::is_refund_failure(refund_status) {
|
||||
if status == BankofamericaRefundStatus::Voided {
|
||||
Err(types::ErrorResponse::foreign_from((
|
||||
|
||||
Reference in New Issue
Block a user