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 65639c2110..5b66485b1b 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 @@ -517,6 +517,15 @@ where Ok(workspace_subscriptions) }) } + + fn cancel_workspace_subscription(&self, workspace_id: String) -> FutureResult<(), FlowyError> { + let try_get_client = self.server.try_get_client(); + FutureResult::new(async move { + let client = try_get_client?; + client.cancel_subscription(&workspace_id).await?; + Ok(()) + }) + } } async fn get_admin_client(client: &Arc) -> FlowyResult { diff --git a/frontend/rust-lib/flowy-user-pub/src/cloud.rs b/frontend/rust-lib/flowy-user-pub/src/cloud.rs index adb4df47a9..cde3e32187 100644 --- a/frontend/rust-lib/flowy-user-pub/src/cloud.rs +++ b/frontend/rust-lib/flowy-user-pub/src/cloud.rs @@ -281,6 +281,10 @@ pub trait UserCloudService: Send + Sync + 'static { fn get_workspace_subscriptions(&self) -> FutureResult, FlowyError> { FutureResult::new(async { Err(FlowyError::not_support()) }) } + + fn cancel_workspace_subscription(&self, workspace_id: String) -> FutureResult<(), FlowyError> { + FutureResult::new(async { Err(FlowyError::not_support()) }) + } } pub type UserUpdateReceiver = tokio::sync::mpsc::Receiver; diff --git a/frontend/rust-lib/flowy-user/src/event_handler.rs b/frontend/rust-lib/flowy-user/src/event_handler.rs index 12190cd70c..78afee11fc 100644 --- a/frontend/rust-lib/flowy-user/src/event_handler.rs +++ b/frontend/rust-lib/flowy-user/src/event_handler.rs @@ -799,3 +799,14 @@ pub async fn get_workspace_subscriptions_handler( .collect::>(); data_result_ok(RepeatedWorkspaceSubscriptionPB { items: subs }) } + +#[tracing::instrument(level = "debug", skip_all, err)] +pub async fn cancel_workspace_subscription_handler( + param: AFPluginData, + manager: AFPluginState>, +) -> Result<(), FlowyError> { + let workspace_id = param.into_inner().workspace_id; + let manager = upgrade_manager(manager)?; + manager.cancel_workspace_subscription(workspace_id).await?; + Ok(()) +} diff --git a/frontend/rust-lib/flowy-user/src/event_map.rs b/frontend/rust-lib/flowy-user/src/event_map.rs index 4ff6b1e648..f1e62e2894 100644 --- a/frontend/rust-lib/flowy-user/src/event_map.rs +++ b/frontend/rust-lib/flowy-user/src/event_map.rs @@ -74,6 +74,7 @@ pub fn init(user_manager: Weak) -> AFPlugin { // Billing .event(UserEvent::SubscribeWorkspace, subscribe_workspace_handler) .event(UserEvent::GetWorkspaceSubscriptions, get_workspace_subscriptions_handler) + .event(UserEvent::CancelWorkspaceSubscription, cancel_workspace_subscription_handler) } #[derive(Clone, Copy, PartialEq, Eq, Debug, Display, Hash, ProtoBuf_Enum, Flowy_Event)] @@ -239,6 +240,9 @@ pub enum UserEvent { #[event(output = "RepeatedWorkspaceSubscriptionPB")] GetWorkspaceSubscriptions = 52, + + #[event(output = "UserWorkspaceIdPB")] + CancelWorkspaceSubscription = 53, } pub trait UserStatusCallback: Send + Sync + 'static { diff --git a/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs b/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs index ecf0e5e825..cd34c7f671 100644 --- a/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs +++ b/frontend/rust-lib/flowy-user/src/user_manager/manager_user_workspace.rs @@ -431,6 +431,16 @@ impl UserManager { .await?; Ok(res) } + + #[instrument(level = "info", skip(self), err)] + pub async fn cancel_workspace_subscription(&self, workspace_id: String) -> FlowyResult<()> { + self + .cloud_services + .get_user_service()? + .cancel_workspace_subscription(workspace_id) + .await?; + Ok(()) + } } pub fn save_user_workspaces(