77use crate :: controllers:: frontend_prelude:: * ;
88use crate :: models:: {
99 Category , Crate , CrateCategory , CrateKeyword , CrateVersions , Keyword , RecentCrateDownloads ,
10- User , Version ,
10+ User , Version , VersionOwnerAction ,
1111} ;
1212use crate :: schema:: * ;
1313use crate :: views:: {
@@ -105,13 +105,26 @@ pub fn show(req: &mut dyn Request) -> AppResult<Response> {
105105 let conn = req. db_conn ( ) ?;
106106 let krate = Crate :: by_name ( name) . first :: < Crate > ( & * conn) ?;
107107
108- let mut versions_and_publishers: Vec < ( Version , Option < User > ) > = krate
108+ let mut versions_and_publishers = krate
109109 . all_versions ( )
110110 . left_outer_join ( users:: table)
111111 . select ( ( versions:: all_columns, users:: all_columns. nullable ( ) ) )
112- . load ( & * conn) ?;
112+ . load :: < ( Version , Option < User > ) > ( & * conn) ?;
113113 versions_and_publishers. sort_by ( |a, b| b. 0 . num . cmp ( & a. 0 . num ) ) ;
114- let ids = versions_and_publishers. iter ( ) . map ( |v| v. 0 . id ) . collect ( ) ;
114+ let versions = versions_and_publishers
115+ . iter ( )
116+ . map ( |( v, _) | v)
117+ . cloned ( )
118+ . collect :: < Vec < _ > > ( ) ;
119+ let versions_publishers_and_audit_actions = versions_and_publishers
120+ . into_iter ( )
121+ . zip ( VersionOwnerAction :: for_versions ( & conn, & versions) ?. into_iter ( ) )
122+ . map ( |( ( v, pb) , aas) | ( v, pb, aas) )
123+ . collect :: < Vec < _ > > ( ) ;
124+ let ids = versions_publishers_and_audit_actions
125+ . iter ( )
126+ . map ( |v| v. 0 . id )
127+ . collect ( ) ;
115128
116129 let kws = CrateKeyword :: belonging_to ( & krate)
117130 . inner_join ( keywords:: table)
@@ -149,9 +162,9 @@ pub fn show(req: &mut dyn Request) -> AppResult<Response> {
149162 false ,
150163 recent_downloads,
151164 ) ,
152- versions : versions_and_publishers
165+ versions : versions_publishers_and_audit_actions
153166 . into_iter ( )
154- . map ( |( v, pb) | v. encodable ( & krate. name , pb) )
167+ . map ( |( v, pb, aas ) | v. encodable ( & krate. name , pb, aas ) )
155168 . collect ( ) ,
156169 keywords : kws. into_iter ( ) . map ( Keyword :: encodable) . collect ( ) ,
157170 categories : cats. into_iter ( ) . map ( Category :: encodable) . collect ( ) ,
@@ -193,9 +206,15 @@ pub fn versions(req: &mut dyn Request) -> AppResult<Response> {
193206 . select ( ( versions:: all_columns, users:: all_columns. nullable ( ) ) )
194207 . load ( & * conn) ?;
195208 versions_and_publishers. sort_by ( |a, b| b. 0 . num . cmp ( & a. 0 . num ) ) ;
209+ let versions = versions_and_publishers
210+ . iter ( )
211+ . map ( |( v, _) | v)
212+ . cloned ( )
213+ . collect :: < Vec < _ > > ( ) ;
196214 let versions = versions_and_publishers
197215 . into_iter ( )
198- . map ( |( v, pb) | v. encodable ( crate_name, pb) )
216+ . zip ( VersionOwnerAction :: for_versions ( & conn, & versions) ?. into_iter ( ) )
217+ . map ( |( ( v, pb) , aas) | v. encodable ( crate_name, pb, aas) )
199218 . collect ( ) ;
200219
201220 #[ derive( Serialize ) ]
@@ -220,7 +239,7 @@ pub fn reverse_dependencies(req: &mut dyn Request) -> AppResult<Response> {
220239
221240 let version_ids: Vec < i32 > = rev_deps. iter ( ) . map ( |dep| dep. version_id ) . collect ( ) ;
222241
223- let versions = versions:: table
242+ let versions_and_publishers = versions:: table
224243 . filter ( versions:: id. eq ( any ( version_ids) ) )
225244 . inner_join ( crates:: table)
226245 . left_outer_join ( users:: table)
@@ -229,9 +248,18 @@ pub fn reverse_dependencies(req: &mut dyn Request) -> AppResult<Response> {
229248 crates:: name,
230249 users:: all_columns. nullable ( ) ,
231250 ) )
232- . load :: < ( Version , String , Option < User > ) > ( & * conn) ?
251+ . load :: < ( Version , String , Option < User > ) > ( & * conn) ?;
252+ let versions = versions_and_publishers
253+ . iter ( )
254+ . map ( |( v, _, _) | v)
255+ . cloned ( )
256+ . collect :: < Vec < _ > > ( ) ;
257+ let versions = versions_and_publishers
233258 . into_iter ( )
234- . map ( |( version, krate_name, user) | version. encodable ( & krate_name, user) )
259+ . zip ( VersionOwnerAction :: for_versions ( & conn, & versions) ?. into_iter ( ) )
260+ . map ( |( ( version, krate_name, published_by) , actions) | {
261+ version. encodable ( & krate_name, published_by, actions)
262+ } )
235263 . collect ( ) ;
236264
237265 #[ derive( Serialize ) ]
0 commit comments