diff --git a/crates/api_models/src/user/dashboard_metadata.rs b/crates/api_models/src/user/dashboard_metadata.rs index f15029a7a4..fa550d671f 100644 --- a/crates/api_models/src/user/dashboard_metadata.rs +++ b/crates/api_models/src/user/dashboard_metadata.rs @@ -27,6 +27,7 @@ pub enum SetMetaDataRequest { #[serde(skip)] IsChangePasswordRequired, OnboardingSurvey(OnboardingSurvey), + ReconStatus(ReconStatus), } #[derive(Debug, serde::Deserialize, serde::Serialize)] @@ -104,6 +105,12 @@ pub struct ProdIntent { pub is_completed: bool, } +#[derive(Debug, serde::Deserialize, serde::Serialize, Clone)] +pub struct ReconStatus { + pub is_order_data_set: bool, + pub is_processor_data_set: bool, +} + #[derive(Debug, serde::Deserialize, EnumString, serde::Serialize)] pub enum GetMetaDataRequest { ProductionAgreement, @@ -129,6 +136,7 @@ pub enum GetMetaDataRequest { IsMultipleConfiguration, IsChangePasswordRequired, OnboardingSurvey, + ReconStatus, } #[derive(Debug, serde::Deserialize, serde::Serialize)] @@ -167,4 +175,5 @@ pub enum GetMetaDataResponse { IsMultipleConfiguration(bool), IsChangePasswordRequired(bool), OnboardingSurvey(Option), + ReconStatus(Option), } diff --git a/crates/diesel_models/src/enums.rs b/crates/diesel_models/src/enums.rs index 7fda63fb6a..1697a7c062 100644 --- a/crates/diesel_models/src/enums.rs +++ b/crates/diesel_models/src/enums.rs @@ -284,6 +284,7 @@ pub enum DashboardMetadata { IsMultipleConfiguration, IsChangePasswordRequired, OnboardingSurvey, + ReconStatus, } #[derive( diff --git a/crates/router/src/core/user/dashboard_metadata.rs b/crates/router/src/core/user/dashboard_metadata.rs index 2ea2ba1d3d..d79d155cba 100644 --- a/crates/router/src/core/user/dashboard_metadata.rs +++ b/crates/router/src/core/user/dashboard_metadata.rs @@ -122,6 +122,7 @@ fn parse_set_request(data_enum: api::SetMetaDataRequest) -> UserResult { Ok(types::MetaData::OnboardingSurvey(req)) } + api::SetMetaDataRequest::ReconStatus(req) => Ok(types::MetaData::ReconStatus(req)), } } @@ -150,6 +151,7 @@ fn parse_get_request(data_enum: api::GetMetaDataRequest) -> DBEnum { api::GetMetaDataRequest::IsMultipleConfiguration => DBEnum::IsMultipleConfiguration, api::GetMetaDataRequest::IsChangePasswordRequired => DBEnum::IsChangePasswordRequired, api::GetMetaDataRequest::OnboardingSurvey => DBEnum::OnboardingSurvey, + api::GetMetaDataRequest::ReconStatus => DBEnum::ReconStatus, } } @@ -233,6 +235,10 @@ fn into_response( let resp = utils::deserialize_to_response(data)?; Ok(api::GetMetaDataResponse::OnboardingSurvey(resp)) } + DBEnum::ReconStatus => { + let resp = utils::deserialize_to_response(data)?; + Ok(api::GetMetaDataResponse::ReconStatus(resp)) + } } } @@ -594,6 +600,30 @@ async fn insert_metadata( ) .await } + types::MetaData::ReconStatus(data) => { + let mut metadata = utils::insert_merchant_scoped_metadata_to_db( + state, + user.user_id.clone(), + user.merchant_id.clone(), + user.org_id.clone(), + metadata_key, + data.clone(), + ) + .await; + + if utils::is_update_required(&metadata) { + metadata = utils::update_merchant_scoped_metadata( + state, + user.user_id, + user.merchant_id, + user.org_id, + metadata_key, + data, + ) + .await; + } + metadata + } } } diff --git a/crates/router/src/types/domain/user/dashboard_metadata.rs b/crates/router/src/types/domain/user/dashboard_metadata.rs index 665ee1ab02..364ef7a474 100644 --- a/crates/router/src/types/domain/user/dashboard_metadata.rs +++ b/crates/router/src/types/domain/user/dashboard_metadata.rs @@ -27,6 +27,7 @@ pub enum MetaData { IsMultipleConfiguration(bool), IsChangePasswordRequired(bool), OnboardingSurvey(api::OnboardingSurvey), + ReconStatus(api::ReconStatus), } impl From<&MetaData> for DBEnum { @@ -55,6 +56,7 @@ impl From<&MetaData> for DBEnum { MetaData::IsMultipleConfiguration(_) => Self::IsMultipleConfiguration, MetaData::IsChangePasswordRequired(_) => Self::IsChangePasswordRequired, MetaData::OnboardingSurvey(_) => Self::OnboardingSurvey, + MetaData::ReconStatus(_) => Self::ReconStatus, } } } diff --git a/crates/router/src/utils/user/dashboard_metadata.rs b/crates/router/src/utils/user/dashboard_metadata.rs index f5836f25fa..c19b52b6f8 100644 --- a/crates/router/src/utils/user/dashboard_metadata.rs +++ b/crates/router/src/utils/user/dashboard_metadata.rs @@ -217,7 +217,8 @@ pub fn separate_metadata_type_based_on_scope( | DBEnum::ConfigureWoocom | DBEnum::SetupWoocomWebhook | DBEnum::OnboardingSurvey - | DBEnum::IsMultipleConfiguration => merchant_scoped.push(key), + | DBEnum::IsMultipleConfiguration + | DBEnum::ReconStatus => merchant_scoped.push(key), DBEnum::Feedback | DBEnum::ProdIntent | DBEnum::IsChangePasswordRequired => { user_scoped.push(key) } diff --git a/migrations/2025-03-21-113624_add-recon-status-enum-variant-dashboard-metadata/down.sql b/migrations/2025-03-21-113624_add-recon-status-enum-variant-dashboard-metadata/down.sql new file mode 100644 index 0000000000..2a3866c86d --- /dev/null +++ b/migrations/2025-03-21-113624_add-recon-status-enum-variant-dashboard-metadata/down.sql @@ -0,0 +1,2 @@ +-- This file should undo anything in `up.sql` +SELECT 1; diff --git a/migrations/2025-03-21-113624_add-recon-status-enum-variant-dashboard-metadata/up.sql b/migrations/2025-03-21-113624_add-recon-status-enum-variant-dashboard-metadata/up.sql new file mode 100644 index 0000000000..d395dc5966 --- /dev/null +++ b/migrations/2025-03-21-113624_add-recon-status-enum-variant-dashboard-metadata/up.sql @@ -0,0 +1,3 @@ +-- Your SQL goes here +ALTER TYPE "DashboardMetadata" +ADD VALUE IF NOT EXISTS 'recon_status';