diff --git a/crates/api_models/src/admin.rs b/crates/api_models/src/admin.rs index cfc9694dda..d4d1b3d80b 100644 --- a/crates/api_models/src/admin.rs +++ b/crates/api_models/src/admin.rs @@ -1042,6 +1042,9 @@ pub struct BusinessProfileUpdate { /// External 3DS authentication details pub authentication_connector_details: Option, + + /// Merchant's config to support extended card info feature + pub extended_card_info_config: Option, } #[derive(Clone, Debug, serde::Deserialize, serde::Serialize, PartialEq, ToSchema)] @@ -1095,3 +1098,9 @@ pub struct ExtendedCardInfoChoice { } impl common_utils::events::ApiEventMetric for ExtendedCardInfoChoice {} + +#[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] +pub struct ExtendedCardInfoConfig { + pub public_key: Secret, + pub ttl_in_secs: u16, +} diff --git a/crates/diesel_models/src/business_profile.rs b/crates/diesel_models/src/business_profile.rs index 7911aa403d..90a9dcbb7d 100644 --- a/crates/diesel_models/src/business_profile.rs +++ b/crates/diesel_models/src/business_profile.rs @@ -36,6 +36,7 @@ pub struct BusinessProfile { pub session_expiry: Option, pub authentication_connector_details: Option, pub is_extended_card_info_enabled: Option, + pub extended_card_info_config: Option, } #[derive(Clone, Debug, Insertable, router_derive::DebugAsDisplay)] @@ -63,6 +64,7 @@ pub struct BusinessProfileNew { pub session_expiry: Option, pub authentication_connector_details: Option, pub is_extended_card_info_enabled: Option, + pub extended_card_info_config: Option, } #[derive(Clone, Debug, Default, AsChangeset, router_derive::DebugAsDisplay)] @@ -87,6 +89,7 @@ pub struct BusinessProfileUpdateInternal { pub session_expiry: Option, pub authentication_connector_details: Option, pub is_extended_card_info_enabled: Option, + pub extended_card_info_config: Option, } #[derive(Debug, Clone, serde::Serialize, serde::Deserialize)] @@ -109,6 +112,7 @@ pub enum BusinessProfileUpdate { payment_link_config: Option, session_expiry: Option, authentication_connector_details: Option, + extended_card_info_config: Option, }, ExtendedCardInfoUpdate { is_extended_card_info_enabled: Option, @@ -136,6 +140,7 @@ impl From for BusinessProfileUpdateInternal { payment_link_config, session_expiry, authentication_connector_details, + extended_card_info_config, } => Self { profile_name, modified_at, @@ -154,6 +159,7 @@ impl From for BusinessProfileUpdateInternal { payment_link_config, session_expiry, authentication_connector_details, + extended_card_info_config, ..Default::default() }, BusinessProfileUpdate::ExtendedCardInfoUpdate { @@ -190,6 +196,7 @@ impl From for BusinessProfile { session_expiry: new.session_expiry, authentication_connector_details: new.authentication_connector_details, is_extended_card_info_enabled: new.is_extended_card_info_enabled, + extended_card_info_config: new.extended_card_info_config, } } } @@ -215,6 +222,7 @@ impl BusinessProfileUpdate { session_expiry, authentication_connector_details, is_extended_card_info_enabled, + extended_card_info_config, } = self.into(); BusinessProfile { profile_name: profile_name.unwrap_or(source.profile_name), @@ -237,6 +245,7 @@ impl BusinessProfileUpdate { session_expiry, authentication_connector_details, is_extended_card_info_enabled, + extended_card_info_config, ..source } } diff --git a/crates/diesel_models/src/schema.rs b/crates/diesel_models/src/schema.rs index c4277a5cc7..e284e780d2 100644 --- a/crates/diesel_models/src/schema.rs +++ b/crates/diesel_models/src/schema.rs @@ -194,6 +194,7 @@ diesel::table! { session_expiry -> Nullable, authentication_connector_details -> Nullable, is_extended_card_info_enabled -> Nullable, + extended_card_info_config -> Nullable, } } diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs index 3c6ab1f31d..eab7ea6a7e 100644 --- a/crates/router/src/core/admin.rs +++ b/crates/router/src/core/admin.rs @@ -439,6 +439,7 @@ pub async fn update_business_profile_cascade( payment_link_config: None, session_expiry: None, authentication_connector_details: None, + extended_card_info_config: None, }; let update_futures = business_profiles.iter().map(|business_profile| async { @@ -1648,6 +1649,19 @@ pub async fn update_business_profile( }) .transpose()?; + let extended_card_info_config = request + .extended_card_info_config + .as_ref() + .map(|config| { + config + .encode_to_value() + .change_context(errors::ApiErrorResponse::InvalidDataValue { + field_name: "extended_card_info_config", + }) + }) + .transpose()? + .map(Secret::new); + let business_profile_update = storage::business_profile::BusinessProfileUpdate::Update { profile_name: request.profile_name, modified_at: Some(date_time::now()), @@ -1676,6 +1690,7 @@ pub async fn update_business_profile( .change_context(errors::ApiErrorResponse::InvalidDataValue { field_name: "authentication_connector_details", })?, + extended_card_info_config, }; let updated_business_profile = db diff --git a/crates/router/src/core/routing/helpers.rs b/crates/router/src/core/routing/helpers.rs index 62925dcc2a..fb86ba5a87 100644 --- a/crates/router/src/core/routing/helpers.rs +++ b/crates/router/src/core/routing/helpers.rs @@ -263,6 +263,7 @@ pub async fn update_business_profile_active_algorithm_ref( payment_link_config: None, session_expiry: None, authentication_connector_details: None, + extended_card_info_config: None, }; db.update_business_profile_by_profile_id(current_business_profile, business_profile_update) .await diff --git a/crates/router/src/types/api/admin.rs b/crates/router/src/types/api/admin.rs index 06935a29fb..77fe837181 100644 --- a/crates/router/src/types/api/admin.rs +++ b/crates/router/src/types/api/admin.rs @@ -176,6 +176,7 @@ impl ForeignTryFrom<(domain::MerchantAccount, BusinessProfileCreate)> field_name: "authentication_connector_details", })?, is_extended_card_info_enabled: None, + extended_card_info_config: None, }) } } diff --git a/migrations/2024-04-24-075735_add-merchant-pkey-ttl-to-business-profile/down.sql b/migrations/2024-04-24-075735_add-merchant-pkey-ttl-to-business-profile/down.sql new file mode 100644 index 0000000000..63a07052cb --- /dev/null +++ b/migrations/2024-04-24-075735_add-merchant-pkey-ttl-to-business-profile/down.sql @@ -0,0 +1,3 @@ +-- This file should undo anything in `up.sql` + +ALTER TABLE business_profile DROP COLUMN IF EXISTS extended_card_info_config; \ No newline at end of file diff --git a/migrations/2024-04-24-075735_add-merchant-pkey-ttl-to-business-profile/up.sql b/migrations/2024-04-24-075735_add-merchant-pkey-ttl-to-business-profile/up.sql new file mode 100644 index 0000000000..f1b9ca58f8 --- /dev/null +++ b/migrations/2024-04-24-075735_add-merchant-pkey-ttl-to-business-profile/up.sql @@ -0,0 +1,3 @@ +-- Your SQL goes here + +ALTER TABLE business_profile ADD COLUMN IF NOT EXISTS extended_card_info_config JSONB DEFAULT NULL; \ No newline at end of file