From 65471da57b19c8eb2922fba0350e06b37b53f45f Mon Sep 17 00:00:00 2001 From: Hrithikesh <61539176+hrithikesh026@users.noreply.github.com> Date: Wed, 24 Jul 2024 19:50:16 +0530 Subject: [PATCH] feat: create additional columns in organization table (#5380) Co-authored-by: hyperswitch-bot[bot] <148525504+hyperswitch-bot[bot]@users.noreply.github.com> --- api-reference/openapi_spec.json | 28 ++++++++++++++++- crates/api_models/src/organization.rs | 12 +++++++- crates/diesel_models/src/organization.rs | 30 +++++++++++++++++-- crates/diesel_models/src/schema.rs | 4 +++ crates/diesel_models/src/schema_v2.rs | 4 +++ crates/router/src/core/admin.rs | 2 ++ crates/router/src/db/organization.rs | 12 +++++++- crates/router/src/types/api/admin.rs | 4 +++ crates/router/src/types/domain/user.rs | 4 +++ crates/router/src/types/transformers.rs | 8 +++++ .../down.sql | 6 ++++ .../up.sql | 6 ++++ 12 files changed, 114 insertions(+), 6 deletions(-) create mode 100644 migrations/2024-07-18-120134_create_additional_fields_in_organization_table/down.sql create mode 100644 migrations/2024-07-18-120134_create_additional_fields_in_organization_table/up.sql diff --git a/api-reference/openapi_spec.json b/api-reference/openapi_spec.json index 41d97b1711..9d8110d076 100644 --- a/api-reference/openapi_spec.json +++ b/api-reference/openapi_spec.json @@ -13034,13 +13034,23 @@ "organization_name": { "type": "string", "nullable": true + }, + "organization_details": { + "type": "object", + "nullable": true + }, + "metadata": { + "type": "object", + "nullable": true } } }, "OrganizationResponse": { "type": "object", "required": [ - "organization_id" + "organization_id", + "modified_at", + "created_at" ], "properties": { "organization_id": { @@ -13052,6 +13062,22 @@ "organization_name": { "type": "string", "nullable": true + }, + "organization_details": { + "type": "object", + "nullable": true + }, + "metadata": { + "type": "object", + "nullable": true + }, + "modified_at": { + "type": "string", + "format": "date-time" + }, + "created_at": { + "type": "string", + "format": "date-time" } } }, diff --git a/crates/api_models/src/organization.rs b/crates/api_models/src/organization.rs index 6466e6cc87..1e2203eea3 100644 --- a/crates/api_models/src/organization.rs +++ b/crates/api_models/src/organization.rs @@ -1,4 +1,4 @@ -use common_utils::id_type; +use common_utils::{id_type, pii}; use utoipa::ToSchema; pub struct OrganizationNew { pub org_id: id_type::OrganizationId, @@ -22,6 +22,10 @@ pub struct OrganizationId { #[derive(Debug, serde::Serialize, serde::Deserialize, Clone, ToSchema)] pub struct OrganizationRequest { pub organization_name: Option, + #[schema(value_type = Option)] + pub organization_details: Option, + #[schema(value_type = Option)] + pub metadata: Option, } #[derive(Debug, serde::Serialize, Clone, ToSchema)] @@ -29,4 +33,10 @@ pub struct OrganizationResponse { #[schema(value_type = String, max_length = 64, min_length = 1, example = "org_q98uSGAYbjEwqs0mJwnz")] pub organization_id: id_type::OrganizationId, pub organization_name: Option, + #[schema(value_type = Option)] + pub organization_details: Option, + #[schema(value_type = Option)] + pub metadata: Option, + pub modified_at: time::PrimitiveDateTime, + pub created_at: time::PrimitiveDateTime, } diff --git a/crates/diesel_models/src/organization.rs b/crates/diesel_models/src/organization.rs index e6ffaaadab..f5a67bd70b 100644 --- a/crates/diesel_models/src/organization.rs +++ b/crates/diesel_models/src/organization.rs @@ -1,4 +1,4 @@ -use common_utils::id_type; +use common_utils::{id_type, pii}; use diesel::{AsChangeset, Identifiable, Insertable, Queryable, Selectable}; use crate::schema::organization; @@ -7,6 +7,10 @@ use crate::schema::organization; pub struct Organization { pub org_id: id_type::OrganizationId, pub org_name: Option, + pub organization_details: Option, + pub metadata: Option, + pub created_at: time::PrimitiveDateTime, + pub modified_at: time::PrimitiveDateTime, } #[derive(Clone, Debug, Insertable)] @@ -14,22 +18,42 @@ pub struct Organization { pub struct OrganizationNew { pub org_id: id_type::OrganizationId, pub org_name: Option, + pub organization_details: Option, + pub metadata: Option, + pub created_at: time::PrimitiveDateTime, + pub modified_at: time::PrimitiveDateTime, } #[derive(Clone, Debug, AsChangeset)] #[diesel(table_name = organization)] pub struct OrganizationUpdateInternal { org_name: Option, + organization_details: Option, + metadata: Option, + modified_at: time::PrimitiveDateTime, } pub enum OrganizationUpdate { - Update { org_name: Option }, + Update { + org_name: Option, + organization_details: Option, + metadata: Option, + }, } impl From for OrganizationUpdateInternal { fn from(value: OrganizationUpdate) -> Self { match value { - OrganizationUpdate::Update { org_name } => Self { org_name }, + OrganizationUpdate::Update { + org_name, + organization_details, + metadata, + } => Self { + org_name, + organization_details, + metadata, + modified_at: common_utils::date_time::now(), + }, } } } diff --git a/crates/diesel_models/src/schema.rs b/crates/diesel_models/src/schema.rs index 55f8e935b1..c6f47a3255 100644 --- a/crates/diesel_models/src/schema.rs +++ b/crates/diesel_models/src/schema.rs @@ -733,6 +733,10 @@ diesel::table! { #[max_length = 32] org_id -> Varchar, org_name -> Nullable, + organization_details -> Nullable, + metadata -> Nullable, + created_at -> Timestamp, + modified_at -> Timestamp, } } diff --git a/crates/diesel_models/src/schema_v2.rs b/crates/diesel_models/src/schema_v2.rs index 90046d3fd9..e60e2da0a4 100644 --- a/crates/diesel_models/src/schema_v2.rs +++ b/crates/diesel_models/src/schema_v2.rs @@ -732,6 +732,10 @@ diesel::table! { #[max_length = 32] org_id -> Varchar, org_name -> Nullable, + organization_details -> Nullable, + metadata -> Nullable, + created_at -> Timestamp, + modified_at -> Timestamp, } } diff --git a/crates/router/src/core/admin.rs b/crates/router/src/core/admin.rs index 33d24eecce..4dd41bd4e8 100644 --- a/crates/router/src/core/admin.rs +++ b/crates/router/src/core/admin.rs @@ -129,6 +129,8 @@ pub async fn update_organization( ) -> RouterResponse { let organization_update = diesel_models::organization::OrganizationUpdate::Update { org_name: req.organization_name, + organization_details: req.organization_details, + metadata: req.metadata, }; state .store diff --git a/crates/router/src/db/organization.rs b/crates/router/src/db/organization.rs index e276e1e542..22e720d71d 100644 --- a/crates/router/src/db/organization.rs +++ b/crates/router/src/db/organization.rs @@ -83,6 +83,10 @@ impl OrganizationInterface for super::MockDb { 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(), }; organizations.push(org.clone()); Ok(org) @@ -118,8 +122,14 @@ impl OrganizationInterface for super::MockDb { .iter_mut() .find(|org| org.org_id == *org_id) .map(|org| match &update { - storage::OrganizationUpdate::Update { org_name } => storage::Organization { + storage::OrganizationUpdate::Update { + org_name, + organization_details, + metadata, + } => storage::Organization { org_name: org_name.clone(), + organization_details: organization_details.clone(), + metadata: metadata.clone(), ..org.to_owned() }, }) diff --git a/crates/router/src/types/api/admin.rs b/crates/router/src/types/api/admin.rs index 26dcb056e9..0433308792 100644 --- a/crates/router/src/types/api/admin.rs +++ b/crates/router/src/types/api/admin.rs @@ -32,6 +32,10 @@ impl ForeignFrom for OrganizationResp Self { organization_id: org.org_id, organization_name: org.org_name, + organization_details: org.organization_details, + metadata: org.metadata, + modified_at: org.modified_at, + created_at: org.created_at, } } } diff --git a/crates/router/src/types/domain/user.rs b/crates/router/src/types/domain/user.rs index 9c1c722b28..95349cb439 100644 --- a/crates/router/src/types/domain/user.rs +++ b/crates/router/src/types/domain/user.rs @@ -304,6 +304,10 @@ impl From for NewUserOrganization { 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(), }) } } diff --git a/crates/router/src/types/transformers.rs b/crates/router/src/types/transformers.rs index b4ded74d3a..c81e45d3e6 100644 --- a/crates/router/src/types/transformers.rs +++ b/crates/router/src/types/transformers.rs @@ -1281,6 +1281,10 @@ impl ForeignFrom 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(), } } } @@ -1293,6 +1297,10 @@ impl ForeignFrom 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(), } } } diff --git a/migrations/2024-07-18-120134_create_additional_fields_in_organization_table/down.sql b/migrations/2024-07-18-120134_create_additional_fields_in_organization_table/down.sql new file mode 100644 index 0000000000..963488250d --- /dev/null +++ b/migrations/2024-07-18-120134_create_additional_fields_in_organization_table/down.sql @@ -0,0 +1,6 @@ +-- This file should undo anything in `up.sql` +ALTER TABLE organization +DROP COLUMN organization_details, +DROP COLUMN metadata, +DROP created_at, +DROP modified_at; \ No newline at end of file diff --git a/migrations/2024-07-18-120134_create_additional_fields_in_organization_table/up.sql b/migrations/2024-07-18-120134_create_additional_fields_in_organization_table/up.sql new file mode 100644 index 0000000000..ca10c87a67 --- /dev/null +++ b/migrations/2024-07-18-120134_create_additional_fields_in_organization_table/up.sql @@ -0,0 +1,6 @@ +-- Your SQL goes here +ALTER TABLE organization +ADD COLUMN organization_details jsonb, +ADD COLUMN metadata jsonb, +ADD created_at TIMESTAMP NOT NULL DEFAULT now()::TIMESTAMP, +ADD modified_at TIMESTAMP NOT NULL DEFAULT now()::TIMESTAMP; \ No newline at end of file