Skip to content

Commit 868daa6

Browse files
committed
controllers/krate/search: Reverse the sort order of the auxiliary column
Since we all use descending order for sorting, it would be more intuitive to change all the auxiliary column from ascending to descending.
1 parent f3921c6 commit 868daa6

File tree

2 files changed

+35
-35
lines changed

2 files changed

+35
-35
lines changed

src/controllers/krate/search.rs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -122,19 +122,19 @@ pub async fn search(app: AppState, req: Parts) -> AppResult<Json<Value>> {
122122
// to ensure predictable pagination behavior.
123123
if sort == Some("downloads") {
124124
seek = Some(Seek::Downloads);
125-
query = query.order((crates::downloads.desc(), crates::id.asc()))
125+
query = query.order((crates::downloads.desc(), crates::id.desc()))
126126
} else if sort == Some("recent-downloads") {
127127
seek = Some(Seek::RecentDownloads);
128128
query = query.order((
129129
recent_crate_downloads::downloads.desc().nulls_last(),
130-
crates::id.asc(),
130+
crates::id.desc(),
131131
))
132132
} else if sort == Some("recent-updates") {
133133
seek = Some(Seek::RecentUpdates);
134-
query = query.order((crates::updated_at.desc(), crates::id.asc()));
134+
query = query.order((crates::updated_at.desc(), crates::id.desc()));
135135
} else if sort == Some("new") {
136136
seek = Some(Seek::New);
137-
query = query.order((crates::created_at.desc(), crates::id.asc()));
137+
query = query.order((crates::created_at.desc(), crates::id.desc()));
138138
} else {
139139
seek = seek.or(Some(Seek::Name));
140140
// Since the name is unique value, the inherent ordering becomes naturally unique.
@@ -416,25 +416,25 @@ impl<'a> FilterParams<'a> {
416416
}
417417
SeekPayload::New(New(created_at, id)) => {
418418
// Equivalent of:
419-
// `WHERE (created_at = created_at' AND id > id') OR created_at < created_at'`
419+
// `WHERE (created_at = created_at' AND id < id') OR created_at < created_at'`
420420
vec![
421421
Box::new(
422422
crates::created_at
423423
.eq(created_at)
424-
.and(crates::id.gt(id))
424+
.and(crates::id.lt(id))
425425
.nullable(),
426426
),
427427
Box::new(crates::created_at.lt(created_at).nullable()),
428428
]
429429
}
430430
SeekPayload::RecentUpdates(RecentUpdates(updated_at, id)) => {
431431
// Equivalent of:
432-
// `WHERE (updated_at = updated_at' AND id > id') OR updated_at < updated_at'`
432+
// `WHERE (updated_at = updated_at' AND id < id') OR updated_at < updated_at'`
433433
vec![
434434
Box::new(
435435
crates::updated_at
436436
.eq(updated_at)
437-
.and(crates::id.gt(id))
437+
.and(crates::id.lt(id))
438438
.nullable(),
439439
),
440440
Box::new(crates::updated_at.lt(updated_at).nullable()),
@@ -443,17 +443,17 @@ impl<'a> FilterParams<'a> {
443443
SeekPayload::RecentDownloads(RecentDownloads(recent_downloads, id)) => {
444444
// Equivalent of:
445445
// for recent_downloads is not None:
446-
// `WHERE (recent_downloads = recent_downloads' AND id > id')
446+
// `WHERE (recent_downloads = recent_downloads' AND id < id')
447447
// OR (recent_downloads < recent_downloads' OR recent_downloads IS NULL)`
448448
// for recent_downloads is None:
449-
// `WHERE (recent_downloads IS NULL AND id > id')`
449+
// `WHERE (recent_downloads IS NULL AND id < id')`
450450
match recent_downloads {
451451
Some(dl) => {
452452
vec![
453453
Box::new(
454454
recent_crate_downloads::downloads
455455
.eq(dl)
456-
.and(crates::id.gt(id))
456+
.and(crates::id.lt(id))
457457
.nullable(),
458458
),
459459
Box::new(
@@ -468,28 +468,28 @@ impl<'a> FilterParams<'a> {
468468
vec![Box::new(
469469
recent_crate_downloads::downloads
470470
.is_null()
471-
.and(crates::id.gt(id))
471+
.and(crates::id.lt(id))
472472
.nullable(),
473473
)]
474474
}
475475
}
476476
}
477477
SeekPayload::Downloads(Downloads(downloads, id)) => {
478478
// Equivalent of:
479-
// `WHERE (downloads = downloads' AND id > id') OR downloads < downloads'`
479+
// `WHERE (downloads = downloads' AND id < id') OR downloads < downloads'`
480480
vec![
481481
Box::new(
482482
crates::downloads
483483
.eq(downloads)
484-
.and(crates::id.gt(id))
484+
.and(crates::id.lt(id))
485485
.nullable(),
486486
),
487487
Box::new(crates::downloads.lt(downloads).nullable()),
488488
]
489489
}
490490
SeekPayload::Query(Query(exact_match, id)) => {
491491
// Equivalent of:
492-
// `WHERE (exact_match = exact_match' AND name > name') OR exact_match <
492+
// `WHERE (exact_match = exact_match' AND name < name') OR exact_match <
493493
// exact_match'`
494494
let q_string = self.q_string.expect("q_string should not be None");
495495
let name_exact_match = Crate::with_name(q_string);

src/tests/routes/crates/list.rs

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -319,14 +319,14 @@ fn index_sorting() {
319319
// Sort by downloads
320320
for json in search_both(&anon, "sort=downloads") {
321321
assert_eq!(json.meta.total, 4);
322-
assert_eq!(json.crates[0].name, "baz_sort");
323-
assert_eq!(json.crates[1].name, "other_sort");
322+
assert_eq!(json.crates[0].name, "other_sort");
323+
assert_eq!(json.crates[1].name, "baz_sort");
324324
assert_eq!(json.crates[2].name, "bar_sort");
325325
assert_eq!(json.crates[3].name, "foo_sort");
326326
}
327327
let (resp, calls) = page_with_seek(&anon, "sort=downloads");
328-
assert_eq!(resp[0].crates[0].name, "baz_sort");
329-
assert_eq!(resp[1].crates[0].name, "other_sort");
328+
assert_eq!(resp[0].crates[0].name, "other_sort");
329+
assert_eq!(resp[1].crates[0].name, "baz_sort");
330330
assert_eq!(resp[2].crates[0].name, "bar_sort");
331331
assert_eq!(resp[3].crates[0].name, "foo_sort");
332332
assert_eq!(resp[3].meta.total, 4);
@@ -335,14 +335,14 @@ fn index_sorting() {
335335
// Sort by recent-downloads
336336
for json in search_both(&anon, "sort=recent-downloads") {
337337
assert_eq!(json.meta.total, 4);
338-
assert_eq!(json.crates[0].name, "foo_sort");
339-
assert_eq!(json.crates[1].name, "baz_sort");
338+
assert_eq!(json.crates[0].name, "baz_sort");
339+
assert_eq!(json.crates[1].name, "foo_sort");
340340
assert_eq!(json.crates[2].name, "bar_sort");
341341
assert_eq!(json.crates[3].name, "other_sort");
342342
}
343343
let (resp, calls) = page_with_seek(&anon, "sort=recent-downloads");
344-
assert_eq!(resp[0].crates[0].name, "foo_sort");
345-
assert_eq!(resp[1].crates[0].name, "baz_sort");
344+
assert_eq!(resp[0].crates[0].name, "baz_sort");
345+
assert_eq!(resp[1].crates[0].name, "foo_sort");
346346
assert_eq!(resp[2].crates[0].name, "bar_sort");
347347
assert_eq!(resp[3].crates[0].name, "other_sort");
348348
assert_eq!(resp[3].meta.total, 4);
@@ -352,14 +352,14 @@ fn index_sorting() {
352352
for json in search_both(&anon, "sort=recent-updates") {
353353
assert_eq!(json.meta.total, 4);
354354
assert_eq!(json.crates[0].name, "other_sort");
355-
assert_eq!(json.crates[1].name, "bar_sort");
356-
assert_eq!(json.crates[2].name, "baz_sort");
355+
assert_eq!(json.crates[1].name, "baz_sort");
356+
assert_eq!(json.crates[2].name, "bar_sort");
357357
assert_eq!(json.crates[3].name, "foo_sort");
358358
}
359359
let (resp, calls) = page_with_seek(&anon, "sort=recent-updates");
360360
assert_eq!(resp[0].crates[0].name, "other_sort");
361-
assert_eq!(resp[1].crates[0].name, "bar_sort");
362-
assert_eq!(resp[2].crates[0].name, "baz_sort");
361+
assert_eq!(resp[1].crates[0].name, "baz_sort");
362+
assert_eq!(resp[2].crates[0].name, "bar_sort");
363363
assert_eq!(resp[3].crates[0].name, "foo_sort");
364364
assert_eq!(resp[3].meta.total, 4);
365365
assert_eq!(calls, 5);
@@ -368,14 +368,14 @@ fn index_sorting() {
368368
for json in search_both(&anon, "sort=new") {
369369
assert_eq!(json.meta.total, 4);
370370
assert_eq!(json.crates[0].name, "bar_sort");
371-
assert_eq!(json.crates[1].name, "baz_sort");
372-
assert_eq!(json.crates[2].name, "other_sort");
371+
assert_eq!(json.crates[1].name, "other_sort");
372+
assert_eq!(json.crates[2].name, "baz_sort");
373373
assert_eq!(json.crates[3].name, "foo_sort");
374374
}
375375
let (resp, calls) = page_with_seek(&anon, "sort=new");
376376
assert_eq!(resp[0].crates[0].name, "bar_sort");
377-
assert_eq!(resp[1].crates[0].name, "baz_sort");
378-
assert_eq!(resp[2].crates[0].name, "other_sort");
377+
assert_eq!(resp[1].crates[0].name, "other_sort");
378+
assert_eq!(resp[2].crates[0].name, "baz_sort");
379379
assert_eq!(resp[3].crates[0].name, "foo_sort");
380380
assert_eq!(resp[3].meta.total, 4);
381381
assert_eq!(calls, 5);
@@ -460,14 +460,14 @@ fn index_sorting() {
460460
// by descending downloads
461461
for json in search_both(&anon, "sort=recent-downloads") {
462462
assert_eq!(json.meta.total, 4);
463-
assert_eq!(json.crates[0].name, "foo_sort");
464-
assert_eq!(json.crates[1].name, "baz_sort");
463+
assert_eq!(json.crates[0].name, "baz_sort");
464+
assert_eq!(json.crates[1].name, "foo_sort");
465465
assert_eq!(json.crates[2].name, "bar_sort");
466466
assert_eq!(json.crates[3].name, "other_sort");
467467
}
468468
let (resp, calls) = page_with_seek(&anon, "sort=recent-downloads");
469-
assert_eq!(resp[0].crates[0].name, "foo_sort");
470-
assert_eq!(resp[1].crates[0].name, "baz_sort");
469+
assert_eq!(resp[0].crates[0].name, "baz_sort");
470+
assert_eq!(resp[1].crates[0].name, "foo_sort");
471471
assert_eq!(resp[2].crates[0].name, "bar_sort");
472472
assert_eq!(resp[3].crates[0].name, "other_sort");
473473
assert_eq!(resp[3].meta.total, 4);

0 commit comments

Comments
 (0)