@@ -8,7 +8,8 @@ use std::cmp::Reverse;
8
8
use std:: str:: FromStr ;
9
9
10
10
use crate :: controllers:: frontend_prelude:: * ;
11
- use crate :: controllers:: helpers:: pagination:: PaginationOptions ;
11
+ use crate :: controllers:: helpers:: pagination:: { Paginated , PaginationOptions } ;
12
+ use crate :: controllers:: helpers:: Paginate ;
12
13
13
14
use crate :: models:: {
14
15
Category , Crate , CrateCategory , CrateKeyword , CrateVersions , Keyword , RecentCrateDownloads ,
@@ -325,15 +326,20 @@ pub fn readme(req: &mut dyn RequestExt) -> EndpointResult {
325
326
// FIXME: Not sure why this is necessary since /crates/:crate_id returns
326
327
// this information already, but ember is definitely requesting it
327
328
pub fn versions ( req : & mut dyn RequestExt ) -> EndpointResult {
329
+ let pagination_options = PaginationOptions :: builder ( ) . gather ( req) ?;
328
330
let crate_name = & req. params ( ) [ "crate_id" ] ;
329
331
let conn = req. db_read ( ) ?;
330
332
let krate: Crate = Crate :: by_name ( crate_name) . first ( & * conn) ?;
331
- let mut versions_and_publishers : Vec < ( Version , Option < User > ) > = krate
333
+ let data : Paginated < ( Version , Option < User > ) > = krate
332
334
. all_versions ( )
333
335
. left_outer_join ( users:: table)
334
336
. select ( ( versions:: all_columns, users:: all_columns. nullable ( ) ) )
337
+ . order ( versions:: created_at. desc ( ) )
338
+ . pages_pagination ( pagination_options)
335
339
. load ( & * conn) ?;
340
+ let more = data. next_page_params ( ) . is_some ( ) ;
336
341
342
+ let mut versions_and_publishers = data. into_iter ( ) . collect :: < Vec < _ > > ( ) ;
337
343
versions_and_publishers
338
344
. sort_by_cached_key ( |( version, _) | Reverse ( semver:: Version :: parse ( & version. num ) . ok ( ) ) ) ;
339
345
@@ -348,7 +354,10 @@ pub fn versions(req: &mut dyn RequestExt) -> EndpointResult {
348
354
. map ( |( ( v, pb) , aas) | EncodableVersion :: from ( v, crate_name, pb, aas) )
349
355
. collect :: < Vec < _ > > ( ) ;
350
356
351
- Ok ( req. json ( & json ! ( { "versions" : versions } ) ) )
357
+ Ok ( req. json ( & json ! ( {
358
+ "versions" : versions,
359
+ "meta" : { "more" : more } ,
360
+ } ) ) )
352
361
}
353
362
354
363
/// Handles the `GET /crates/:crate_id/reverse_dependencies` route.
0 commit comments