From e5c2af6d7240995820857d2feb2b9edb012dcfa8 Mon Sep 17 00:00:00 2001 From: Umputun Date: Mon, 25 Dec 2017 16:58:12 -0600 Subject: [PATCH] limited support for sort param --- app/rest/server.go | 4 ++-- app/store/bolt.go | 21 ++++++++++++++++++++- 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/app/rest/server.go b/app/rest/server.go index 86b771df..b5844a10 100644 --- a/app/rest/server.go +++ b/app/rest/server.go @@ -159,12 +159,12 @@ func (s *Server) deleteCommentCtrl(w http.ResponseWriter, r *http.Request) { render.JSON(w, r, JSON{"id": id, "url": url}) } -// GET /find?url=post-url +// GET /find?url=post-url&sort=-time func (s *Server) findCommentsCtrl(w http.ResponseWriter, r *http.Request) { url := r.URL.Query().Get("url") log.Printf("[DEBUG] get comments for %s", url) - comments, err := s.Store.Find(store.Request{Locator: store.Locator{URL: url}}) + comments, err := s.Store.Find(store.Request{Locator: store.Locator{URL: url}, Sort: r.URL.Query().Get("sort")}) if err != nil { log.Printf("[WARN] can't get comments for %s, %s", url, err) httpError(w, r, http.StatusInternalServerError, err, "can't load comments comment") diff --git a/app/store/bolt.go b/app/store/bolt.go index 8dda970d..c1de2147 100644 --- a/app/store/bolt.go +++ b/app/store/bolt.go @@ -135,7 +135,26 @@ func (b *BoltDB) Find(request Request) ([]Comment, error) { }) }) - sort.Slice(res, func(i, j int) bool { return res[i].Timestamp.Before(res[j].Timestamp) }) + // sort result according to request.Sort + sort.Slice(res, func(i, j int) bool { + switch request.Sort { + case "+time", "-time", "time": + if strings.HasPrefix(request.Sort, "-") { + return res[i].Timestamp.After(res[j].Timestamp) + } + return res[i].Timestamp.Before(res[j].Timestamp) + + case "+score", "-score", "score": + if strings.HasPrefix(request.Sort, "-") { + return res[i].Score > res[j].Score + } + return res[i].Score < res[j].Score + + default: + return res[i].Timestamp.Before(res[j].Timestamp) + } + }) + return res, err }