From a791391e2ac125ef7bb6a92de5f1419e673bdfe0 Mon Sep 17 00:00:00 2001 From: Hrithikesh <61539176+hrithikesh026@users.noreply.github.com> Date: Tue, 30 Jul 2024 12:45:48 +0530 Subject: [PATCH] feat: rename columns in organization for v2 (#5424) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- crates/analytics/Cargo.toml | 2 +- crates/diesel_models/src/organization.rs | 253 +++++++++++++++++- .../diesel_models/src/query/organization.rs | 30 ++- crates/diesel_models/src/schema.rs | 3 + crates/diesel_models/src/schema_v2.rs | 8 +- crates/drainer/Cargo.toml | 4 +- crates/hyperswitch_domain_models/Cargo.toml | 2 +- crates/hyperswitch_interfaces/Cargo.toml | 1 + crates/router/Cargo.toml | 6 +- crates/router/src/core/admin.rs | 10 +- crates/router/src/db/organization.rs | 34 ++- crates/router/src/types/api/admin.rs | 5 +- crates/router/src/types/domain/user.rs | 16 +- crates/router/src/types/transformers.rs | 26 +- crates/scheduler/Cargo.toml | 2 +- crates/storage_impl/Cargo.toml | 2 +- .../down.sql | 5 + .../up.sql | 6 + .../down.sql | 22 ++ .../up.sql | 18 ++ 20 files changed, 378 insertions(+), 77 deletions(-) create mode 100644 migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/down.sql create mode 100644 migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/up.sql create mode 100644 v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/down.sql create mode 100644 v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/up.sql diff --git a/crates/analytics/Cargo.toml b/crates/analytics/Cargo.toml index 91bc16f277..70038e9827 100644 --- a/crates/analytics/Cargo.toml +++ b/crates/analytics/Cargo.toml @@ -16,7 +16,7 @@ v2 = ["api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "stor api_models = { version = "0.1.0", path = "../api_models", features = ["errors"] } common_enums = { version = "0.1.0", path = "../common_enums" } common_utils = { version = "0.1.0", path = "../common_utils" } -diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"] } +diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"], default-features = false } hyperswitch_domain_models = { version = "0.1.0", path = "../hyperswitch_domain_models", default-features = false } hyperswitch_interfaces = { version = "0.1.0", path = "../hyperswitch_interfaces", default-features = false } masking = { version = "0.1.0", path = "../masking" } diff --git a/crates/diesel_models/src/organization.rs b/crates/diesel_models/src/organization.rs index f5a67bd70b..ed90e641f3 100644 --- a/crates/diesel_models/src/organization.rs +++ b/crates/diesel_models/src/organization.rs @@ -1,33 +1,189 @@ use common_utils::{id_type, pii}; use diesel::{AsChangeset, Identifiable, Insertable, Queryable, Selectable}; +#[cfg(all( + any(any(feature = "v1", feature = "v2"), feature = "v2"), + not(feature = "merchant_account_v2") +))] use crate::schema::organization; +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +use crate::schema_v2::organization; +pub trait OrganizationBridge { + fn get_organization_id(&self) -> id_type::OrganizationId; + fn get_organization_name(&self) -> Option; + fn set_organization_name(&mut self, organization_name: String); +} +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] #[derive(Clone, Debug, Identifiable, Queryable, Selectable)] -#[diesel(table_name = organization, primary_key(org_id), check_for_backend(diesel::pg::Pg))] +#[diesel( + table_name = organization, + primary_key(org_id), + check_for_backend(diesel::pg::Pg) +)] pub struct Organization { - pub org_id: id_type::OrganizationId, - pub org_name: Option, + org_id: id_type::OrganizationId, + org_name: Option, pub organization_details: Option, pub metadata: Option, pub created_at: time::PrimitiveDateTime, pub modified_at: time::PrimitiveDateTime, + #[allow(dead_code)] + id: Option, + #[allow(dead_code)] + organization_name: Option, } +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +#[derive(Clone, Debug, Identifiable, Queryable, Selectable)] +#[diesel( + table_name = organization, + primary_key(id), + check_for_backend(diesel::pg::Pg) +)] +pub struct Organization { + pub organization_details: Option, + pub metadata: Option, + pub created_at: time::PrimitiveDateTime, + pub modified_at: time::PrimitiveDateTime, + id: id_type::OrganizationId, + organization_name: Option, +} + +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] +impl Organization { + pub fn new(org_new: OrganizationNew) -> Self { + let OrganizationNew { + org_id, + org_name, + organization_details, + metadata, + created_at, + modified_at, + id: _, + organization_name: _, + } = org_new; + Self { + id: Some(org_id.clone()), + organization_name: org_name.clone(), + org_id, + org_name, + organization_details, + metadata, + created_at, + modified_at, + } + } +} + +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +impl Organization { + pub fn new(org_new: OrganizationNew) -> Self { + let OrganizationNew { + id, + organization_name, + organization_details, + metadata, + created_at, + modified_at, + } = org_new; + Self { + id, + organization_name, + organization_details, + metadata, + created_at, + modified_at, + } + } +} + +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] #[derive(Clone, Debug, Insertable)] #[diesel(table_name = organization, primary_key(org_id))] pub struct OrganizationNew { - pub org_id: id_type::OrganizationId, - pub org_name: Option, + org_id: id_type::OrganizationId, + org_name: Option, + id: Option, + organization_name: Option, pub organization_details: Option, pub metadata: Option, pub created_at: time::PrimitiveDateTime, pub modified_at: time::PrimitiveDateTime, } +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +#[derive(Clone, Debug, Insertable)] +#[diesel(table_name = organization, primary_key(id))] +pub struct OrganizationNew { + id: id_type::OrganizationId, + organization_name: Option, + pub organization_details: Option, + pub metadata: Option, + pub created_at: time::PrimitiveDateTime, + pub modified_at: time::PrimitiveDateTime, +} + +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] +impl OrganizationNew { + pub fn new(id: id_type::OrganizationId, organization_name: Option) -> Self { + Self { + org_id: id.clone(), + org_name: organization_name.clone(), + id: Some(id), + organization_name, + organization_details: None, + metadata: None, + created_at: common_utils::date_time::now(), + modified_at: common_utils::date_time::now(), + } + } +} + +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +impl OrganizationNew { + pub fn new(id: id_type::OrganizationId, organization_name: Option) -> Self { + Self { + id, + organization_name, + organization_details: None, + metadata: None, + created_at: common_utils::date_time::now(), + modified_at: common_utils::date_time::now(), + } + } +} + +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] #[derive(Clone, Debug, AsChangeset)] #[diesel(table_name = organization)] pub struct OrganizationUpdateInternal { org_name: Option, + organization_name: Option, + organization_details: Option, + metadata: Option, + modified_at: time::PrimitiveDateTime, +} + +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +#[derive(Clone, Debug, AsChangeset)] +#[diesel(table_name = organization)] +pub struct OrganizationUpdateInternal { + organization_name: Option, organization_details: Option, metadata: Option, modified_at: time::PrimitiveDateTime, @@ -35,21 +191,26 @@ pub struct OrganizationUpdateInternal { pub enum OrganizationUpdate { Update { - org_name: Option, + organization_name: Option, organization_details: Option, metadata: Option, }, } +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] impl From for OrganizationUpdateInternal { fn from(value: OrganizationUpdate) -> Self { match value { OrganizationUpdate::Update { - org_name, + organization_name, organization_details, metadata, } => Self { - org_name, + org_name: organization_name.clone(), + organization_name, organization_details, metadata, modified_at: common_utils::date_time::now(), @@ -57,3 +218,79 @@ impl From for OrganizationUpdateInternal { } } } +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] + +impl From for OrganizationUpdateInternal { + fn from(value: OrganizationUpdate) -> Self { + match value { + OrganizationUpdate::Update { + organization_name, + organization_details, + metadata, + } => Self { + organization_name, + organization_details, + metadata, + modified_at: common_utils::date_time::now(), + }, + } + } +} + +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] +impl OrganizationBridge for Organization { + fn get_organization_id(&self) -> id_type::OrganizationId { + self.org_id.clone() + } + fn get_organization_name(&self) -> Option { + self.org_name.clone() + } + fn set_organization_name(&mut self, organization_name: String) { + self.org_name = Some(organization_name); + } +} + +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] +impl OrganizationBridge for OrganizationNew { + fn get_organization_id(&self) -> id_type::OrganizationId { + self.org_id.clone() + } + fn get_organization_name(&self) -> Option { + self.org_name.clone() + } + fn set_organization_name(&mut self, organization_name: String) { + self.org_name = Some(organization_name); + } +} + +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +impl OrganizationBridge for Organization { + fn get_organization_id(&self) -> id_type::OrganizationId { + self.id.clone() + } + fn get_organization_name(&self) -> Option { + self.organization_name.clone() + } + fn set_organization_name(&mut self, organization_name: String) { + self.organization_name = Some(organization_name); + } +} + +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +impl OrganizationBridge for OrganizationNew { + fn get_organization_id(&self) -> id_type::OrganizationId { + self.id.clone() + } + fn get_organization_name(&self) -> Option { + self.organization_name.clone() + } + fn set_organization_name(&mut self, organization_name: String) { + self.organization_name = Some(organization_name); + } +} diff --git a/crates/diesel_models/src/query/organization.rs b/crates/diesel_models/src/query/organization.rs index 671f742d88..c05445191b 100644 --- a/crates/diesel_models/src/query/organization.rs +++ b/crates/diesel_models/src/query/organization.rs @@ -1,9 +1,14 @@ use common_utils::id_type; use diesel::{associations::HasTable, ExpressionMethods}; -use crate::{ - organization::*, query::generics, schema::organization::dsl, PgPooledConn, StorageResult, -}; +#[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") +))] +use crate::schema::organization::dsl; +#[cfg(all(feature = "v2", feature = "merchant_account_v2"))] +use crate::schema_v2::organization::dsl; +use crate::{organization::*, query::generics, PgPooledConn, StorageResult}; impl OrganizationNew { pub async fn insert(self, conn: &PgPooledConn) -> StorageResult { @@ -16,8 +21,17 @@ impl Organization { conn: &PgPooledConn, org_id: id_type::OrganizationId, ) -> StorageResult { - generics::generic_find_one::<::Table, _, _>(conn, dsl::org_id.eq(org_id)) - .await + generics::generic_find_one::<::Table, _, _>( + conn, + #[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") + ))] + dsl::org_id.eq(org_id), + #[cfg(all(feature = "v2", feature = "merchant_account_v2"))] + dsl::id.eq(org_id), + ) + .await } pub async fn update_by_org_id( @@ -32,7 +46,13 @@ impl Organization { _, >( conn, + #[cfg(all( + any(feature = "v1", feature = "v2"), + not(feature = "merchant_account_v2") + ))] dsl::org_id.eq(org_id), + #[cfg(all(feature = "v2", feature = "merchant_account_v2"))] + dsl::id.eq(org_id), OrganizationUpdateInternal::from(update), ) .await diff --git a/crates/diesel_models/src/schema.rs b/crates/diesel_models/src/schema.rs index 185677c4c7..3077fd86f3 100644 --- a/crates/diesel_models/src/schema.rs +++ b/crates/diesel_models/src/schema.rs @@ -730,6 +730,9 @@ diesel::table! { metadata -> Nullable, created_at -> Timestamp, modified_at -> Timestamp, + #[max_length = 32] + id -> Nullable, + organization_name -> Nullable, } } diff --git a/crates/diesel_models/src/schema_v2.rs b/crates/diesel_models/src/schema_v2.rs index ca6a720825..433284f4d7 100644 --- a/crates/diesel_models/src/schema_v2.rs +++ b/crates/diesel_models/src/schema_v2.rs @@ -728,14 +728,14 @@ diesel::table! { use diesel::sql_types::*; use crate::enums::diesel_exports::*; - organization (org_id) { - #[max_length = 32] - org_id -> Varchar, - org_name -> Nullable, + organization (id) { organization_details -> Nullable, metadata -> Nullable, created_at -> Timestamp, modified_at -> Timestamp, + #[max_length = 32] + id -> Varchar, + organization_name -> Nullable, } } diff --git a/crates/drainer/Cargo.toml b/crates/drainer/Cargo.toml index 93e5512222..d02917148e 100644 --- a/crates/drainer/Cargo.toml +++ b/crates/drainer/Cargo.toml @@ -10,7 +10,7 @@ license.workspace = true [features] release = ["vergen", "external_services/aws_kms"] vergen = ["router_env/vergen"] -v1 = ["diesel_models/v1"] +v1 = ["diesel_models/v1", "hyperswitch_interfaces/v1"] [dependencies] actix-web = "4.5.1" @@ -32,7 +32,7 @@ tokio = { version = "1.37.0", features = ["macros", "rt-multi-thread"] } # First Party Crates common_utils = { version = "0.1.0", path = "../common_utils", features = ["signals"] } -diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"] } +diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"], default-features = false } external_services = { version = "0.1.0", path = "../external_services" } hyperswitch_interfaces = { version = "0.1.0", path = "../hyperswitch_interfaces" } masking = { version = "0.1.0", path = "../masking" } diff --git a/crates/hyperswitch_domain_models/Cargo.toml b/crates/hyperswitch_domain_models/Cargo.toml index d10d72ab3a..adbea0effb 100644 --- a/crates/hyperswitch_domain_models/Cargo.toml +++ b/crates/hyperswitch_domain_models/Cargo.toml @@ -25,7 +25,7 @@ api_models = { version = "0.1.0", path = "../api_models", features = ["errors"] cards = { version = "0.1.0", path = "../cards" } common_enums = { version = "0.1.0", path = "../common_enums" } common_utils = { version = "0.1.0", path = "../common_utils", features = ["async_ext", "metrics", "encryption_service", "keymanager"] } -diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"] } +diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"], default-features = false } masking = { version = "0.1.0", path = "../masking" } router_derive = { version = "0.1.0", path = "../router_derive" } router_env = { version = "0.1.0", path = "../router_env" } diff --git a/crates/hyperswitch_interfaces/Cargo.toml b/crates/hyperswitch_interfaces/Cargo.toml index 7830415e5d..887062d625 100644 --- a/crates/hyperswitch_interfaces/Cargo.toml +++ b/crates/hyperswitch_interfaces/Cargo.toml @@ -9,6 +9,7 @@ license.workspace = true [features] default = ["dummy_connector", "frm", "payouts"] dummy_connector = [] +v1 = ["hyperswitch_domain_models/v1"] payouts = ["hyperswitch_domain_models/payouts"] frm = ["hyperswitch_domain_models/frm"] diff --git a/crates/router/Cargo.toml b/crates/router/Cargo.toml index e01be51a68..53842b38ab 100644 --- a/crates/router/Cargo.toml +++ b/crates/router/Cargo.toml @@ -32,7 +32,7 @@ payout_retry = ["payouts"] recon = ["email", "api_models/recon"] retry = [] v2 = ["api_models/v2", "diesel_models/v2", "hyperswitch_domain_models/v2", "storage_impl/v2", "kgraph_utils/v2"] -v1 = ["api_models/v1", "diesel_models/v1", "hyperswitch_domain_models/v1", "storage_impl/v1"] +v1 = ["api_models/v1", "diesel_models/v1", "hyperswitch_domain_models/v1", "storage_impl/v1", "hyperswitch_interfaces/v1"] customer_v2 = ["api_models/customer_v2", "diesel_models/customer_v2", "hyperswitch_domain_models/customer_v2"] merchant_account_v2 = ["api_models/merchant_account_v2", "diesel_models/merchant_account_v2", "hyperswitch_domain_models/merchant_account_v2"] payment_v2 = ["api_models/payment_v2", "diesel_models/payment_v2", "hyperswitch_domain_models/payment_v2"] @@ -118,13 +118,13 @@ x509-parser = "0.16.0" # First party crates -analytics = { version = "0.1.0", path = "../analytics", optional = true } +analytics = { version = "0.1.0", path = "../analytics", optional = true, default-features = false } api_models = { version = "0.1.0", path = "../api_models", features = ["errors"] } cards = { version = "0.1.0", path = "../cards" } common_enums = { version = "0.1.0", path = "../common_enums" } common_utils = { version = "0.1.0", path = "../common_utils", features = ["signals", "async_ext", "logs", "metrics", "keymanager", "encryption_service"] } currency_conversion = { version = "0.1.0", path = "../currency_conversion" } -diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"] } +diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"] , default-features = false } euclid = { version = "0.1.0", path = "../euclid", features = ["valued_jit"] } events = { version = "0.1.0", path = "../events" } external_services = { version = "0.1.0", path = "../external_services" } diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs index 3035e30b0b..8e77aa95d1 100644 --- a/crates/router/src/core/admin.rs +++ b/crates/router/src/core/admin.rs @@ -12,6 +12,8 @@ use common_utils::{ types::keymanager::{self as km_types, KeyManagerState}, }; use diesel_models::configs; +#[cfg(all(any(feature = "v1", feature = "v2"), feature = "olap"))] +use diesel_models::organization::OrganizationBridge; use error_stack::{report, FutureExt, ResultExt}; use futures::future::try_join_all; use masking::{ExposeInterface, PeekInterface, Secret}; @@ -134,7 +136,7 @@ pub async fn update_organization( req: api::OrganizationRequest, ) -> RouterResponse { let organization_update = diesel_models::organization::OrganizationUpdate::Update { - org_name: req.organization_name, + organization_name: req.organization_name, organization_details: req.organization_details, metadata: req.metadata, }; @@ -387,7 +389,7 @@ impl MerchantAccountCreateBridge for api::MerchantAccountCreate { payout_routing_algorithm: self.payout_routing_algorithm, #[cfg(not(feature = "payouts"))] payout_routing_algorithm: None, - organization_id: organization.org_id, + organization_id: organization.get_organization_id(), is_recon_enabled: false, default_profile: None, recon_status: diesel_models::enums::ReconStatus::NotRequested, @@ -638,7 +640,7 @@ impl MerchantAccountCreateBridge for api::MerchantAccountCreate { }, )?; - CreateOrValidateOrganization::new(self.organization_id.clone()) + let organization = CreateOrValidateOrganization::new(self.organization_id.clone()) .create_or_validate(db) .await?; @@ -692,7 +694,7 @@ impl MerchantAccountCreateBridge for api::MerchantAccountCreate { intent_fulfillment_time: None, frm_routing_algorithm: None, payout_routing_algorithm: None, - organization_id: self.organization_id, + organization_id: organization.get_organization_id(), is_recon_enabled: false, default_profile: None, recon_status: diesel_models::enums::ReconStatus::NotRequested, diff --git a/crates/router/src/db/organization.rs b/crates/router/src/db/organization.rs index 22e720d71d..bc79fdc0a0 100644 --- a/crates/router/src/db/organization.rs +++ b/crates/router/src/db/organization.rs @@ -1,5 +1,5 @@ use common_utils::{errors::CustomResult, id_type}; -use diesel_models::organization as storage; +use diesel_models::{organization as storage, organization::OrganizationBridge}; use error_stack::report; use router_env::{instrument, tracing}; @@ -73,21 +73,14 @@ impl OrganizationInterface for super::MockDb { if organizations .iter() - .any(|org| org.org_id == organization.org_id) + .any(|org| org.get_organization_id() == organization.get_organization_id()) { Err(errors::StorageError::DuplicateValue { entity: "org_id", key: None, })? } - let org = storage::Organization { - org_id: organization.org_id.clone(), - org_name: organization.org_name, - organization_details: organization.organization_details, - metadata: organization.metadata, - created_at: common_utils::date_time::now(), - modified_at: common_utils::date_time::now(), - }; + let org = storage::Organization::new(organization); organizations.push(org.clone()); Ok(org) } @@ -100,7 +93,7 @@ impl OrganizationInterface for super::MockDb { organizations .iter() - .find(|org| org.org_id == *org_id) + .find(|org| org.get_organization_id() == *org_id) .cloned() .ok_or( errors::StorageError::ValueNotFound(format!( @@ -120,18 +113,20 @@ impl OrganizationInterface for super::MockDb { organizations .iter_mut() - .find(|org| org.org_id == *org_id) + .find(|org| org.get_organization_id() == *org_id) .map(|org| match &update { storage::OrganizationUpdate::Update { - org_name, + organization_name, organization_details, metadata, - } => storage::Organization { - org_name: org_name.clone(), - organization_details: organization_details.clone(), - metadata: metadata.clone(), - ..org.to_owned() - }, + } => { + organization_name + .as_ref() + .map(|org_name| org.set_organization_name(org_name.to_owned())); + organization_details.clone_into(&mut org.organization_details); + metadata.clone_into(&mut org.metadata); + org + } }) .ok_or( errors::StorageError::ValueNotFound(format!( @@ -140,5 +135,6 @@ impl OrganizationInterface for super::MockDb { )) .into(), ) + .cloned() } } diff --git a/crates/router/src/types/api/admin.rs b/crates/router/src/types/api/admin.rs index 9669b8326d..acbca54f4b 100644 --- a/crates/router/src/types/api/admin.rs +++ b/crates/router/src/types/api/admin.rs @@ -15,6 +15,7 @@ use common_utils::{ ext_traits::{AsyncExt, Encode, ValueExt}, types::keymanager::Identifier, }; +use diesel_models::organization::OrganizationBridge; use error_stack::{report, ResultExt}; use hyperswitch_domain_models::{ merchant_key_store::MerchantKeyStore, type_encryption::decrypt_optional, @@ -30,8 +31,8 @@ use crate::{ impl ForeignFrom for OrganizationResponse { fn foreign_from(org: diesel_models::organization::Organization) -> Self { Self { - organization_id: org.org_id, - organization_name: org.org_name, + organization_id: org.get_organization_id(), + organization_name: org.get_organization_name(), organization_details: org.organization_details, metadata: org.metadata, modified_at: org.modified_at, diff --git a/crates/router/src/types/domain/user.rs b/crates/router/src/types/domain/user.rs index 8b973a8cf4..2de6bc44fb 100644 --- a/crates/router/src/types/domain/user.rs +++ b/crates/router/src/types/domain/user.rs @@ -10,7 +10,7 @@ use common_utils::{ }; use diesel_models::{ enums::{TotpStatus, UserRoleVersion, UserStatus}, - organization::{self as diesel_org, Organization}, + organization::{self as diesel_org, Organization, OrganizationBridge}, user as storage_user, user_role::{UserRole, UserRoleNew}, }; @@ -254,7 +254,7 @@ impl NewUserOrganization { } pub fn get_organization_id(&self) -> id_type::OrganizationId { - self.0.org_id.clone() + self.0.get_organization_id() } } @@ -300,14 +300,10 @@ impl From<(user_api::CreateInternalUserRequest, id_type::OrganizationId)> for Ne impl From for NewUserOrganization { fn from(value: UserMerchantCreateRequestWithToken) -> Self { - Self(diesel_org::OrganizationNew { - org_id: value.2.org_id, - org_name: Some(value.1.company_name), - organization_details: None, - metadata: None, - created_at: common_utils::date_time::now(), - modified_at: common_utils::date_time::now(), - }) + Self(diesel_org::OrganizationNew::new( + value.2.org_id, + Some(value.1.company_name), + )) } } diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index 11aebf5b98..edc5b5e40d 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -1389,14 +1389,7 @@ impl ForeignFrom for diesel_models::organization::OrganizationNew { fn foreign_from(item: api_models::organization::OrganizationNew) -> Self { - Self { - org_id: item.org_id, - org_name: item.org_name, - organization_details: None, - metadata: None, - created_at: common_utils::date_time::now(), - modified_at: common_utils::date_time::now(), - } + Self::new(item.org_id, item.org_name) } } @@ -1405,14 +1398,15 @@ impl ForeignFrom { fn foreign_from(item: api_models::organization::OrganizationRequest) -> Self { let org_new = api_models::organization::OrganizationNew::new(None); - Self { - org_id: org_new.org_id, - org_name: item.organization_name, - organization_details: item.organization_details, - metadata: item.metadata, - created_at: common_utils::date_time::now(), - modified_at: common_utils::date_time::now(), - } + let api_models::organization::OrganizationRequest { + organization_name, + organization_details, + metadata, + } = item; + let mut org_new_db = Self::new(org_new.org_id, organization_name); + org_new_db.organization_details = organization_details; + org_new_db.metadata = metadata; + org_new_db } } diff --git a/crates/scheduler/Cargo.toml b/crates/scheduler/Cargo.toml index 25a297a8bc..e962886908 100644 --- a/crates/scheduler/Cargo.toml +++ b/crates/scheduler/Cargo.toml @@ -30,7 +30,7 @@ uuid = { version = "1.8.0", features = ["v4"] } # First party crates common_utils = { version = "0.1.0", path = "../common_utils", features = ["signals", "async_ext"] } -diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"] } +diesel_models = { version = "0.1.0", path = "../diesel_models", features = ["kv_store"], default-features = false } external_services = { version = "0.1.0", path = "../external_services" } hyperswitch_domain_models = { version = "0.1.0", path = "../hyperswitch_domain_models", default-features = false } redis_interface = { version = "0.1.0", path = "../redis_interface" } diff --git a/crates/storage_impl/Cargo.toml b/crates/storage_impl/Cargo.toml index d42f64931f..386f442db6 100644 --- a/crates/storage_impl/Cargo.toml +++ b/crates/storage_impl/Cargo.toml @@ -21,7 +21,7 @@ payment_v2 = ["hyperswitch_domain_models/payment_v2", "diesel_models/payment_v2" api_models = { version = "0.1.0", path = "../api_models" } common_enums = { version = "0.1.0", path = "../common_enums" } common_utils = { version = "0.1.0", path = "../common_utils" } -diesel_models = { version = "0.1.0", path = "../diesel_models" } +diesel_models = { version = "0.1.0", path = "../diesel_models", default-features = false } hyperswitch_domain_models = { version = "0.1.0", path = "../hyperswitch_domain_models", default-features = false } masking = { version = "0.1.0", path = "../masking" } redis_interface = { version = "0.1.0", path = "../redis_interface" } diff --git a/migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/down.sql b/migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/down.sql new file mode 100644 index 0000000000..d6c99615ae --- /dev/null +++ b/migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/down.sql @@ -0,0 +1,5 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE organization +DROP COLUMN id; +ALTER TABLE organization +DROP COLUMN organization_name; \ No newline at end of file diff --git a/migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/up.sql b/migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/up.sql new file mode 100644 index 0000000000..81d8cf44c9 --- /dev/null +++ b/migrations/2024-07-29-062548_add-organization_name-and-id-fields-in-organization/up.sql @@ -0,0 +1,6 @@ +-- Your SQL goes here +ALTER TABLE organization +ADD COLUMN id VARCHAR(32); +ALTER TABLE organization +ADD COLUMN organization_name TEXT; + \ No newline at end of file diff --git a/v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/down.sql b/v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/down.sql new file mode 100644 index 0000000000..a41a6c32be --- /dev/null +++ b/v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/down.sql @@ -0,0 +1,22 @@ +-- Alter queries +ALTER TABLE organization +ADD COLUMN org_id VARCHAR(32); + +ALTER TABLE organization +ADD COLUMN org_name TEXT; + +-- back fill +UPDATE organization +SET org_id = id +WHERE org_id is NULL; + +ALTER TABLE organization +DROP CONSTRAINT organization_pkey_id; + +ALTER TABLE organization +ADD CONSTRAINT organization_pkey PRIMARY KEY (org_id); + +-- back fill +UPDATE organization +SET org_name = organization_name +WHERE org_name IS NULL AND organization_name IS NOT NULL; \ No newline at end of file diff --git a/v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/up.sql b/v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/up.sql new file mode 100644 index 0000000000..3ae4a3c3d3 --- /dev/null +++ b/v2_migrations/2024-07-29-063217_drop-org_id-and-org_name-from-organization/up.sql @@ -0,0 +1,18 @@ +-- Backfill +UPDATE organization +SET id = org_id +WHERE id is NULL; + +UPDATE organization +SET organization_name = org_name +WHERE organization_name IS NULL AND org_name IS NOT NULL; + +-- Alter queries +ALTER TABLE organization +DROP COLUMN org_id; + +ALTER TABLE organization +DROP COLUMN org_name; + +ALTER TABLE organization +ADD CONSTRAINT organization_pkey_id PRIMARY KEY (id); \ No newline at end of file