From 7ca3d4df5cfb05b750a014c87d3f11ad32406316 Mon Sep 17 00:00:00 2001 From: Toby Vincent Date: Wed, 17 Apr 2024 13:01:21 -0500 Subject: refactor: extract PgPool from AppState via AsRef --- src/api/account.rs | 6 +++--- src/api/users.rs | 17 ++++++++--------- 2 files changed, 11 insertions(+), 12 deletions(-) (limited to 'src/api') diff --git a/src/api/account.rs b/src/api/account.rs index 0087df7..598d172 100644 --- a/src/api/account.rs +++ b/src/api/account.rs @@ -11,6 +11,7 @@ use axum_extra::{ headers::{authorization::Basic, Authorization}, TypedHeader, }; +use sqlx::PgPool; use crate::{ auth::{AccessClaims, Account, RefreshClaims}, @@ -26,12 +27,12 @@ pub fn router() -> Router { } pub async fn login( - State(state): State, + State(pool): State, auth: Either, ) -> Result<(AccessClaims, RefreshClaims), crate::auth::error::Error> { match auth { Either::E1(token) => Ok((token.refresh(), token)), - Either::E2(Login(account)) => crate::auth::issue(State(state.clone()), account).await, + Either::E2(Login(account)) => crate::auth::issue(State(pool), account).await, } } @@ -80,7 +81,6 @@ mod tests { use axum_extra::headers::{authorization::Credentials, Authorization}; use http_body_util::BodyExt; - use sqlx::PgPool; use tower::ServiceExt; use uuid::Uuid; diff --git a/src/api/users.rs b/src/api/users.rs index 6ac0bb8..e73e229 100644 --- a/src/api/users.rs +++ b/src/api/users.rs @@ -7,7 +7,7 @@ use axum::{ }; use axum_extra::routing::Resource; use serde::{Deserialize, Serialize}; -use sqlx::FromRow; +use sqlx::PgPool; use time::OffsetDateTime; use uuid::Uuid; @@ -22,7 +22,7 @@ pub fn router() -> Resource { Resource::named("users").create(create).show(show) } -#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize, FromRow)] +#[derive(Debug, Clone, PartialEq, Eq, Serialize, Deserialize)] #[serde(rename_all = "camelCase")] pub struct User { pub id: Uuid, @@ -40,7 +40,7 @@ pub struct Registration { } pub async fn create( - State(state): State, + State(pool): State, Json(Registration { name, email, @@ -53,7 +53,7 @@ pub async fn create( "SELECT EXISTS(SELECT 1 FROM user_ WHERE email = $1 LIMIT 1)", email.to_ascii_lowercase() ) - .fetch_one(&state.pool) + .fetch_one(&pool) .await?; if exists.is_some_and(|b| b) { @@ -62,7 +62,7 @@ pub async fn create( // TODO: Move this into a micro service, possibly behind a feature flag. let (status, (access, refresh)) = - crate::auth::credentials::create(State(state.clone()), Json(Credential { password })) + crate::auth::credentials::create(State(pool.clone()), Json(Credential { password })) .await?; let user = sqlx::query_as!( @@ -72,7 +72,7 @@ pub async fn create( name, email.to_ascii_lowercase(), ) - .fetch_one(&state.pool) + .fetch_one(&pool) .await?; Ok((status, access, refresh, Json(user))) @@ -80,7 +80,7 @@ pub async fn create( pub async fn show( Path(uuid): Path, - State(state): State, + State(pool): State, AccessClaims { sub, .. }: AccessClaims, ) -> Result { if uuid != sub { @@ -88,7 +88,7 @@ pub async fn show( } sqlx::query_as!(User, "SELECT * FROM user_ WHERE id = $1 LIMIT 1", sub) - .fetch_optional(&state.pool) + .fetch_optional(&pool) .await? .ok_or_else(|| Error::UserNotFound) .map(Json) @@ -108,7 +108,6 @@ mod tests { }; use http_body_util::BodyExt; - use sqlx::PgPool; use tower::ServiceExt; use crate::{ -- cgit v1.2.3-70-g09d2