Skip to content

Commit 49ad0ee

Browse files
authored
controllers/krate/owners: Remove spawn_blocking() from GET /crates/:crate_id/owner_team endpoint (#9905)
1 parent d12864e commit 49ad0ee

File tree

2 files changed

+18
-19
lines changed

2 files changed

+18
-19
lines changed

src/controllers/krate/owners.rs

Lines changed: 13 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -41,25 +41,22 @@ pub async fn owners(state: AppState, Path(crate_name): Path<String>) -> AppResul
4141

4242
/// Handles the `GET /crates/:crate_id/owner_team` route.
4343
pub async fn owner_team(state: AppState, Path(crate_name): Path<String>) -> AppResult<Json<Value>> {
44-
let conn = state.db_read().await?;
45-
spawn_blocking(move || {
46-
use diesel::RunQueryDsl;
47-
48-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
44+
use diesel_async::RunQueryDsl;
4945

50-
let krate: Crate = Crate::by_name(&crate_name)
51-
.first(conn)
52-
.optional()?
53-
.ok_or_else(|| crate_not_found(&crate_name))?;
46+
let mut conn = state.db_read().await?;
47+
let krate: Crate = Crate::by_name(&crate_name)
48+
.first(&mut conn)
49+
.await
50+
.optional()?
51+
.ok_or_else(|| crate_not_found(&crate_name))?;
5452

55-
let owners = Team::owning(&krate, conn)?
56-
.into_iter()
57-
.map(Owner::into)
58-
.collect::<Vec<EncodableOwner>>();
53+
let owners = Team::owning(&krate, &mut conn)
54+
.await?
55+
.into_iter()
56+
.map(Owner::into)
57+
.collect::<Vec<EncodableOwner>>();
5958

60-
Ok(Json(json!({ "teams": owners })))
61-
})
62-
.await
59+
Ok(Json(json!({ "teams": owners })))
6360
}
6461

6562
/// Handles the `GET /crates/:crate_id/owner_user` route.

src/models/team.rs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
use diesel_async::AsyncPgConnection;
12
use http::StatusCode;
23

34
use crate::app::App;
@@ -199,15 +200,16 @@ impl Team {
199200
}
200201
}
201202

202-
pub fn owning(krate: &Crate, conn: &mut impl Conn) -> QueryResult<Vec<Owner>> {
203-
use diesel::RunQueryDsl;
203+
pub async fn owning(krate: &Crate, conn: &mut AsyncPgConnection) -> QueryResult<Vec<Owner>> {
204+
use diesel_async::RunQueryDsl;
204205

205206
let base_query = CrateOwner::belonging_to(krate).filter(crate_owners::deleted.eq(false));
206207
let teams = base_query
207208
.inner_join(teams::table)
208209
.select(Team::as_select())
209210
.filter(crate_owners::owner_kind.eq(OwnerKind::Team))
210-
.load(conn)?
211+
.load(conn)
212+
.await?
211213
.into_iter()
212214
.map(Owner::Team);
213215

0 commit comments

Comments
 (0)