66
77use axum:: extract:: Path ;
88use axum:: Json ;
9+ use crates_io_database:: schema:: { crates, dependencies} ;
910use crates_io_worker:: BackgroundJob ;
1011use diesel:: {
11- BoolExpressionMethods , ExpressionMethods , PgExpressionMethods , QueryDsl , RunQueryDsl ,
12+ BelongingToDsl , BoolExpressionMethods , ExpressionMethods , PgExpressionMethods , QueryDsl ,
13+ RunQueryDsl , SelectableHelper ,
1214} ;
1315use diesel_async:: async_connection_wrapper:: AsyncConnectionWrapper ;
1416use http:: request:: Parts ;
@@ -21,7 +23,8 @@ use crate::app::AppState;
2123use crate :: auth:: AuthCheck ;
2224use crate :: models:: token:: EndpointScope ;
2325use crate :: models:: {
24- insert_version_owner_action, Crate , Rights , Version , VersionAction , VersionOwnerAction ,
26+ insert_version_owner_action, Crate , Dependency , Rights , Version , VersionAction ,
27+ VersionOwnerAction ,
2528} ;
2629use crate :: rate_limiter:: LimitedAction ;
2730use crate :: schema:: versions;
@@ -63,8 +66,11 @@ pub async fn dependencies(
6366 spawn_blocking ( move || {
6467 let conn: & mut AsyncConnectionWrapper < _ > = & mut conn. into ( ) ;
6568
66- let deps = version. dependencies ( conn) ?;
67- let deps = deps
69+ let deps = Dependency :: belonging_to ( & version)
70+ . inner_join ( crates:: table)
71+ . select ( ( Dependency :: as_select ( ) , crates:: name) )
72+ . order ( ( dependencies:: optional, crates:: name) )
73+ . load :: < ( Dependency , String ) > ( conn) ?
6874 . into_iter ( )
6975 . map ( |( dep, crate_name) | EncodableDependency :: from_dep ( dep, & crate_name) )
7076 . collect :: < Vec < _ > > ( ) ;
0 commit comments