From dc7095d0be66a937d52241b14708ed979e3ca284 Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Sat, 9 Nov 2024 01:23:22 +0800 Subject: [PATCH] controllers/krate/owners: Remove `spawn_blocking()` from `GET /crates/:crate_id/owner_team` endpoint --- src/controllers/krate/owners.rs | 29 +++++++++++++---------------- src/models/team.rs | 8 +++++--- 2 files changed, 18 insertions(+), 19 deletions(-) diff --git a/src/controllers/krate/owners.rs b/src/controllers/krate/owners.rs index 5fcbfb105d0..132de3086e3 100644 --- a/src/controllers/krate/owners.rs +++ b/src/controllers/krate/owners.rs @@ -41,25 +41,22 @@ pub async fn owners(state: AppState, Path(crate_name): Path) -> AppResul /// Handles the `GET /crates/:crate_id/owner_team` route. pub async fn owner_team(state: AppState, Path(crate_name): Path) -> AppResult> { - let conn = state.db_read().await?; - spawn_blocking(move || { - use diesel::RunQueryDsl; - - let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into(); + use diesel_async::RunQueryDsl; - let krate: Crate = Crate::by_name(&crate_name) - .first(conn) - .optional()? - .ok_or_else(|| crate_not_found(&crate_name))?; + let mut conn = state.db_read().await?; + let krate: Crate = Crate::by_name(&crate_name) + .first(&mut conn) + .await + .optional()? + .ok_or_else(|| crate_not_found(&crate_name))?; - let owners = Team::owning(&krate, conn)? - .into_iter() - .map(Owner::into) - .collect::>(); + let owners = Team::owning(&krate, &mut conn) + .await? + .into_iter() + .map(Owner::into) + .collect::>(); - Ok(Json(json!({ "teams": owners }))) - }) - .await + Ok(Json(json!({ "teams": owners }))) } /// Handles the `GET /crates/:crate_id/owner_user` route. diff --git a/src/models/team.rs b/src/models/team.rs index 87e0afbbf25..1f00bac3519 100644 --- a/src/models/team.rs +++ b/src/models/team.rs @@ -1,3 +1,4 @@ +use diesel_async::AsyncPgConnection; use http::StatusCode; use crate::app::App; @@ -199,15 +200,16 @@ impl Team { } } - pub fn owning(krate: &Crate, conn: &mut impl Conn) -> QueryResult> { - use diesel::RunQueryDsl; + pub async fn owning(krate: &Crate, conn: &mut AsyncPgConnection) -> QueryResult> { + use diesel_async::RunQueryDsl; let base_query = CrateOwner::belonging_to(krate).filter(crate_owners::deleted.eq(false)); let teams = base_query .inner_join(teams::table) .select(Team::as_select()) .filter(crate_owners::owner_kind.eq(OwnerKind::Team)) - .load(conn)? + .load(conn) + .await? .into_iter() .map(Owner::Team);