@@ -5,7 +5,6 @@ use axum::response::Response;
5
5
use axum:: Json ;
6
6
use axum_extra:: json;
7
7
use axum_extra:: response:: ErasedJson ;
8
- use diesel_async:: async_connection_wrapper:: AsyncConnectionWrapper ;
9
8
use http:: request:: Parts ;
10
9
use std:: collections:: HashMap ;
11
10
@@ -15,7 +14,6 @@ use crate::controllers::helpers::{ok_true, Paginate};
15
14
use crate :: models:: krate:: CrateName ;
16
15
use crate :: models:: { CrateOwner , Follow , OwnerKind , User , Version , VersionOwnerAction } ;
17
16
use crate :: schema:: { crate_owners, crates, emails, follows, users, versions} ;
18
- use crate :: tasks:: spawn_blocking;
19
17
use crate :: util:: errors:: { bad_request, AppResult } ;
20
18
use crate :: util:: BytesRequest ;
21
19
use crate :: views:: { EncodableMe , EncodablePrivateUser , EncodableVersion , OwnedCrate } ;
@@ -69,41 +67,39 @@ pub async fn me(app: AppState, req: Parts) -> AppResult<Json<EncodableMe>> {
69
67
pub async fn updates ( app : AppState , req : Parts ) -> AppResult < ErasedJson > {
70
68
let mut conn = app. db_read_prefer_primary ( ) . await ?;
71
69
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
+ } ) )
107
103
}
108
104
109
105
/// Handles the `PUT /confirm/:email_token` route
0 commit comments