File tree Expand file tree Collapse file tree 2 files changed +38
-16
lines changed Expand file tree Collapse file tree 2 files changed +38
-16
lines changed Original file line number Diff line number Diff line change @@ -19,26 +19,24 @@ use tokio::runtime::Handle;
1919
2020/// Handles the `GET /crates/:crate_id/owners` route.
2121pub async fn owners ( state : AppState , Path ( crate_name) : Path < String > ) -> AppResult < Json < Value > > {
22- let conn = state. db_read ( ) . await ?;
23- spawn_blocking ( move || {
24- use diesel:: RunQueryDsl ;
22+ use diesel_async:: RunQueryDsl ;
2523
26- let conn : & mut AsyncConnectionWrapper < _ > = & mut conn . into ( ) ;
24+ let mut conn = state . db_read ( ) . await ? ;
2725
28- let krate: Crate = Crate :: by_name ( & crate_name)
29- . first ( conn)
30- . optional ( ) ?
31- . ok_or_else ( || crate_not_found ( & crate_name) ) ?;
26+ let krate: Crate = Crate :: by_name ( & crate_name)
27+ . first ( & mut conn)
28+ . await
29+ . optional ( ) ?
30+ . ok_or_else ( || crate_not_found ( & crate_name) ) ?;
3231
33- let owners = krate
34- . owners ( conn) ?
35- . into_iter ( )
36- . map ( Owner :: into)
37- . collect :: < Vec < EncodableOwner > > ( ) ;
32+ let owners = krate
33+ . async_owners ( & mut conn)
34+ . await ?
35+ . into_iter ( )
36+ . map ( Owner :: into)
37+ . collect :: < Vec < EncodableOwner > > ( ) ;
3838
39- Ok ( Json ( json ! ( { "users" : owners } ) ) )
40- } )
41- . await
39+ Ok ( Json ( json ! ( { "users" : owners } ) ) )
4240}
4341
4442/// Handles the `GET /crates/:crate_id/owner_team` route.
Original file line number Diff line number Diff line change @@ -355,6 +355,30 @@ impl Crate {
355355 ) )
356356 }
357357
358+ pub async fn async_owners ( & self , conn : & mut AsyncPgConnection ) -> QueryResult < Vec < Owner > > {
359+ use diesel_async:: RunQueryDsl ;
360+
361+ let users = CrateOwner :: by_owner_kind ( OwnerKind :: User )
362+ . filter ( crate_owners:: crate_id. eq ( self . id ) )
363+ . inner_join ( users:: table)
364+ . select ( User :: as_select ( ) )
365+ . load ( conn)
366+ . await ?
367+ . into_iter ( )
368+ . map ( Owner :: User ) ;
369+
370+ let teams = CrateOwner :: by_owner_kind ( OwnerKind :: Team )
371+ . filter ( crate_owners:: crate_id. eq ( self . id ) )
372+ . inner_join ( teams:: table)
373+ . select ( Team :: as_select ( ) )
374+ . load ( conn)
375+ . await ?
376+ . into_iter ( )
377+ . map ( Owner :: Team ) ;
378+
379+ Ok ( users. chain ( teams) . collect ( ) )
380+ }
381+
358382 pub fn owners ( & self , conn : & mut impl Conn ) -> QueryResult < Vec < Owner > > {
359383 use diesel:: RunQueryDsl ;
360384
You can’t perform that action at this time.
0 commit comments