From e626917d71458628b7f261231429d6eccf5bb802 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Sun, 14 Jul 2024 00:49:57 +0800 Subject: [PATCH 1/4] chore: add billing cancellation request --- libs/shared-entity/src/dto/billing_dto.rs | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/libs/shared-entity/src/dto/billing_dto.rs b/libs/shared-entity/src/dto/billing_dto.rs index 1ce62c49..8a51e16e 100644 --- a/libs/shared-entity/src/dto/billing_dto.rs +++ b/libs/shared-entity/src/dto/billing_dto.rs @@ -106,7 +106,7 @@ pub struct WorkspaceSubscriptionStatus { pub current_period_end: i64, } -#[derive(Serialize, Deserialize)] +#[derive(Serialize, Deserialize, Debug)] pub struct WorkspaceUsageAndLimit { pub member_count: i64, pub member_count_limit: i64, @@ -119,3 +119,10 @@ pub struct WorkspaceUsageAndLimit { pub local_ai: bool, pub ai_responses_unlimited: bool, } + +#[derive(Serialize, Deserialize, Debug)] +pub struct SubscriptionCancelRequest { + pub workspace_id: String, + pub plan: SubscriptionPlan, + pub sync: bool, // if true, this request will block until stripe has sent the cancelation webhook +} From 8186b3836b3a820d8744fbc59eb9d1ed68a18e7b Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Sun, 14 Jul 2024 01:12:53 +0800 Subject: [PATCH 2/4] chore: update api for cancel request --- libs/client-api/src/http_billing.rs | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 3b36fad0..45c8e765 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -1,7 +1,6 @@ use crate::Client; -use client_api_entity::billing_dto::WorkspaceUsageAndLimit; +use client_api_entity::billing_dto::{SubscriptionCancelRequest, WorkspaceUsageAndLimit}; use reqwest::Method; -use serde_json::json; use shared_entity::{ dto::billing_dto::{RecurringInterval, SubscriptionPlan, WorkspaceSubscriptionStatus}, response::{AppResponse, AppResponseError}, @@ -68,8 +67,7 @@ impl Client { pub async fn cancel_subscription( &self, - workspace_id: &str, - plan: &SubscriptionPlan, + req: &SubscriptionCancelRequest, ) -> Result<(), AppResponseError> { let url = format!( "{}/billing/api/v1/cancel-subscription", @@ -78,10 +76,7 @@ impl Client { let resp = self .http_client_with_auth(Method::POST, &url) .await? - .json(&json!({ - "workspace_id": workspace_id, - "plan": plan.as_ref(), - })) + .json(req) .send() .await?; AppResponse::<()>::from_response(resp).await?.into_error() From e9bdceec141a0875ea305d8bb6652caf18b2d7e4 Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Mon, 15 Jul 2024 00:28:45 +0800 Subject: [PATCH 3/4] chore: billing api recurring interval --- libs/client-api/src/http_billing.rs | 23 ++++++++++++++++++++++- libs/shared-entity/src/dto/billing_dto.rs | 7 +++++++ 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 45c8e765..8715ef3a 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -1,5 +1,7 @@ use crate::Client; -use client_api_entity::billing_dto::{SubscriptionCancelRequest, WorkspaceUsageAndLimit}; +use client_api_entity::billing_dto::{ + SetSubscriptionRecurringInterval, SubscriptionCancelRequest, WorkspaceUsageAndLimit, +}; use reqwest::Method; use shared_entity::{ dto::billing_dto::{RecurringInterval, SubscriptionPlan, WorkspaceSubscriptionStatus}, @@ -177,4 +179,23 @@ impl Client { .await? .into_data() } + + /// Set subscription recurring interval + pub async fn set_subscription_recurring_interval( + &self, + set_sub_recur: &SetSubscriptionRecurringInterval, + ) -> Result<(), AppResponseError> { + let url = format!( + "{}/billing/api/v1/subscription-recurring-interval", + self.base_billing_url(), + ); + let resp = self + .http_client_with_auth(Method::POST, &url) + .await? + .json(set_sub_recur) + .send() + .await?; + + AppResponse::<()>::from_response(resp).await?.into_data() + } } diff --git a/libs/shared-entity/src/dto/billing_dto.rs b/libs/shared-entity/src/dto/billing_dto.rs index 8a51e16e..5eb65198 100644 --- a/libs/shared-entity/src/dto/billing_dto.rs +++ b/libs/shared-entity/src/dto/billing_dto.rs @@ -126,3 +126,10 @@ pub struct SubscriptionCancelRequest { pub plan: SubscriptionPlan, pub sync: bool, // if true, this request will block until stripe has sent the cancelation webhook } + +#[derive(Serialize, Deserialize, Debug)] +pub struct SetSubscriptionRecurringInterval { + pub workspace_id: String, + pub plan: SubscriptionPlan, + pub recurring_interval: RecurringInterval, +} From 2a145c2f8c6293bc2da12b8322386ee2731a7c2d Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Mon, 15 Jul 2024 11:37:56 +0800 Subject: [PATCH 4/4] fix: missing payload --- libs/client-api/src/http_billing.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libs/client-api/src/http_billing.rs b/libs/client-api/src/http_billing.rs index 8715ef3a..0b286ad7 100644 --- a/libs/client-api/src/http_billing.rs +++ b/libs/client-api/src/http_billing.rs @@ -196,6 +196,6 @@ impl Client { .send() .await?; - AppResponse::<()>::from_response(resp).await?.into_data() + AppResponse::<()>::from_response(resp).await?.into_error() } }