From a0b09ccc69399637fe3ae6b80fa658aba7040b45 Mon Sep 17 00:00:00 2001 From: ABCxFF <79597906+ABCxFF@users.noreply.github.com> Date: Wed, 18 Dec 2024 23:03:34 +0000 Subject: [PATCH] chore(users/pending-delete-toggle): migrate proto ops & refs --- Cargo.lock | 2 +- packages/api/identity/Cargo.toml | 1 - packages/api/identity/src/route/identities.rs | 8 ++-- packages/services/user/Cargo.toml | 1 + packages/services/user/src/ops/mod.rs | 1 + .../user/src/ops/pending_delete_toggle.rs | 47 +++++++++++++++++++ 6 files changed, 54 insertions(+), 6 deletions(-) create mode 100644 packages/services/user/src/ops/pending_delete_toggle.rs diff --git a/Cargo.lock b/Cargo.lock index 579af4de90..bafc32901a 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -669,7 +669,6 @@ dependencies = [ "user-avatar-upload-complete", "user-get", "user-identity-get", - "user-pending-delete-toggle", "uuid", ] @@ -11880,6 +11879,7 @@ dependencies = [ "sqlx", "token-create", "user-get", + "user-identity-get", ] [[package]] diff --git a/packages/api/identity/Cargo.toml b/packages/api/identity/Cargo.toml index 2eb831b95a..bc35235217 100644 --- a/packages/api/identity/Cargo.toml +++ b/packages/api/identity/Cargo.toml @@ -55,7 +55,6 @@ user.workspace = true user-avatar-upload-complete.workspace = true user-get.workspace = true user-identity-get.workspace = true -user-pending-delete-toggle.workspace = true rivet-config.workspace = true rivet-env.workspace = true diff --git a/packages/api/identity/src/route/identities.rs b/packages/api/identity/src/route/identities.rs index 4ce3e24faf..886b9af809 100644 --- a/packages/api/identity/src/route/identities.rs +++ b/packages/api/identity/src/route/identities.rs @@ -306,8 +306,8 @@ pub async fn mark_deletion( ) -> GlobalResult { let user_ent = ctx.auth().user(ctx.op_ctx()).await?; - op!([ctx] user_pending_delete_toggle { - user_id: Some(user_ent.user_id.into()), + (*ctx).op(::user::ops::pending_delete_toggle::Input { + user_id: user_ent.user_id, active: true, }) .await?; @@ -319,8 +319,8 @@ pub async fn mark_deletion( pub async fn unmark_deletion(ctx: Ctx) -> GlobalResult { let user_ent = ctx.auth().user(ctx.op_ctx()).await?; - op!([ctx] user_pending_delete_toggle { - user_id: Some(user_ent.user_id.into()), + (*ctx).op(::user::ops::pending_delete_toggle::Input { + user_id: user_ent.user_id, active: false, }) .await?; diff --git a/packages/services/user/Cargo.toml b/packages/services/user/Cargo.toml index ee8c28bc8b..656d03194b 100644 --- a/packages/services/user/Cargo.toml +++ b/packages/services/user/Cargo.toml @@ -16,6 +16,7 @@ rivet-config.workspace = true rivet-operation.workspace = true token-create.workspace = true user-get.workspace = true +user-identity-get.workspace = true [dependencies.sqlx] workspace = true diff --git a/packages/services/user/src/ops/mod.rs b/packages/services/user/src/ops/mod.rs index 99f2a9af61..ce39cfd97d 100644 --- a/packages/services/user/src/ops/mod.rs +++ b/packages/services/user/src/ops/mod.rs @@ -1,3 +1,4 @@ +pub mod pending_delete_toggle; pub mod profile_validate; pub mod resolve_display_name; pub mod resolve_email; diff --git a/packages/services/user/src/ops/pending_delete_toggle.rs b/packages/services/user/src/ops/pending_delete_toggle.rs new file mode 100644 index 0000000000..190cf1a6ad --- /dev/null +++ b/packages/services/user/src/ops/pending_delete_toggle.rs @@ -0,0 +1,47 @@ +use chirp_workflow::prelude::*; +use proto::backend::{self, pkg::*}; +use rivet_operation::prelude::proto; + +#[derive(Debug)] +pub struct Input { + pub user_id: Uuid, + pub active: bool +} + +#[derive(Debug)] +pub struct Output { +} + + +#[operation] +pub async fn pending_delete_toggle( + ctx: &OperationCtx, + input: &Input +) -> GlobalResult { + let user_id = input.user_id; + + // Verify the user is registered + let identity = op!([ctx] user_identity_get { + user_ids: vec![user_id.into()], + }) + .await?; + let identities = &unwrap_ref!(identity.users.first()).identities; + ensure_with!(!identities.is_empty(), IDENTITY_NOT_REGISTERED); + + sql_execute!( + [ctx] + "UPDATE db_user.users SET delete_request_ts = $2 WHERE user_id = $1", + user_id, + input.active.then(util::timestamp::now), + ) + .await?; + + ctx.cache().purge("user", [user_id]).await?; + + msg!([ctx] user::msg::update(user_id) { + user_id: Some(user_id.into()), + }) + .await?; + + Ok(Output {}) +} \ No newline at end of file