diff --git a/crates/axum-utils/src/user_authorization.rs b/crates/axum-utils/src/user_authorization.rs
index 4a74c0f1..8de0c9e5 100644
--- a/crates/axum-utils/src/user_authorization.rs
+++ b/crates/axum-utils/src/user_authorization.rs
@@ -29,7 +29,7 @@ use http::{header::WWW_AUTHENTICATE, HeaderMap, HeaderValue, Request, StatusCode
use mas_data_model::Session;
use mas_storage::{
oauth2::access_token::{lookup_active_access_token, AccessTokenLookupError},
- PostgresqlBackend,
+ LookupError, PostgresqlBackend,
};
use serde::{de::DeserializeOwned, Deserialize};
use sqlx::PgConnection;
diff --git a/crates/cli/src/commands/manage.rs b/crates/cli/src/commands/manage.rs
index 015bd977..aeffa5f6 100644
--- a/crates/cli/src/commands/manage.rs
+++ b/crates/cli/src/commands/manage.rs
@@ -20,7 +20,7 @@ use mas_storage::{
user::{
lookup_user_by_username, lookup_user_email, mark_user_email_as_verified, register_user,
},
- Clock,
+ Clock, LookupError,
};
use rand::SeedableRng;
use tracing::{info, warn};
diff --git a/crates/graphql/src/lib.rs b/crates/graphql/src/lib.rs
index fa73924a..7b34f4a1 100644
--- a/crates/graphql/src/lib.rs
+++ b/crates/graphql/src/lib.rs
@@ -24,10 +24,10 @@
use async_graphql::{Context, Description, EmptyMutation, EmptySubscription, ID};
use mas_axum_utils::SessionInfo;
-use model::NodeType;
+use mas_storage::LookupResultExt;
use sqlx::PgPool;
-use self::model::{BrowserSession, Node, User};
+use self::model::{BrowserSession, Node, NodeType, OAuth2Client, User, UserEmail};
mod model;
@@ -80,33 +80,122 @@ impl RootQuery {
Ok(session.map(User::from))
}
- /// Fetches an object given its ID.
- async fn node(&self, ctx: &Context<'_>, id: ID) -> Result