From 0226c8da23282f9ca6f3dea9a7a60e0000d51471 Mon Sep 17 00:00:00 2001 From: Nazar Kanaev Date: Sun, 1 Nov 2020 15:27:20 +0000 Subject: [PATCH] fever item endpoint max_id parameter --- server/fever.go | 7 +++++++ storage/item.go | 7 ++++++- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/server/fever.go b/server/fever.go index 220d3f7..da17490 100644 --- a/server/fever.go +++ b/server/fever.go @@ -218,6 +218,13 @@ func FeverItemsHandler(rw http.ResponseWriter, req *http.Request) { } } + if _, ok := query["max_id"]; ok { + idstr := query.Get("max_id") + if idnum, err := strconv.ParseInt(idstr, 10, 64); err == nil { + filter.MaxID = &idnum + } + } + items := db(req).ListItems(filter, 0, 50, true) feverItems := make([]FeverItem, len(items)) diff --git a/storage/item.go b/storage/item.go index d827c09..28710a2 100644 --- a/storage/item.go +++ b/storage/item.go @@ -65,6 +65,7 @@ type ItemFilter struct { IDs *[]int64 SinceID *int64 + MaxID *int64 } type MarkFilter struct { @@ -164,6 +165,10 @@ func listQueryPredicate(filter ItemFilter) (string, []interface{}) { cond = append(cond, "i.id > ?") args = append(args, filter.SinceID) } + if filter.MaxID != nil { + cond = append(cond, "i.id < ?") + args = append(args, filter.MaxID) + } predicate := "1" if len(cond) > 0 { @@ -182,7 +187,7 @@ func (s *Storage) ListItems(filter ItemFilter, offset, limit int, newestFirst bo order = "date asc" } - if filter.IDs != nil || filter.SinceID != nil { + if filter.IDs != nil || filter.SinceID != nil || filter.MaxID != nil { order = "i.id asc" }