Skip to content

Commit 4a747ef

Browse files
committed
controllers/user/me: Remove spawn_blocking() call
1 parent 792e599 commit 4a747ef

File tree

1 file changed

+33
-37
lines changed
  • src/controllers/user

1 file changed

+33
-37
lines changed

src/controllers/user/me.rs

Lines changed: 33 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,6 @@ use axum::response::Response;
55
use axum::Json;
66
use axum_extra::json;
77
use axum_extra::response::ErasedJson;
8-
use diesel_async::async_connection_wrapper::AsyncConnectionWrapper;
98
use http::request::Parts;
109
use std::collections::HashMap;
1110

@@ -15,7 +14,6 @@ use crate::controllers::helpers::{ok_true, Paginate};
1514
use crate::models::krate::CrateName;
1615
use crate::models::{CrateOwner, Follow, OwnerKind, User, Version, VersionOwnerAction};
1716
use crate::schema::{crate_owners, crates, emails, follows, users, versions};
18-
use crate::tasks::spawn_blocking;
1917
use crate::util::errors::{bad_request, AppResult};
2018
use crate::util::BytesRequest;
2119
use crate::views::{EncodableMe, EncodablePrivateUser, EncodableVersion, OwnedCrate};
@@ -69,41 +67,39 @@ pub async fn me(app: AppState, req: Parts) -> AppResult<Json<EncodableMe>> {
6967
pub async fn updates(app: AppState, req: Parts) -> AppResult<ErasedJson> {
7068
let mut conn = app.db_read_prefer_primary().await?;
7169
let auth = AuthCheck::only_cookie().check(&req, &mut conn).await?;
72-
spawn_blocking(move || {
73-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
74-
75-
let user = auth.user();
76-
77-
let followed_crates = Follow::belonging_to(user).select(follows::crate_id);
78-
let query = versions::table
79-
.inner_join(crates::table)
80-
.left_outer_join(users::table)
81-
.filter(crates::id.eq_any(followed_crates))
82-
.order(versions::created_at.desc())
83-
.select(<(Version, CrateName, Option<User>)>::as_select())
84-
.pages_pagination(PaginationOptions::builder().gather(&req)?);
85-
let data: Paginated<(Version, CrateName, Option<User>)> = query.load(conn)?;
86-
let more = data.next_page_params().is_some();
87-
let versions = data.iter().map(|(v, ..)| v).collect::<Vec<_>>();
88-
let actions = VersionOwnerAction::for_versions(conn, &versions)?;
89-
let data = data
90-
.into_iter()
91-
.zip(actions)
92-
.map(|((v, cn, pb), voas)| (v, cn, pb, voas));
93-
94-
let versions = data
95-
.into_iter()
96-
.map(|(version, crate_name, published_by, actions)| {
97-
EncodableVersion::from(version, &crate_name.name, published_by, actions)
98-
})
99-
.collect::<Vec<_>>();
100-
101-
Ok(json!({
102-
"versions": versions,
103-
"meta": { "more": more },
104-
}))
105-
})
106-
.await?
70+
71+
let user = auth.user();
72+
73+
let followed_crates = Follow::belonging_to(user).select(follows::crate_id);
74+
let query = versions::table
75+
.inner_join(crates::table)
76+
.left_outer_join(users::table)
77+
.filter(crates::id.eq_any(followed_crates))
78+
.order(versions::created_at.desc())
79+
.select(<(Version, CrateName, Option<User>)>::as_select())
80+
.pages_pagination(PaginationOptions::builder().gather(&req)?);
81+
82+
let data: Paginated<(Version, CrateName, Option<User>)> = query.async_load(&mut conn).await?;
83+
84+
let more = data.next_page_params().is_some();
85+
let versions = data.iter().map(|(v, ..)| v).collect::<Vec<_>>();
86+
let actions = VersionOwnerAction::async_for_versions(&mut conn, &versions).await?;
87+
let data = data
88+
.into_iter()
89+
.zip(actions)
90+
.map(|((v, cn, pb), voas)| (v, cn, pb, voas));
91+
92+
let versions = data
93+
.into_iter()
94+
.map(|(version, crate_name, published_by, actions)| {
95+
EncodableVersion::from(version, &crate_name.name, published_by, actions)
96+
})
97+
.collect::<Vec<_>>();
98+
99+
Ok(json!({
100+
"versions": versions,
101+
"meta": { "more": more },
102+
}))
107103
}
108104

109105
/// Handles the `PUT /confirm/:email_token` route

0 commit comments

Comments
 (0)