From b867d0193eb9a5f974540503747e280157e2eb3f Mon Sep 17 00:00:00 2001 From: Ragnor Comerford Date: Fri, 29 May 2026 12:33:14 +0200 Subject: [PATCH] refactor(server): run_query / run_mutate take &ResolvedActor Replace `Option>` in the helpers with `Option<&ResolvedActor>`. Saves MR-969's stored-query handler from wrapping a bare actor in axum's `Extension(...)` before calling. Handler signatures (`server_query`, `server_read`, `server_mutate`, `server_change`) keep `Option>` because that is what axum injects, and unwrap at the call site with `actor.as_ref().map(|Extension(actor)| actor)`. Net: -13/+10 LOC, 89/0 server tests pass. --- crates/omnigraph-server/src/lib.rs | 23 ++++++++++------------- 1 file changed, 10 insertions(+), 13 deletions(-) diff --git a/crates/omnigraph-server/src/lib.rs b/crates/omnigraph-server/src/lib.rs index 4461a14..ad41f9d 100644 --- a/crates/omnigraph-server/src/lib.rs +++ b/crates/omnigraph-server/src/lib.rs @@ -1654,7 +1654,7 @@ async fn server_read( ) -> std::result::Result<([(HeaderName, HeaderValue); 2], Json), ApiError> { let (selected_name, target, result) = run_query( handle, - actor, + actor.as_ref().map(|Extension(actor)| actor), &request.query_source, request.query_name.as_deref(), request.params.as_ref(), @@ -1699,7 +1699,7 @@ async fn server_query( ) -> std::result::Result, ApiError> { let (selected_name, target, result) = run_query( handle, - actor, + actor.as_ref().map(|Extension(actor)| actor), &request.query, request.name.as_deref(), request.params.as_ref(), @@ -1785,21 +1785,18 @@ async fn server_export( async fn run_mutate( state: AppState, handle: Arc, - actor: Option>, + actor: Option<&ResolvedActor>, query: &str, name: Option<&str>, params_json: Option<&Value>, branch: String, ) -> std::result::Result { let actor_arc = actor - .as_ref() - .map(|Extension(actor)| Arc::clone(&actor.actor_id)) + .map(|a| Arc::clone(&a.actor_id)) .unwrap_or_else(|| Arc::::from("anonymous")); - let actor_id = actor - .as_ref() - .map(|Extension(actor)| actor.actor_id.as_ref()); + let actor_id = actor.map(|a| a.actor_id.as_ref()); authorize_request( - actor.as_ref().map(|Extension(actor)| actor), + actor, handle.policy.as_deref(), PolicyRequest { action: PolicyAction::Change, @@ -1853,7 +1850,7 @@ async fn run_mutate( /// MR-969 extends per-actor admission to stored-read invocations. async fn run_query( handle: Arc, - actor: Option>, + actor: Option<&ResolvedActor>, query: &str, name: Option<&str>, params_json: Option<&Value>, @@ -1880,7 +1877,7 @@ async fn run_query( ReadTarget::Snapshot(_) => None, }; authorize_request( - actor.as_ref().map(|Extension(actor)| actor), + actor, handle.policy.as_deref(), PolicyRequest { action: PolicyAction::Read, @@ -1945,7 +1942,7 @@ async fn server_change( let output = run_mutate( state, handle, - actor, + actor.as_ref().map(|Extension(actor)| actor), &request.query, request.name.as_deref(), request.params.as_ref(), @@ -1994,7 +1991,7 @@ async fn server_mutate( run_mutate( state, handle, - actor, + actor.as_ref().map(|Extension(actor)| actor), &request.query, request.name.as_deref(), request.params.as_ref(),