Skip to content

Commit 3583167

Browse files
committed
controllers/token: Reduce spawn_blocking() usage
1 parent 818fe0a commit 3583167

File tree

1 file changed

+44
-60
lines changed

1 file changed

+44
-60
lines changed

src/controllers/token.rs

Lines changed: 44 additions & 60 deletions
Original file line numberDiff line numberDiff line change
@@ -41,29 +41,25 @@ pub async fn list(
4141
Query(params): Query<GetParams>,
4242
req: Parts,
4343
) -> AppResult<Json<Value>> {
44+
use diesel_async::RunQueryDsl;
45+
4446
let mut conn = app.db_read_prefer_primary().await?;
4547
let auth = AuthCheck::only_cookie().check(&req, &mut conn).await?;
46-
spawn_blocking(move || {
47-
use diesel::RunQueryDsl;
48-
49-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
50-
51-
let user = auth.user();
48+
let user = auth.user();
49+
50+
let tokens: Vec<ApiToken> = ApiToken::belonging_to(user)
51+
.select(ApiToken::as_select())
52+
.filter(api_tokens::revoked.eq(false))
53+
.filter(
54+
api_tokens::expired_at.is_null().or(api_tokens::expired_at
55+
.assume_not_null()
56+
.gt(now - params.expired_days_interval())),
57+
)
58+
.order(api_tokens::id.desc())
59+
.load(&mut conn)
60+
.await?;
5261

53-
let tokens: Vec<ApiToken> = ApiToken::belonging_to(user)
54-
.select(ApiToken::as_select())
55-
.filter(api_tokens::revoked.eq(false))
56-
.filter(
57-
api_tokens::expired_at.is_null().or(api_tokens::expired_at
58-
.assume_not_null()
59-
.gt(now - params.expired_days_interval())),
60-
)
61-
.order(api_tokens::id.desc())
62-
.load(conn)?;
63-
64-
Ok(Json(json!({ "api_tokens": tokens })))
65-
})
66-
.await
62+
Ok(Json(json!({ "api_tokens": tokens })))
6763
}
6864

6965
/// The incoming serialization format for the `ApiToken` model.
@@ -175,63 +171,51 @@ pub async fn new(
175171

176172
/// Handles the `GET /me/tokens/:id` route.
177173
pub async fn show(app: AppState, Path(id): Path<i32>, req: Parts) -> AppResult<Json<Value>> {
174+
use diesel_async::RunQueryDsl;
175+
178176
let mut conn = app.db_write().await?;
179177
let auth = AuthCheck::default().check(&req, &mut conn).await?;
180-
spawn_blocking(move || {
181-
use diesel::RunQueryDsl;
182-
183-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
184-
185-
let user = auth.user();
186-
let token = ApiToken::belonging_to(user)
187-
.find(id)
188-
.select(ApiToken::as_select())
189-
.first(conn)?;
190-
191-
Ok(Json(json!({ "api_token": token })))
192-
})
193-
.await
178+
let user = auth.user();
179+
let token = ApiToken::belonging_to(user)
180+
.find(id)
181+
.select(ApiToken::as_select())
182+
.first(&mut conn)
183+
.await?;
184+
185+
Ok(Json(json!({ "api_token": token })))
194186
}
195187

196188
/// Handles the `DELETE /me/tokens/:id` route.
197189
pub async fn revoke(app: AppState, Path(id): Path<i32>, req: Parts) -> AppResult<Json<Value>> {
190+
use diesel_async::RunQueryDsl;
191+
198192
let mut conn = app.db_write().await?;
199193
let auth = AuthCheck::default().check(&req, &mut conn).await?;
200-
spawn_blocking(move || {
201-
use diesel::RunQueryDsl;
194+
let user = auth.user();
195+
diesel::update(ApiToken::belonging_to(user).find(id))
196+
.set(api_tokens::revoked.eq(true))
197+
.execute(&mut conn)
198+
.await?;
202199

203-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
204-
205-
let user = auth.user();
206-
diesel::update(ApiToken::belonging_to(user).find(id))
207-
.set(api_tokens::revoked.eq(true))
208-
.execute(conn)?;
209-
210-
Ok(Json(json!({})))
211-
})
212-
.await
200+
Ok(Json(json!({})))
213201
}
214202

215203
/// Handles the `DELETE /tokens/current` route.
216204
pub async fn revoke_current(app: AppState, req: Parts) -> AppResult<Response> {
205+
use diesel_async::RunQueryDsl;
206+
217207
let mut conn = app.db_write().await?;
218208
let auth = AuthCheck::default().check(&req, &mut conn).await?;
219-
spawn_blocking(move || {
220-
use diesel::RunQueryDsl;
209+
let api_token_id = auth
210+
.api_token_id()
211+
.ok_or_else(|| bad_request("token not provided"))?;
221212

222-
let conn: &mut AsyncConnectionWrapper<_> = &mut conn.into();
213+
diesel::update(api_tokens::table.filter(api_tokens::id.eq(api_token_id)))
214+
.set(api_tokens::revoked.eq(true))
215+
.execute(&mut conn)
216+
.await?;
223217

224-
let api_token_id = auth
225-
.api_token_id()
226-
.ok_or_else(|| bad_request("token not provided"))?;
227-
228-
diesel::update(api_tokens::table.filter(api_tokens::id.eq(api_token_id)))
229-
.set(api_tokens::revoked.eq(true))
230-
.execute(conn)?;
231-
232-
Ok(StatusCode::NO_CONTENT.into_response())
233-
})
234-
.await
218+
Ok(StatusCode::NO_CONTENT.into_response())
235219
}
236220

237221
struct NewTokenEmail<'a> {

0 commit comments

Comments
 (0)