diff --git a/server/crates/arbiter-server/src/actors/evm/mod.rs b/server/crates/arbiter-server/src/actors/evm/mod.rs index 033d11f..481c9fa 100644 --- a/server/crates/arbiter-server/src/actors/evm/mod.rs +++ b/server/crates/arbiter-server/src/actors/evm/mod.rs @@ -160,29 +160,23 @@ impl EvmActor { } #[message] - #[expect(clippy::unused_async, reason = "reserved for impl")] - pub async fn operator_delete_grant(&mut self, _grant_id: i32) -> Result<(), Error> { - // let mut conn = self.db.get().await.map_err(DatabaseError::from)?; - // let vault = self.vault.clone(); + pub async fn operator_delete_grant(&mut self, grant_id: i32) -> Result<(), Error> { + let mut conn = self.db.get().await.map_err(DatabaseError::from)?; - // diesel_async::AsyncConnection::transaction(&mut conn, |conn| { - // Box::pin(async move { - // diesel::update(schema::evm_basic_grant::table) - // .filter(schema::evm_basic_grant::id.eq(grant_id)) - // .set(schema::evm_basic_grant::revoked_at.eq(SqliteTimestamp::now())) - // .execute(conn) - // .await?; + let affected = diesel::update(schema::evm_basic_grant::table) + .filter(schema::evm_basic_grant::id.eq(grant_id)) + .set(schema::evm_basic_grant::revoked_at.eq(models::SqliteTimestamp::now())) + .execute(&mut conn) + .await + .map_err(DatabaseError::from)?; - // let signed = integrity::evm::load_signed_grant_by_basic_id(conn, grant_id).await?; + if affected == 0 { + return Err(Error::Database(DatabaseError::from( + diesel::result::Error::NotFound, + ))); + } - // diesel::result::QueryResult::Ok(()) - // }) - // }) - // .await - // .map_err(DatabaseError::from)?; - - // Ok(()) - todo!() + Ok(()) } #[message] diff --git a/server/crates/arbiter-server/src/peers/operator/session/handlers.rs b/server/crates/arbiter-server/src/peers/operator/session/handlers.rs index 08a000d..f2b9b3e 100644 --- a/server/crates/arbiter-server/src/peers/operator/session/handlers.rs +++ b/server/crates/arbiter-server/src/peers/operator/session/handlers.rs @@ -2,8 +2,8 @@ use super::{Error, OperatorSession}; use crate::{ actors::{ evm::{ - ClientSignTransaction, Generate, ListWallets, OperatorCreateGrant, OperatorListGrants, - SignTransactionError as EvmSignError, + ClientSignTransaction, Generate, ListWallets, OperatorCreateGrant, OperatorDeleteGrant, + OperatorListGrants, SignTransactionError as EvmSignError, }, flow_coordinator::client_connect_approval::ClientApprovalAnswer, vault::VaultState, @@ -122,22 +122,23 @@ impl OperatorSession { } #[message] - pub(crate) fn handle_grant_delete(&mut self, grant_id: i32) -> Result<(), GrantMutationError> { - // match self - // .props - // .actors - // .evm - // .ask(OperatorDeleteGrant { grant_id }) - // .await - // { - // Ok(()) => Ok(()), - // Err(err) => { - // error!(?err, "EVM grant delete failed"); - // Err(GrantMutationError::Internal) - // } - // } - let _ = grant_id; - todo!() + pub(crate) async fn handle_grant_delete( + &mut self, + grant_id: i32, + ) -> Result<(), GrantMutationError> { + match self + .props + .actors + .evm + .ask(OperatorDeleteGrant { grant_id }) + .await + { + Ok(()) => Ok(()), + Err(err) => { + error!(?err, "EVM grant delete failed"); + Err(GrantMutationError::Internal) + } + } } #[message] @@ -217,8 +218,8 @@ impl OperatorSession { pub(crate) async fn handle_list_wallet_access( &mut self, ) -> Result, Error> { - let mut conn = self.props.db.get().await?; use crate::db::schema::evm_wallet_access; + let mut conn = self.props.db.get().await?; let access_entries = evm_wallet_access::table .select(EvmWalletAccess::as_select()) .load::<_>(&mut conn) diff --git a/server/crates/arbiter-server/src/peers/operator/session/mod.rs b/server/crates/arbiter-server/src/peers/operator/session/mod.rs index 79281bb..0fe2c84 100644 --- a/server/crates/arbiter-server/src/peers/operator/session/mod.rs +++ b/server/crates/arbiter-server/src/peers/operator/session/mod.rs @@ -63,7 +63,7 @@ impl OperatorSession { Self { props, sender, - pending_client_approvals: Default::default(), + pending_client_approvals: HashMap::default(), } } }