mirror of
				https://github.com/juspay/hyperswitch.git
				synced 2025-10-31 10:06:32 +08:00 
			
		
		
		
	feat(payouts): add payout types in euclid crate (#3862)
Co-authored-by: Kashif <mohammed.kashif@juspay.in>
This commit is contained in:
		| @ -2057,12 +2057,15 @@ pub enum PayoutStatus { | |||||||
|     Debug, |     Debug, | ||||||
|     Default, |     Default, | ||||||
|     Eq, |     Eq, | ||||||
|  |     Hash, | ||||||
|     PartialEq, |     PartialEq, | ||||||
|     ToSchema, |  | ||||||
|     serde::Deserialize, |     serde::Deserialize, | ||||||
|     serde::Serialize, |     serde::Serialize, | ||||||
|     strum::Display, |     strum::Display, | ||||||
|  |     strum::EnumVariantNames, | ||||||
|  |     strum::EnumIter, | ||||||
|     strum::EnumString, |     strum::EnumString, | ||||||
|  |     ToSchema, | ||||||
| )] | )] | ||||||
| #[router_derive::diesel_enum(storage_type = "db_enum")] | #[router_derive::diesel_enum(storage_type = "db_enum")] | ||||||
| #[serde(rename_all = "snake_case")] | #[serde(rename_all = "snake_case")] | ||||||
|  | |||||||
| @ -23,10 +23,12 @@ common_enums = { version = "0.1.0", path = "../common_enums" } | |||||||
| euclid_macros = { version = "0.1.0", path = "../euclid_macros" } | euclid_macros = { version = "0.1.0", path = "../euclid_macros" } | ||||||
|  |  | ||||||
| [features] | [features] | ||||||
|  | default = [] | ||||||
| ast_parser = ["dep:nom"] | ast_parser = ["dep:nom"] | ||||||
| valued_jit = [] | valued_jit = [] | ||||||
| connector_choice_mca_id = [] | connector_choice_mca_id = [] | ||||||
| dummy_connector = [] | dummy_connector = [] | ||||||
|  | payouts = [] | ||||||
|  |  | ||||||
| [dev-dependencies] | [dev-dependencies] | ||||||
| criterion = "0.5" | criterion = "0.5" | ||||||
|  | |||||||
| @ -34,6 +34,12 @@ collect_variants!(CaptureMethod); | |||||||
| collect_variants!(Currency); | collect_variants!(Currency); | ||||||
| collect_variants!(Country); | collect_variants!(Country); | ||||||
| collect_variants!(SetupFutureUsage); | collect_variants!(SetupFutureUsage); | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | collect_variants!(PayoutType); | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | collect_variants!(PayoutBankTransferType); | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | collect_variants!(PayoutWalletType); | ||||||
|  |  | ||||||
| #[derive( | #[derive( | ||||||
|     Clone, |     Clone, | ||||||
| @ -94,3 +100,67 @@ pub enum MandateType { | |||||||
|     SingleUse, |     SingleUse, | ||||||
|     MultiUse, |     MultiUse, | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[derive( | ||||||
|  |     Clone, | ||||||
|  |     Debug, | ||||||
|  |     Hash, | ||||||
|  |     PartialEq, | ||||||
|  |     Eq, | ||||||
|  |     strum::Display, | ||||||
|  |     strum::EnumVariantNames, | ||||||
|  |     strum::EnumIter, | ||||||
|  |     strum::EnumString, | ||||||
|  |     serde::Serialize, | ||||||
|  |     serde::Deserialize, | ||||||
|  | )] | ||||||
|  | #[serde(rename_all = "snake_case")] | ||||||
|  | #[strum(serialize_all = "snake_case")] | ||||||
|  | pub enum PayoutBankTransferType { | ||||||
|  |     Ach, | ||||||
|  |     Bacs, | ||||||
|  |     Sepa, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[derive( | ||||||
|  |     Clone, | ||||||
|  |     Debug, | ||||||
|  |     Hash, | ||||||
|  |     PartialEq, | ||||||
|  |     Eq, | ||||||
|  |     strum::Display, | ||||||
|  |     strum::EnumVariantNames, | ||||||
|  |     strum::EnumIter, | ||||||
|  |     strum::EnumString, | ||||||
|  |     serde::Serialize, | ||||||
|  |     serde::Deserialize, | ||||||
|  | )] | ||||||
|  | #[serde(rename_all = "snake_case")] | ||||||
|  | #[strum(serialize_all = "snake_case")] | ||||||
|  | pub enum PayoutWalletType { | ||||||
|  |     Paypal, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[derive( | ||||||
|  |     Clone, | ||||||
|  |     Debug, | ||||||
|  |     Hash, | ||||||
|  |     PartialEq, | ||||||
|  |     Eq, | ||||||
|  |     strum::Display, | ||||||
|  |     strum::EnumVariantNames, | ||||||
|  |     strum::EnumIter, | ||||||
|  |     strum::EnumString, | ||||||
|  |     serde::Serialize, | ||||||
|  |     serde::Deserialize, | ||||||
|  | )] | ||||||
|  | #[serde(rename_all = "snake_case")] | ||||||
|  | #[strum(serialize_all = "snake_case")] | ||||||
|  | pub enum PayoutType { | ||||||
|  |     Card, | ||||||
|  |     BankTransfer, | ||||||
|  |     Wallet, | ||||||
|  | } | ||||||
|  | |||||||
| @ -667,6 +667,101 @@ impl DirValue { | |||||||
|     } |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[derive( | ||||||
|  |     Debug, | ||||||
|  |     Clone, | ||||||
|  |     Hash, | ||||||
|  |     PartialEq, | ||||||
|  |     Eq, | ||||||
|  |     serde::Serialize, | ||||||
|  |     strum::Display, | ||||||
|  |     strum::EnumIter, | ||||||
|  |     strum::EnumVariantNames, | ||||||
|  |     strum::EnumString, | ||||||
|  |     strum::EnumMessage, | ||||||
|  |     strum::EnumProperty, | ||||||
|  | )] | ||||||
|  | pub enum PayoutDirKeyKind { | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "country", | ||||||
|  |         serialize = "business_country", | ||||||
|  |         detailed_message = "Country of the business unit", | ||||||
|  |         props(Category = "Merchant") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "business_country", alias = "country")] | ||||||
|  |     BusinessCountry, | ||||||
|  |  | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "billing_country", | ||||||
|  |         detailed_message = "Country of the billing address of the customer", | ||||||
|  |         props(Category = "Customer") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "billing_country")] | ||||||
|  |     BillingCountry, | ||||||
|  |  | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "business_label", | ||||||
|  |         detailed_message = "Identifier for business unit", | ||||||
|  |         props(Category = "Merchant") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "business_label")] | ||||||
|  |     BusinessLabel, | ||||||
|  |  | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "amount", | ||||||
|  |         detailed_message = "Value of the transaction", | ||||||
|  |         props(Category = "Order details") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "amount")] | ||||||
|  |     PayoutAmount, | ||||||
|  |  | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "payment_method", | ||||||
|  |         detailed_message = "Different modes of payout - eg. cards, wallets, banks", | ||||||
|  |         props(Category = "Payout Methods") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "payment_method")] | ||||||
|  |     PayoutType, | ||||||
|  |  | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "wallet", | ||||||
|  |         detailed_message = "Supported types of Wallets for payouts", | ||||||
|  |         props(Category = "Payout Methods Type") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "wallet")] | ||||||
|  |     WalletType, | ||||||
|  |  | ||||||
|  |     #[strum( | ||||||
|  |         serialize = "bank_transfer", | ||||||
|  |         detailed_message = "Supported types of Bank transfer types for payouts", | ||||||
|  |         props(Category = "Payout Methods Type") | ||||||
|  |     )] | ||||||
|  |     #[serde(rename = "bank_transfer")] | ||||||
|  |     BankTransferType, | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[derive( | ||||||
|  |     Debug, Clone, Hash, PartialEq, Eq, serde::Serialize, strum::Display, strum::EnumVariantNames, | ||||||
|  | )] | ||||||
|  | pub enum PayoutDirValue { | ||||||
|  |     #[serde(rename = "business_country", alias = "country")] | ||||||
|  |     BusinessCountry(enums::Country), | ||||||
|  |     #[serde(rename = "billing_country")] | ||||||
|  |     BillingCountry(enums::Country), | ||||||
|  |     #[serde(rename = "business_label")] | ||||||
|  |     BusinessLabel(types::StrValue), | ||||||
|  |     #[serde(rename = "amount")] | ||||||
|  |     PayoutAmount(types::NumValue), | ||||||
|  |     #[serde(rename = "payment_method")] | ||||||
|  |     PayoutType(common_enums::PayoutType), | ||||||
|  |     #[serde(rename = "wallet")] | ||||||
|  |     WalletType(enums::PayoutWalletType), | ||||||
|  |     #[serde(rename = "bank_transfer")] | ||||||
|  |     BankTransferType(enums::PayoutBankTransferType), | ||||||
|  | } | ||||||
|  |  | ||||||
| #[derive(Debug, Clone)] | #[derive(Debug, Clone)] | ||||||
| pub enum DirComparisonLogic { | pub enum DirComparisonLogic { | ||||||
|     NegativeConjunction, |     NegativeConjunction, | ||||||
|  | |||||||
| @ -6,6 +6,8 @@ pub use crate::enums::{ | |||||||
|     Country as BillingCountry, Currency as PaymentCurrency, MandateAcceptanceType, MandateType, |     Country as BillingCountry, Currency as PaymentCurrency, MandateAcceptanceType, MandateType, | ||||||
|     PaymentMethod, PaymentType, RoutableConnectors, SetupFutureUsage, |     PaymentMethod, PaymentType, RoutableConnectors, SetupFutureUsage, | ||||||
| }; | }; | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | pub use crate::enums::{PayoutBankTransferType, PayoutType, PayoutWalletType}; | ||||||
|  |  | ||||||
| #[derive( | #[derive( | ||||||
|     Clone, |     Clone, | ||||||
|  | |||||||
| @ -11,14 +11,14 @@ crate-type = ["cdylib"] | |||||||
|  |  | ||||||
| [features] | [features] | ||||||
| default = ["connector_choice_bcompat", "payouts", "connector_choice_mca_id"] | default = ["connector_choice_bcompat", "payouts", "connector_choice_mca_id"] | ||||||
| release = ["connector_choice_bcompat", "connector_choice_mca_id"] | release = ["connector_choice_bcompat", "connector_choice_mca_id", "payouts"] | ||||||
| connector_choice_bcompat = ["api_models/connector_choice_bcompat"] | connector_choice_bcompat = ["api_models/connector_choice_bcompat"] | ||||||
| connector_choice_mca_id = ["api_models/connector_choice_mca_id", "euclid/connector_choice_mca_id", "kgraph_utils/connector_choice_mca_id"] | connector_choice_mca_id = ["api_models/connector_choice_mca_id", "euclid/connector_choice_mca_id", "kgraph_utils/connector_choice_mca_id"] | ||||||
| dummy_connector = ["kgraph_utils/dummy_connector", "connector_configs/dummy_connector"] | dummy_connector = ["kgraph_utils/dummy_connector", "connector_configs/dummy_connector"] | ||||||
| production = ["connector_configs/production"] | production = ["connector_configs/production"] | ||||||
| development = ["connector_configs/development"] | development = ["connector_configs/development"] | ||||||
| sandbox = ["connector_configs/sandbox"] | sandbox = ["connector_configs/sandbox"] | ||||||
| payouts = ["api_models/payouts"] | payouts = ["api_models/payouts", "euclid/payouts"] | ||||||
|  |  | ||||||
| [dependencies] | [dependencies] | ||||||
| api_models = { version = "0.1.0", path = "../api_models", package = "api_models" } | api_models = { version = "0.1.0", path = "../api_models", package = "api_models" } | ||||||
|  | |||||||
| @ -256,12 +256,13 @@ pub fn get_variant_values(key: &str) -> Result<JsValue, JsValue> { | |||||||
|         dir::DirKeyKind::CardRedirectType => dir_enums::CardRedirectType::VARIANTS, |         dir::DirKeyKind::CardRedirectType => dir_enums::CardRedirectType::VARIANTS, | ||||||
|         dir::DirKeyKind::GiftCardType => dir_enums::GiftCardType::VARIANTS, |         dir::DirKeyKind::GiftCardType => dir_enums::GiftCardType::VARIANTS, | ||||||
|         dir::DirKeyKind::VoucherType => dir_enums::VoucherType::VARIANTS, |         dir::DirKeyKind::VoucherType => dir_enums::VoucherType::VARIANTS, | ||||||
|  |         dir::DirKeyKind::BankDebitType => dir_enums::BankDebitType::VARIANTS, | ||||||
|  |  | ||||||
|         dir::DirKeyKind::PaymentAmount |         dir::DirKeyKind::PaymentAmount | ||||||
|         | dir::DirKeyKind::Connector |         | dir::DirKeyKind::Connector | ||||||
|         | dir::DirKeyKind::CardBin |         | dir::DirKeyKind::CardBin | ||||||
|         | dir::DirKeyKind::BusinessLabel |         | dir::DirKeyKind::BusinessLabel | ||||||
|         | dir::DirKeyKind::MetaData => Err("Key does not have variants".to_string())?, |         | dir::DirKeyKind::MetaData => Err("Key does not have variants".to_string())?, | ||||||
|         dir::DirKeyKind::BankDebitType => dir_enums::BankDebitType::VARIANTS, |  | ||||||
|     }; |     }; | ||||||
|  |  | ||||||
|     Ok(serde_wasm_bindgen::to_value(variants)?) |     Ok(serde_wasm_bindgen::to_value(variants)?) | ||||||
| @ -335,3 +336,52 @@ pub fn get_response_payload(input: JsValue) -> JsResult { | |||||||
|     let result = ConnectorApiIntegrationPayload::get_transformed_response_payload(input); |     let result = ConnectorApiIntegrationPayload::get_transformed_response_payload(input); | ||||||
|     Ok(serde_wasm_bindgen::to_value(&result)?) |     Ok(serde_wasm_bindgen::to_value(&result)?) | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[wasm_bindgen(js_name = getAllPayoutKeys)] | ||||||
|  | pub fn get_all_payout_keys() -> JsResult { | ||||||
|  |     let keys: Vec<&'static str> = dir::PayoutDirKeyKind::VARIANTS.to_vec(); | ||||||
|  |     Ok(serde_wasm_bindgen::to_value(&keys)?) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[wasm_bindgen(js_name = getPayoutVariantValues)] | ||||||
|  | pub fn get_payout_variant_values(key: &str) -> Result<JsValue, JsValue> { | ||||||
|  |     let key = | ||||||
|  |         dir::PayoutDirKeyKind::from_str(key).map_err(|_| "Invalid key received".to_string())?; | ||||||
|  |  | ||||||
|  |     let variants: &[&str] = match key { | ||||||
|  |         dir::PayoutDirKeyKind::BusinessCountry => dir_enums::BusinessCountry::VARIANTS, | ||||||
|  |         dir::PayoutDirKeyKind::BillingCountry => dir_enums::BillingCountry::VARIANTS, | ||||||
|  |         dir::PayoutDirKeyKind::PayoutType => dir_enums::PayoutType::VARIANTS, | ||||||
|  |         dir::PayoutDirKeyKind::WalletType => dir_enums::PayoutWalletType::VARIANTS, | ||||||
|  |         dir::PayoutDirKeyKind::BankTransferType => dir_enums::PayoutBankTransferType::VARIANTS, | ||||||
|  |  | ||||||
|  |         dir::PayoutDirKeyKind::PayoutAmount | dir::PayoutDirKeyKind::BusinessLabel => { | ||||||
|  |             Err("Key does not have variants".to_string())? | ||||||
|  |         } | ||||||
|  |     }; | ||||||
|  |  | ||||||
|  |     Ok(serde_wasm_bindgen::to_value(variants)?) | ||||||
|  | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[wasm_bindgen(js_name = getPayoutDescriptionCategory)] | ||||||
|  | pub fn get_payout_description_category() -> JsResult { | ||||||
|  |     let keys = dir::PayoutDirKeyKind::VARIANTS.to_vec(); | ||||||
|  |     let mut category: HashMap<Option<&str>, Vec<types::PayoutDetails<'_>>> = HashMap::new(); | ||||||
|  |     for key in keys { | ||||||
|  |         let dir_key = | ||||||
|  |             dir::PayoutDirKeyKind::from_str(key).map_err(|_| "Invalid key received".to_string())?; | ||||||
|  |         let details = types::PayoutDetails { | ||||||
|  |             description: dir_key.get_detailed_message(), | ||||||
|  |             kind: dir_key.clone(), | ||||||
|  |         }; | ||||||
|  |         category | ||||||
|  |             .entry(dir_key.get_str("Category")) | ||||||
|  |             .and_modify(|val| val.push(details.clone())) | ||||||
|  |             .or_insert(vec![details]); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     Ok(serde_wasm_bindgen::to_value(&category)?) | ||||||
|  | } | ||||||
|  | |||||||
| @ -1,4 +1,6 @@ | |||||||
| use euclid::frontend::dir::DirKeyKind; | use euclid::frontend::dir::DirKeyKind; | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | use euclid::frontend::dir::PayoutDirKeyKind; | ||||||
| use serde::Serialize; | use serde::Serialize; | ||||||
|  |  | ||||||
| #[derive(Serialize, Clone)] | #[derive(Serialize, Clone)] | ||||||
| @ -6,3 +8,10 @@ pub struct Details<'a> { | |||||||
|     pub description: Option<&'a str>, |     pub description: Option<&'a str>, | ||||||
|     pub kind: DirKeyKind, |     pub kind: DirKeyKind, | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #[cfg(feature = "payouts")] | ||||||
|  | #[derive(Serialize, Clone)] | ||||||
|  | pub struct PayoutDetails<'a> { | ||||||
|  |     pub description: Option<&'a str>, | ||||||
|  |     pub kind: PayoutDirKeyKind, | ||||||
|  | } | ||||||
|  | |||||||
| @ -714,6 +714,7 @@ pub async fn retrieve_linked_routing_config( | |||||||
|     state: AppState, |     state: AppState, | ||||||
|     merchant_account: domain::MerchantAccount, |     merchant_account: domain::MerchantAccount, | ||||||
|     #[cfg(feature = "business_profile_routing")] query_params: RoutingRetrieveLinkQuery, |     #[cfg(feature = "business_profile_routing")] query_params: RoutingRetrieveLinkQuery, | ||||||
|  |     #[cfg(feature = "business_profile_routing")] transaction_type: &enums::TransactionType, | ||||||
| ) -> RouterResponse<routing_types::LinkedRoutingConfigRetrieveResponse> { | ) -> RouterResponse<routing_types::LinkedRoutingConfigRetrieveResponse> { | ||||||
|     metrics::ROUTING_RETRIEVE_LINK_CONFIG.add(&metrics::CONTEXT, 1, &[]); |     metrics::ROUTING_RETRIEVE_LINK_CONFIG.add(&metrics::CONTEXT, 1, &[]); | ||||||
|     let db = state.store.as_ref(); |     let db = state.store.as_ref(); | ||||||
| @ -739,15 +740,16 @@ pub async fn retrieve_linked_routing_config( | |||||||
|         let mut active_algorithms = Vec::new(); |         let mut active_algorithms = Vec::new(); | ||||||
|  |  | ||||||
|         for business_profile in business_profiles { |         for business_profile in business_profiles { | ||||||
|             let routing_ref: routing_types::RoutingAlgorithmRef = business_profile |             let routing_ref: routing_types::RoutingAlgorithmRef = match transaction_type { | ||||||
|                 .routing_algorithm |                 enums::TransactionType::Payment => business_profile.routing_algorithm, | ||||||
|  |                 #[cfg(feature = "payouts")] | ||||||
|  |                 enums::TransactionType::Payout => business_profile.payout_routing_algorithm, | ||||||
|  |             } | ||||||
|             .clone() |             .clone() | ||||||
|             .map(|val| val.parse_value("RoutingAlgorithmRef")) |             .map(|val| val.parse_value("RoutingAlgorithmRef")) | ||||||
|             .transpose() |             .transpose() | ||||||
|             .change_context(errors::ApiErrorResponse::InternalServerError) |             .change_context(errors::ApiErrorResponse::InternalServerError) | ||||||
|                 .attach_printable( |             .attach_printable("unable to deserialize routing algorithm ref from merchant account")? | ||||||
|                     "unable to deserialize routing algorithm ref from merchant account", |  | ||||||
|                 )? |  | ||||||
|             .unwrap_or_default(); |             .unwrap_or_default(); | ||||||
|  |  | ||||||
|             if let Some(algorithm_id) = routing_ref.algorithm_id { |             if let Some(algorithm_id) = routing_ref.algorithm_id { | ||||||
|  | |||||||
| @ -401,10 +401,18 @@ impl Routing { | |||||||
|         #[allow(unused_mut)] |         #[allow(unused_mut)] | ||||||
|         let mut route = web::scope("/routing") |         let mut route = web::scope("/routing") | ||||||
|             .app_data(web::Data::new(state.clone())) |             .app_data(web::Data::new(state.clone())) | ||||||
|             .service( |             .service(web::resource("/active").route(web::get().to( | ||||||
|                 web::resource("/active") |                 |state, req, #[cfg(feature = "business_profile_routing")] query_params| { | ||||||
|                     .route(web::get().to(cloud_routing::routing_retrieve_linked_config)), |                     cloud_routing::routing_retrieve_linked_config( | ||||||
|  |                         state, | ||||||
|  |                         req, | ||||||
|  |                         #[cfg(feature = "business_profile_routing")] | ||||||
|  |                         query_params, | ||||||
|  |                         #[cfg(feature = "business_profile_routing")] | ||||||
|  |                         &TransactionType::Payment, | ||||||
|                     ) |                     ) | ||||||
|  |                 }, | ||||||
|  |             ))) | ||||||
|             .service( |             .service( | ||||||
|                 web::resource("") |                 web::resource("") | ||||||
|                     .route( |                     .route( | ||||||
| @ -524,6 +532,18 @@ impl Routing { | |||||||
|                             ) |                             ) | ||||||
|                         })), |                         })), | ||||||
|                 ) |                 ) | ||||||
|  |                 .service(web::resource("/payouts/active").route(web::get().to( | ||||||
|  |                     |state, req, #[cfg(feature = "business_profile_routing")] query_params| { | ||||||
|  |                         cloud_routing::routing_retrieve_linked_config( | ||||||
|  |                             state, | ||||||
|  |                             req, | ||||||
|  |                             #[cfg(feature = "business_profile_routing")] | ||||||
|  |                             query_params, | ||||||
|  |                             #[cfg(feature = "business_profile_routing")] | ||||||
|  |                             &TransactionType::Payout, | ||||||
|  |                         ) | ||||||
|  |                     }, | ||||||
|  |                 ))) | ||||||
|                 .service( |                 .service( | ||||||
|                     web::resource("/payouts/default") |                     web::resource("/payouts/default") | ||||||
|                         .route(web::get().to(|state, req| { |                         .route(web::get().to(|state, req| { | ||||||
|  | |||||||
| @ -509,6 +509,7 @@ pub async fn routing_retrieve_linked_config( | |||||||
|     state: web::Data<AppState>, |     state: web::Data<AppState>, | ||||||
|     req: HttpRequest, |     req: HttpRequest, | ||||||
|     #[cfg(feature = "business_profile_routing")] query: web::Query<RoutingRetrieveLinkQuery>, |     #[cfg(feature = "business_profile_routing")] query: web::Query<RoutingRetrieveLinkQuery>, | ||||||
|  |     #[cfg(feature = "business_profile_routing")] transaction_type: &enums::TransactionType, | ||||||
| ) -> impl Responder { | ) -> impl Responder { | ||||||
|     #[cfg(feature = "business_profile_routing")] |     #[cfg(feature = "business_profile_routing")] | ||||||
|     { |     { | ||||||
| @ -520,7 +521,12 @@ pub async fn routing_retrieve_linked_config( | |||||||
|             &req, |             &req, | ||||||
|             query.into_inner(), |             query.into_inner(), | ||||||
|             |state, auth: AuthenticationData, query_params| { |             |state, auth: AuthenticationData, query_params| { | ||||||
|                 routing::retrieve_linked_routing_config(state, auth.merchant_account, query_params) |                 routing::retrieve_linked_routing_config( | ||||||
|  |                     state, | ||||||
|  |                     auth.merchant_account, | ||||||
|  |                     query_params, | ||||||
|  |                     transaction_type, | ||||||
|  |                 ) | ||||||
|             }, |             }, | ||||||
|             #[cfg(not(feature = "release"))] |             #[cfg(not(feature = "release"))] | ||||||
|             auth::auth_type( |             auth::auth_type( | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Kashif
					Kashif