feat(connector): add payouts integration for AdyenPlatform (#4874)

Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com>
This commit is contained in:
Kashif
2024-06-05 17:12:50 +05:30
committed by GitHub
parent 7ab65ac883
commit 32cf06c736
47 changed files with 896 additions and 51 deletions

View File

@ -1819,6 +1819,10 @@ pub(crate) fn validate_auth_and_metadata_type(
use crate::connector::*;
match connector_name {
api_enums::Connector::Adyenplatform => {
adyenplatform::transformers::AdyenplatformAuthType::try_from(val)?;
Ok(())
}
// api_enums::Connector::Mifinity => {
// mifinity::transformers::MifinityAuthType::try_from(val)?;
// Ok(())

View File

@ -156,6 +156,7 @@ impl<const T: u8>
}
default_imp_for_complete_authorize!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Billwerk,
@ -229,6 +230,7 @@ impl<const T: u8>
{
}
default_imp_for_webhook_source_verification!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -319,6 +321,7 @@ impl<const T: u8>
}
default_imp_for_create_customer!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -409,6 +412,7 @@ impl<const T: u8> services::ConnectorRedirectResponse for connector::DummyConnec
}
default_imp_for_connector_redirect_response!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Bitpay,
@ -468,6 +472,7 @@ macro_rules! default_imp_for_connector_request_id {
impl<const T: u8> api::ConnectorTransactionId for connector::DummyConnector<T> {}
default_imp_for_connector_request_id!(
connector::Adyenplatform,
connector::Zsl,
connector::Aci,
connector::Adyen,
@ -560,6 +565,7 @@ impl<const T: u8>
}
default_imp_for_accept_dispute!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -672,6 +678,7 @@ impl<const T: u8>
}
default_imp_for_file_upload!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -761,6 +768,7 @@ impl<const T: u8>
}
default_imp_for_submit_evidence!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -850,6 +858,7 @@ impl<const T: u8>
}
default_imp_for_defend_dispute!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -940,6 +949,7 @@ impl<const T: u8>
}
default_imp_for_pre_processing_steps!(
connector::Adyenplatform,
connector::Aci,
connector::Authorizedotnet,
connector::Bambora,
@ -1090,6 +1100,7 @@ impl<const T: u8>
#[cfg(feature = "payouts")]
default_imp_for_payouts_create!(
connector::Adyenplatform,
connector::Aci,
connector::Airwallex,
connector::Authorizedotnet,
@ -1180,6 +1191,7 @@ impl<const T: u8>
#[cfg(feature = "payouts")]
default_imp_for_payouts_eligibility!(
connector::Adyenplatform,
connector::Aci,
connector::Airwallex,
connector::Authorizedotnet,
@ -1354,6 +1366,7 @@ impl<const T: u8>
#[cfg(feature = "payouts")]
default_imp_for_payouts_cancel!(
connector::Adyenplatform,
connector::Aci,
connector::Airwallex,
connector::Authorizedotnet,
@ -1442,6 +1455,7 @@ impl<const T: u8>
#[cfg(feature = "payouts")]
default_imp_for_payouts_quote!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1532,6 +1546,7 @@ impl<const T: u8>
#[cfg(feature = "payouts")]
default_imp_for_payouts_recipient!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1624,6 +1639,7 @@ impl<const T: u8>
#[cfg(feature = "payouts")]
default_imp_for_payouts_recipient_account!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1714,6 +1730,7 @@ impl<const T: u8>
}
default_imp_for_approve!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1805,6 +1822,7 @@ impl<const T: u8>
}
default_imp_for_reject!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1880,6 +1898,7 @@ macro_rules! default_imp_for_fraud_check {
impl<const T: u8> api::FraudCheck for connector::DummyConnector<T> {}
default_imp_for_fraud_check!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -1971,6 +1990,7 @@ impl<const T: u8>
#[cfg(feature = "frm")]
default_imp_for_frm_sale!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2062,6 +2082,7 @@ impl<const T: u8>
#[cfg(feature = "frm")]
default_imp_for_frm_checkout!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2153,6 +2174,7 @@ impl<const T: u8>
#[cfg(feature = "frm")]
default_imp_for_frm_transaction!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2244,6 +2266,7 @@ impl<const T: u8>
#[cfg(feature = "frm")]
default_imp_for_frm_fulfillment!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2335,6 +2358,7 @@ impl<const T: u8>
#[cfg(feature = "frm")]
default_imp_for_frm_record_return!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2424,6 +2448,7 @@ impl<const T: u8>
}
default_imp_for_incremental_authorization!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2512,6 +2537,7 @@ impl<const T: u8>
{
}
default_imp_for_revoking_mandates!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2660,6 +2686,7 @@ impl<const T: u8>
{
}
default_imp_for_connector_authentication!(
connector::Adyenplatform,
connector::Aci,
connector::Adyen,
connector::Airwallex,
@ -2747,6 +2774,7 @@ impl<const T: u8>
default_imp_for_authorize_session_token!(
connector::Aci,
connector::Adyen,
connector::Adyenplatform,
connector::Airwallex,
connector::Authorizedotnet,
connector::Bambora,

View File

@ -990,7 +990,6 @@ impl ForeignFrom<(storage::Payouts, storage::PayoutAttempt, domain::Customer)>
unified_code: None,
unified_message: None,
};
let attempts = vec![attempt];
Self {
payout_id: payout.payout_id,
merchant_id: payout.merchant_id,
@ -1016,7 +1015,9 @@ impl ForeignFrom<(storage::Payouts, storage::PayoutAttempt, domain::Customer)>
error_code: payout_attempt.error_code,
profile_id: payout.profile_id,
created: Some(payout.created_at),
attempts: Some(attempts),
connector_transaction_id: attempt.connector_transaction_id.clone(),
priority: payout.priority,
attempts: Some(vec![attempt]),
billing: None,
client_secret: None,
}

View File

@ -502,7 +502,6 @@ pub async fn payouts_cancel_core(
.await?;
let payout_attempt = payout_data.payout_attempt.to_owned();
let connector_payout_id = payout_attempt.connector_payout_id.to_owned();
let status = payout_attempt.status;
// Verify if cancellation can be triggered
@ -518,7 +517,7 @@ pub async fn payouts_cancel_core(
} else if helpers::is_eligible_for_local_payout_cancellation(status) {
let status = storage_enums::PayoutStatus::Cancelled;
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: connector_payout_id.to_owned(),
connector_payout_id: payout_attempt.connector_payout_id.to_owned(),
status,
error_message: Some("Cancelled by user".to_string()),
error_code: None,
@ -1084,7 +1083,10 @@ pub async fn create_recipient(
.status
.unwrap_or(api_enums::PayoutStatus::RequiresVendorAccountCreation);
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: recipient_create_data.connector_payout_id,
connector_payout_id: payout_data
.payout_attempt
.connector_payout_id
.to_owned(),
status,
error_code: None,
error_message: None,
@ -1248,7 +1250,7 @@ pub async fn check_payout_eligibility(
Err(err) => {
let status = storage_enums::PayoutStatus::Failed;
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
status,
error_code: Some(err.code),
error_message: Some(err.message),
@ -1440,7 +1442,7 @@ pub async fn create_payout(
Err(err) => {
let status = storage_enums::PayoutStatus::Failed;
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
status,
error_code: Some(err.code),
error_message: Some(err.message),
@ -1563,7 +1565,7 @@ pub async fn create_recipient_disburse_account(
}
Err(err) => {
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
status: storage_enums::PayoutStatus::Failed,
error_code: Some(err.code),
error_message: Some(err.message),
@ -1659,7 +1661,7 @@ pub async fn cancel_payout(
Err(err) => {
let status = storage_enums::PayoutStatus::Failed;
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
status,
error_code: Some(err.code),
error_message: Some(err.message),
@ -1762,7 +1764,7 @@ pub async fn fulfill_payout(
.await?;
}
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
connector_payout_id: payout_response_data.connector_payout_id,
status,
error_code: None,
error_message: None,
@ -1799,7 +1801,7 @@ pub async fn fulfill_payout(
Err(err) => {
let status = storage_enums::PayoutStatus::Failed;
let updated_payout_attempt = storage::PayoutAttemptUpdate::StatusUpdate {
connector_payout_id: payout_data.payout_attempt.connector_payout_id.clone(),
connector_payout_id: payout_data.payout_attempt.connector_payout_id.to_owned(),
status,
error_code: Some(err.code),
error_message: Some(err.message),
@ -1896,6 +1898,8 @@ pub async fn response_handler(
error_code: payout_attempt.error_code,
profile_id: payout_attempt.profile_id,
created: Some(payouts.created_at),
connector_transaction_id: payout_attempt.connector_payout_id,
priority: payouts.priority,
attempts: None,
};
Ok(services::ApplicationResponse::Json(response))
@ -1992,6 +1996,7 @@ pub async fn payout_create_db_entries(
attempt_count: 1,
metadata: req.metadata.clone(),
confirm: req.confirm,
priority: req.priority,
..Default::default()
};
let payouts = db

View File

@ -151,7 +151,7 @@ pub async fn construct_payout_router_data<'a, F>(
let router_data = types::RouterData {
flow: PhantomData,
merchant_id: merchant_account.merchant_id.to_owned(),
customer_id: None,
customer_id: customer_details.to_owned().map(|c| c.customer_id),
connector_customer: connector_customer_id,
connector: connector_name.to_string(),
payment_id: "".to_string(),
@ -175,6 +175,7 @@ pub async fn construct_payout_router_data<'a, F>(
entity_type: payouts.entity_type.to_owned(),
payout_type: payouts.payout_type,
vendor_details,
priority: payouts.priority,
customer_details: customer_details
.to_owned()
.map(|c| payments::CustomerDetails {