From 5144517330d705b9c1962b2c647d413fc1753e2b Mon Sep 17 00:00:00 2001 From: Zack Fu Zi Xiang Date: Tue, 7 May 2024 15:51:54 +0800 Subject: [PATCH] feat: added create subscription --- frontend/rust-lib/Cargo.lock | 2 +- frontend/rust-lib/Cargo.toml | 2 +- .../af_cloud/impls/user/cloud_service_impl.rs | 42 +++++++++++++++++++ .../rust-lib/flowy-user-pub/src/entities.rs | 4 -- .../flowy-user/src/entities/workspace.rs | 17 ++------ 5 files changed, 48 insertions(+), 19 deletions(-) diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index 14c2641968..1d025ee4dc 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -183,7 +183,7 @@ dependencies = [ [[package]] name = "appflowy-cloud-billing-client" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud-Billing-Client?rev=b95d520d5c570c85cb5e0fd2980220deea41df2b#b95d520d5c570c85cb5e0fd2980220deea41df2b" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Cloud-Billing-Client?rev=b141b6eefa0e46d80d5d0f59a8c9c51c0dfdbb78#b141b6eefa0e46d80d5d0f59a8c9c51c0dfdbb78" dependencies = [ "client-api", "reqwest", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index b9dc4daba1..6cecce76ad 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -129,4 +129,4 @@ rocksdb = { git = "https://github.com/LucasXu0/rust-rocksdb", rev = "21cf4a23ec1 # scripts/tool/update_client_api_rev.sh new_rev_id # ⚠️⚠️⚠️️ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "47e6f1e8" } -appflowy-cloud-billing-client = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud-Billing-Client", rev = "b95d520d5c570c85cb5e0fd2980220deea41df2b" } +appflowy-cloud-billing-client = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud-Billing-Client", rev = "b141b6eefa0e46d80d5d0f59a8c9c51c0dfdbb78" } diff --git a/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs b/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs index f602b404f8..73ac121cea 100644 --- a/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs +++ b/frontend/rust-lib/flowy-server/src/af_cloud/impls/user/cloud_service_impl.rs @@ -1,7 +1,9 @@ +use appflowy_cloud_billing_client::entities::{RecurringInterval, SubscriptionPlan}; use std::collections::HashMap; use std::sync::Arc; use anyhow::anyhow; +use appflowy_cloud_billing_client::WorkspaceSubscriptionClient; use client_api::entity::workspace_dto::{ CreateWorkspaceMember, CreateWorkspaceParam, PatchWorkspaceParam, WorkspaceMemberChangeset, WorkspaceMemberInvitation, @@ -474,6 +476,30 @@ where Ok(()) }) } + + fn subscribe_workspace( + &self, + workspace_id: String, + recurring_interval: flowy_user_pub::entities::RecurringInterval, + workspace_subscription_plan: flowy_user_pub::entities::SubscriptionPlan, + success_url: String, + ) -> FutureResult { + let try_get_client = self.server.try_get_client(); + let workspace_id = workspace_id.to_string(); + FutureResult::new(async move { + let client = try_get_client?; + let payment_link = client + .create_subscription( + &workspace_id, + to_recurring_interval(recurring_interval), + to_workspace_subscription_plan(workspace_subscription_plan), + &success_url, + ) + .await?; + Ok(payment_link) + // Ok(()) + }) + } } async fn get_admin_client(client: &Arc) -> FlowyResult { @@ -570,3 +596,19 @@ fn oauth_params_from_box_any(any: BoxAny) -> Result RecurringInterval { + match r { + flowy_user_pub::entities::RecurringInterval::Month => RecurringInterval::Month, + flowy_user_pub::entities::RecurringInterval::Year => RecurringInterval::Year, + } +} + +fn to_workspace_subscription_plan( + s: flowy_user_pub::entities::SubscriptionPlan, +) -> SubscriptionPlan { + match s { + flowy_user_pub::entities::SubscriptionPlan::Pro => SubscriptionPlan::Pro, + flowy_user_pub::entities::SubscriptionPlan::Team => SubscriptionPlan::Team, + } +} diff --git a/frontend/rust-lib/flowy-user-pub/src/entities.rs b/frontend/rust-lib/flowy-user-pub/src/entities.rs index 21e45a1ef4..caf0916b26 100644 --- a/frontend/rust-lib/flowy-user-pub/src/entities.rs +++ b/frontend/rust-lib/flowy-user-pub/src/entities.rs @@ -423,15 +423,11 @@ pub struct WorkspaceInvitation { } pub enum RecurringInterval { - UndefinedRecurringInterval, - Month, Year, } pub enum SubscriptionPlan { - UndefinedSubscriptionPlan, - Pro, Team, } diff --git a/frontend/rust-lib/flowy-user/src/entities/workspace.rs b/frontend/rust-lib/flowy-user/src/entities/workspace.rs index 8f50d5dee3..a8233d57a5 100644 --- a/frontend/rust-lib/flowy-user/src/entities/workspace.rs +++ b/frontend/rust-lib/flowy-user/src/entities/workspace.rs @@ -208,7 +208,6 @@ pub struct SubscribeWorkspacePB { #[pb(index = 2)] pub recurring_interval: RecurringIntervalPB, - #[pb(index = 3)] pub workspace_subscription_plan: SubscriptionPlanPB, @@ -219,10 +218,8 @@ pub struct SubscribeWorkspacePB { #[derive(ProtoBuf_Enum, Clone, Default, Debug)] pub enum RecurringIntervalPB { #[default] - UndefinedRecurringInterval = 0, - - Month = 1, - Year = 2, + Month = 0, + Year = 1, } impl From for RecurringInterval { @@ -230,9 +227,6 @@ impl From for RecurringInterval { match value { RecurringIntervalPB::Month => RecurringInterval::Month, RecurringIntervalPB::Year => RecurringInterval::Year, - RecurringIntervalPB::UndefinedRecurringInterval => { - RecurringInterval::UndefinedRecurringInterval - }, } } } @@ -240,10 +234,8 @@ impl From for RecurringInterval { #[derive(ProtoBuf_Enum, Clone, Default, Debug)] pub enum SubscriptionPlanPB { #[default] - UndefinedSubscriptionPlan = 0, - - Pro = 1, - Team = 2, + Pro = 0, + Team = 1, } impl From for SubscriptionPlan { @@ -251,7 +243,6 @@ impl From for SubscriptionPlan { match value { SubscriptionPlanPB::Pro => SubscriptionPlan::Pro, SubscriptionPlanPB::Team => SubscriptionPlan::Team, - SubscriptionPlanPB::UndefinedSubscriptionPlan => SubscriptionPlan::UndefinedSubscriptionPlan, } } }