From fe0667ed209db1ab0b8311a17bd5d9ddefbbc45c Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Fri, 16 Aug 2024 10:40:26 +0800 Subject: [PATCH 1/4] feat: use subscription req struct --- libs/client-api/src/http_billing.rs | 22 +++++++++++----------- libs/shared-entity/src/dto/billing_dto.rs | 9 +++++++++ 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 2f3fc307..3e3f06ca 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -1,7 +1,7 @@ use crate::Client; use client_api_entity::billing_dto::{ - SetSubscriptionRecurringInterval, SubscriptionCancelRequest, SubscriptionPlanDetail, - WorkspaceUsageAndLimit, + SetSubscriptionRecurringInterval, SubscriptionCancelRequest, SubscriptionLinkRequest, + SubscriptionPlanDetail, WorkspaceUsageAndLimit, }; use reqwest::Method; use shared_entity::{ @@ -44,6 +44,14 @@ impl Client { workspace_subscription_plan: SubscriptionPlan, success_url: &str, ) -> Result { + let sub_link_req = SubscriptionLinkRequest { + workspace_subscription_plan, + recurring_interval, + workspace_id, + success_url, + with_test_clock: None, + }; + let url = format!( "{}/billing/api/v1/subscription-link", self.base_billing_url() @@ -51,15 +59,7 @@ impl Client { let resp = self .http_client_with_auth(Method::GET, &url) .await? - .query(&[ - ("workspace_id", workspace_id), - ("recurring_interval", recurring_interval.as_str()), - ( - "workspace_subscription_plan", - workspace_subscription_plan.as_ref(), - ), - ("success_url", success_url), - ]) + .query(&sub_link_req) .send() .await?; diff --git a/libs/shared-entity/src/dto/billing_dto.rs b/libs/shared-entity/src/dto/billing_dto.rs index 827ca1c0..9cb5b909 100644 --- a/libs/shared-entity/src/dto/billing_dto.rs +++ b/libs/shared-entity/src/dto/billing_dto.rs @@ -148,3 +148,12 @@ pub enum Currency { #[default] USD, } + +#[derive(Serialize, Deserialize)] +pub struct SubscriptionLinkRequest<'a> { + pub workspace_subscription_plan: SubscriptionPlan, + pub recurring_interval: RecurringInterval, + pub workspace_id: &'a str, + pub success_url: &'a str, + pub with_test_clock: Option, +} From 87083d503abd1ec7f5da29224d0311dfa0e36124 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Fri, 16 Aug 2024 10:51:59 +0800 Subject: [PATCH 2/4] feat: add subscription free trial --- libs/client-api/src/http_billing.rs | 22 +++++++++++++++++++++- libs/shared-entity/src/dto/billing_dto.rs | 5 +++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 3e3f06ca..24711c1c 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -1,7 +1,7 @@ use crate::Client; use client_api_entity::billing_dto::{ SetSubscriptionRecurringInterval, SubscriptionCancelRequest, SubscriptionLinkRequest, - SubscriptionPlanDetail, WorkspaceUsageAndLimit, + SubscriptionPlanDetail, SubscriptionTrialRequest, WorkspaceUsageAndLimit, }; use reqwest::Method; use shared_entity::{ @@ -215,4 +215,24 @@ impl Client { .await? .into_data() } + + /// request a free trial for plan + pub async fn post_subscription_free_trial( + &self, + workspace_id: &str, + plan: SubscriptionPlan, + ) -> Result<(), AppResponseError> { + let url = format!( + "{}/billing/api/v1/subscription-trial/{}", + self.base_billing_url(), + workspace_id + ); + let resp = self + .cloud_client + .post(&url) + .query(&SubscriptionTrialRequest { plan }) + .send() + .await?; + AppResponse::<()>::from_response(resp).await?.into_error() + } } diff --git a/libs/shared-entity/src/dto/billing_dto.rs b/libs/shared-entity/src/dto/billing_dto.rs index 9cb5b909..8445618f 100644 --- a/libs/shared-entity/src/dto/billing_dto.rs +++ b/libs/shared-entity/src/dto/billing_dto.rs @@ -157,3 +157,8 @@ pub struct SubscriptionLinkRequest<'a> { pub success_url: &'a str, pub with_test_clock: Option, } + +#[derive(Serialize, Deserialize, Debug)] +pub struct SubscriptionTrialRequest { + pub plan: SubscriptionPlan, +} From 77da2380f7cb01bbb9a06a3870588f4c0e454278 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Fri, 16 Aug 2024 11:03:34 +0800 Subject: [PATCH 3/4] chore: create subscription new version --- libs/client-api/src/http_billing.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 24711c1c..adb35037 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -52,6 +52,13 @@ impl Client { with_test_clock: None, }; + self.create_subscription_v2(&sub_link_req).await + } + + pub async fn create_subscription_v2( + &self, + sub_link_req: &SubscriptionLinkRequest<'_>, + ) -> Result { let url = format!( "{}/billing/api/v1/subscription-link", self.base_billing_url() @@ -59,7 +66,7 @@ impl Client { let resp = self .http_client_with_auth(Method::GET, &url) .await? - .query(&sub_link_req) + .query(sub_link_req) .send() .await?; From 8c20218e8767323dec70bf4120b08057e6860acf Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Fri, 16 Aug 2024 11:29:46 +0800 Subject: [PATCH 4/4] chore: use string instead --- libs/client-api/src/http_billing.rs | 6 +++--- libs/shared-entity/src/dto/billing_dto.rs | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index adb35037..5cfd2e5a 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -47,8 +47,8 @@ impl Client { let sub_link_req = SubscriptionLinkRequest { workspace_subscription_plan, recurring_interval, - workspace_id, - success_url, + workspace_id: workspace_id.to_string(), + success_url: success_url.to_string(), with_test_clock: None, }; @@ -57,7 +57,7 @@ impl Client { pub async fn create_subscription_v2( &self, - sub_link_req: &SubscriptionLinkRequest<'_>, + sub_link_req: &SubscriptionLinkRequest, ) -> Result { let url = format!( "{}/billing/api/v1/subscription-link", diff --git a/libs/shared-entity/src/dto/billing_dto.rs b/libs/shared-entity/src/dto/billing_dto.rs index 8445618f..c2407210 100644 --- a/libs/shared-entity/src/dto/billing_dto.rs +++ b/libs/shared-entity/src/dto/billing_dto.rs @@ -150,11 +150,11 @@ pub enum Currency { } #[derive(Serialize, Deserialize)] -pub struct SubscriptionLinkRequest<'a> { +pub struct SubscriptionLinkRequest { pub workspace_subscription_plan: SubscriptionPlan, pub recurring_interval: RecurringInterval, - pub workspace_id: &'a str, - pub success_url: &'a str, + pub workspace_id: String, + pub success_url: String, pub with_test_clock: Option, }