From 934e1c668db7723529631efe18823c54abb7a875 Mon Sep 17 00:00:00 2001 From: Koen Verheyen Date: Tue, 24 Sep 2024 15:33:29 +0200 Subject: [PATCH] Implemented sorting logic #1676 --- repositories/candidate_records.go | 30 +++++++++++++++++++++++++----- 1 file changed, 25 insertions(+), 5 deletions(-) diff --git a/repositories/candidate_records.go b/repositories/candidate_records.go index 0276d7a9..20acc263 100644 --- a/repositories/candidate_records.go +++ b/repositories/candidate_records.go @@ -230,10 +230,7 @@ func buildQuery(searchArgs *models.SearchArgs) sq.SelectBuilder { sq.Expr("status_date IS NOT NULL"), sq.LtOrEq{"EXTRACT(DAY FROM (current_timestamp - status_date))": "90"}, }, - }). - OrderBy("date_created DESC"). - Limit(uint64(searchArgs.Limit())). - Offset(uint64(searchArgs.Offset())) + }) for field, filterValue := range searchArgs.Filters { switch field { @@ -246,7 +243,30 @@ func buildQuery(searchArgs *models.SearchArgs) sq.SelectBuilder { } } - return query + sort := "default" + if len(searchArgs.Sort) > 0 { + sort = searchArgs.Sort[0] + } + switch sort { + case "added-desc": + query = query.OrderBy("date_created DESC") + + case "added-asc": + query = query.OrderBy("date_created ASC") + + case "year-desc": + query = query.OrderBy("metadata->'year' DESC") + + case "year-asc": + query = query.OrderBy("metadata->'year' ASC") + + default: + query = query.OrderBy("array_position(ARRAY['new', 'imported', 'rejected'], status)", "date_created DESC") + } + + return query. + Limit(uint64(searchArgs.Limit())). + Offset(uint64(searchArgs.Offset())) } func getPersonFilter(personID string) []byte {