Skip to content

Commit 64d05d5

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 9e2bbdf commit 64d05d5

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
@@ -121,19 +121,19 @@ pub async fn search(app: AppState, req: Parts) -> AppResult<Json<Value>> {
121121
// to ensure predictable pagination behavior.
122122
if sort == Some("downloads") {
123123
seek = Some(Seek::Downloads);
124-
query = query.order((crates::downloads.desc(), crates::id.asc()))
124+
query = query.order((crates::downloads.desc(), crates::id.desc()))
125125
} else if sort == Some("recent-downloads") {
126126
seek = Some(Seek::RecentDownloads);
127127
query = query.order((
128128
recent_crate_downloads::downloads.desc().nulls_last(),
129-
crates::id.asc(),
129+
crates::id.desc(),
130130
))
131131
} else if sort == Some("recent-updates") {
132132
seek = Some(Seek::RecentUpdates);
133-
query = query.order((crates::updated_at.desc(), crates::id.asc()));
133+
query = query.order((crates::updated_at.desc(), crates::id.desc()));
134134
} else if sort == Some("new") {
135135
seek = Some(Seek::New);
136-
query = query.order((crates::created_at.desc(), crates::id.asc()));
136+
query = query.order((crates::created_at.desc(), crates::id.desc()));
137137
} else {
138138
seek = seek.or(Some(Seek::Name));
139139
// Since the name is unique value, the inherent ordering becomes naturally unique.
@@ -413,25 +413,25 @@ impl<'a> FilterParams<'a> {
413413
}
414414
SeekPayload::New(New(created_at, id)) => {
415415
// Equivalent of:
416-
// `WHERE (created_at = created_at' AND id > id') OR created_at < created_at'`
416+
// `WHERE (created_at = created_at' AND id < id') OR created_at < created_at'`
417417
vec![
418418
Box::new(
419419
crates::created_at
420420
.eq(created_at)
421-
.and(crates::id.gt(id))
421+
.and(crates::id.lt(id))
422422
.nullable(),
423423
),
424424
Box::new(crates::created_at.lt(created_at).nullable()),
425425
]
426426
}
427427
SeekPayload::RecentUpdates(RecentUpdates(updated_at, id)) => {
428428
// Equivalent of:
429-
// `WHERE (updated_at = updated_at' AND id > id') OR updated_at < updated_at'`
429+
// `WHERE (updated_at = updated_at' AND id < id') OR updated_at < updated_at'`
430430
vec![
431431
Box::new(
432432
crates::updated_at
433433
.eq(updated_at)
434-
.and(crates::id.gt(id))
434+
.and(crates::id.lt(id))
435435
.nullable(),
436436
),
437437
Box::new(crates::updated_at.lt(updated_at).nullable()),
@@ -440,17 +440,17 @@ impl<'a> FilterParams<'a> {
440440
SeekPayload::RecentDownloads(RecentDownloads(recent_downloads, id)) => {
441441
// Equivalent of:
442442
// for recent_downloads is not None:
443-
// `WHERE (recent_downloads = recent_downloads' AND id > id')
443+
// `WHERE (recent_downloads = recent_downloads' AND id < id')
444444
// OR (recent_downloads < recent_downloads' OR recent_downloads IS NULL)`
445445
// for recent_downloads is None:
446-
// `WHERE (recent_downloads IS NULL AND id > id')`
446+
// `WHERE (recent_downloads IS NULL AND id < id')`
447447
match recent_downloads {
448448
Some(dl) => {
449449
vec![
450450
Box::new(
451451
recent_crate_downloads::downloads
452452
.eq(dl)
453-
.and(crates::id.gt(id))
453+
.and(crates::id.lt(id))
454454
.nullable(),
455455
),
456456
Box::new(
@@ -465,28 +465,28 @@ impl<'a> FilterParams<'a> {
465465
vec![Box::new(
466466
recent_crate_downloads::downloads
467467
.is_null()
468-
.and(crates::id.gt(id))
468+
.and(crates::id.lt(id))
469469
.nullable(),
470470
)]
471471
}
472472
}
473473
}
474474
SeekPayload::Downloads(Downloads(downloads, id)) => {
475475
// Equivalent of:
476-
// `WHERE (downloads = downloads' AND id > id') OR downloads < downloads'`
476+
// `WHERE (downloads = downloads' AND id < id') OR downloads < downloads'`
477477
vec![
478478
Box::new(
479479
crates::downloads
480480
.eq(downloads)
481-
.and(crates::id.gt(id))
481+
.and(crates::id.lt(id))
482482
.nullable(),
483483
),
484484
Box::new(crates::downloads.lt(downloads).nullable()),
485485
]
486486
}
487487
SeekPayload::Query(Query(exact_match, id)) => {
488488
// Equivalent of:
489-
// `WHERE (exact_match = exact_match' AND name > name') OR exact_match <
489+
// `WHERE (exact_match = exact_match' AND name < name') OR exact_match <
490490
// exact_match'`
491491
let q_string = self.q_string.expect("q_string should not be None");
492492
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
@@ -325,14 +325,14 @@ fn index_sorting() {
325325
// Sort by downloads
326326
for json in search_both(&anon, "sort=downloads") {
327327
assert_eq!(json.meta.total, 4);
328-
assert_eq!(json.crates[0].name, "baz_sort");
329-
assert_eq!(json.crates[1].name, "other_sort");
328+
assert_eq!(json.crates[0].name, "other_sort");
329+
assert_eq!(json.crates[1].name, "baz_sort");
330330
assert_eq!(json.crates[2].name, "bar_sort");
331331
assert_eq!(json.crates[3].name, "foo_sort");
332332
}
333333
let (resp, calls) = page_with_seek(&anon, "sort=downloads");
334-
assert_eq!(resp[0].crates[0].name, "baz_sort");
335-
assert_eq!(resp[1].crates[0].name, "other_sort");
334+
assert_eq!(resp[0].crates[0].name, "other_sort");
335+
assert_eq!(resp[1].crates[0].name, "baz_sort");
336336
assert_eq!(resp[2].crates[0].name, "bar_sort");
337337
assert_eq!(resp[3].crates[0].name, "foo_sort");
338338
assert_eq!(resp[3].meta.total, 4);
@@ -341,14 +341,14 @@ fn index_sorting() {
341341
// Sort by recent-downloads
342342
for json in search_both(&anon, "sort=recent-downloads") {
343343
assert_eq!(json.meta.total, 4);
344-
assert_eq!(json.crates[0].name, "foo_sort");
345-
assert_eq!(json.crates[1].name, "baz_sort");
344+
assert_eq!(json.crates[0].name, "baz_sort");
345+
assert_eq!(json.crates[1].name, "foo_sort");
346346
assert_eq!(json.crates[2].name, "bar_sort");
347347
assert_eq!(json.crates[3].name, "other_sort");
348348
}
349349
let (resp, calls) = page_with_seek(&anon, "sort=recent-downloads");
350-
assert_eq!(resp[0].crates[0].name, "foo_sort");
351-
assert_eq!(resp[1].crates[0].name, "baz_sort");
350+
assert_eq!(resp[0].crates[0].name, "baz_sort");
351+
assert_eq!(resp[1].crates[0].name, "foo_sort");
352352
assert_eq!(resp[2].crates[0].name, "bar_sort");
353353
assert_eq!(resp[3].crates[0].name, "other_sort");
354354
assert_eq!(resp[3].meta.total, 4);
@@ -358,14 +358,14 @@ fn index_sorting() {
358358
for json in search_both(&anon, "sort=recent-updates") {
359359
assert_eq!(json.meta.total, 4);
360360
assert_eq!(json.crates[0].name, "other_sort");
361-
assert_eq!(json.crates[1].name, "bar_sort");
362-
assert_eq!(json.crates[2].name, "baz_sort");
361+
assert_eq!(json.crates[1].name, "baz_sort");
362+
assert_eq!(json.crates[2].name, "bar_sort");
363363
assert_eq!(json.crates[3].name, "foo_sort");
364364
}
365365
let (resp, calls) = page_with_seek(&anon, "sort=recent-updates");
366366
assert_eq!(resp[0].crates[0].name, "other_sort");
367-
assert_eq!(resp[1].crates[0].name, "bar_sort");
368-
assert_eq!(resp[2].crates[0].name, "baz_sort");
367+
assert_eq!(resp[1].crates[0].name, "baz_sort");
368+
assert_eq!(resp[2].crates[0].name, "bar_sort");
369369
assert_eq!(resp[3].crates[0].name, "foo_sort");
370370
assert_eq!(resp[3].meta.total, 4);
371371
assert_eq!(calls, 5);
@@ -374,14 +374,14 @@ fn index_sorting() {
374374
for json in search_both(&anon, "sort=new") {
375375
assert_eq!(json.meta.total, 4);
376376
assert_eq!(json.crates[0].name, "bar_sort");
377-
assert_eq!(json.crates[1].name, "baz_sort");
378-
assert_eq!(json.crates[2].name, "other_sort");
377+
assert_eq!(json.crates[1].name, "other_sort");
378+
assert_eq!(json.crates[2].name, "baz_sort");
379379
assert_eq!(json.crates[3].name, "foo_sort");
380380
}
381381
let (resp, calls) = page_with_seek(&anon, "sort=new");
382382
assert_eq!(resp[0].crates[0].name, "bar_sort");
383-
assert_eq!(resp[1].crates[0].name, "baz_sort");
384-
assert_eq!(resp[2].crates[0].name, "other_sort");
383+
assert_eq!(resp[1].crates[0].name, "other_sort");
384+
assert_eq!(resp[2].crates[0].name, "baz_sort");
385385
assert_eq!(resp[3].crates[0].name, "foo_sort");
386386
assert_eq!(resp[3].meta.total, 4);
387387
assert_eq!(calls, 5);
@@ -466,14 +466,14 @@ fn index_sorting() {
466466
// by descending downloads
467467
for json in search_both(&anon, "sort=recent-downloads") {
468468
assert_eq!(json.meta.total, 4);
469-
assert_eq!(json.crates[0].name, "foo_sort");
470-
assert_eq!(json.crates[1].name, "baz_sort");
469+
assert_eq!(json.crates[0].name, "baz_sort");
470+
assert_eq!(json.crates[1].name, "foo_sort");
471471
assert_eq!(json.crates[2].name, "bar_sort");
472472
assert_eq!(json.crates[3].name, "other_sort");
473473
}
474474
let (resp, calls) = page_with_seek(&anon, "sort=recent-downloads");
475-
assert_eq!(resp[0].crates[0].name, "foo_sort");
476-
assert_eq!(resp[1].crates[0].name, "baz_sort");
475+
assert_eq!(resp[0].crates[0].name, "baz_sort");
476+
assert_eq!(resp[1].crates[0].name, "foo_sort");
477477
assert_eq!(resp[2].crates[0].name, "bar_sort");
478478
assert_eq!(resp[3].crates[0].name, "other_sort");
479479
assert_eq!(resp[3].meta.total, 4);

0 commit comments

Comments
 (0)