From 8ee73a8a8b29e87ea632ac5d3f86fc1668f0f37a Mon Sep 17 00:00:00 2001 From: dusk Date: Wed, 20 Aug 2025 23:27:09 +0300 Subject: [PATCH] appview: improve pagination.Page usage Change-Id: llstyrzusrmvlkxnnyunzszpvnyoqvlp Signed-off-by: dusk --- appview/issues/issues.go | 2 +- appview/issues/router.go | 3 ++- appview/middleware/middleware.go | 46 +++++++++++++++++--------------- appview/pagination/page.go | 6 ++--- 4 files changed, 30 insertions(+), 27 deletions(-) diff --git a/appview/issues/issues.go b/appview/issues/issues.go index b46045f..f8e06f3 100644 --- a/appview/issues/issues.go +++ b/appview/issues/issues.go @@ -594,7 +594,7 @@ func (rp *Issues) RepoIssues(w http.ResponseWriter, r *http.Request) { page, ok := r.Context().Value("page").(pagination.Page) if !ok { log.Println("failed to get page") - page = pagination.FirstPage() + page = pagination.FirstPage(10) } user := rp.oauth.GetUser(r) diff --git a/appview/issues/router.go b/appview/issues/router.go index f2420da..804e847 100644 --- a/appview/issues/router.go +++ b/appview/issues/router.go @@ -5,13 +5,14 @@ import ( "github.com/go-chi/chi/v5" "tangled.sh/tangled.sh/core/appview/middleware" + "tangled.sh/tangled.sh/core/appview/pagination" ) func (i *Issues) Router(mw *middleware.Middleware) http.Handler { r := chi.NewRouter() r.Route("/", func(r chi.Router) { - r.With(middleware.Paginate).Get("/", i.RepoIssues) + r.With(middleware.Paginate(pagination.FirstPage(10))).Get("/", i.RepoIssues) r.Get("/{issue}", i.RepoSingleIssue) r.Group(func(r chi.Router) { diff --git a/appview/middleware/middleware.go b/appview/middleware/middleware.go index 94b1696..6c9d5f4 100644 --- a/appview/middleware/middleware.go +++ b/appview/middleware/middleware.go @@ -81,33 +81,35 @@ func AuthMiddleware(a *oauth.OAuth) middlewareFunc { } } -func Paginate(next http.Handler) http.Handler { - return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - page := pagination.FirstPage() +func Paginate(firstPage pagination.Page) func(next http.Handler) http.Handler { + return func(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + page := firstPage - offsetVal := r.URL.Query().Get("offset") - if offsetVal != "" { - offset, err := strconv.Atoi(offsetVal) - if err != nil { - log.Println("invalid offset") - } else { - page.Offset = offset + offsetVal := r.URL.Query().Get("offset") + if offsetVal != "" { + offset, err := strconv.Atoi(offsetVal) + if err != nil { + log.Println("invalid offset") + } else { + page.Offset = offset + } } - } - limitVal := r.URL.Query().Get("limit") - if limitVal != "" { - limit, err := strconv.Atoi(limitVal) - if err != nil { - log.Println("invalid limit") - } else { - page.Limit = limit + limitVal := r.URL.Query().Get("limit") + if limitVal != "" { + limit, err := strconv.Atoi(limitVal) + if err != nil { + log.Println("invalid limit") + } else { + page.Limit = limit + } } - } - ctx := context.WithValue(r.Context(), "page", page) - next.ServeHTTP(w, r.WithContext(ctx)) - }) + ctx := context.WithValue(r.Context(), "page", page) + next.ServeHTTP(w, r.WithContext(ctx)) + }) + } } func (mw Middleware) knotRoleMiddleware(group string) middlewareFunc { diff --git a/appview/pagination/page.go b/appview/pagination/page.go index e9f47fa..386bf5b 100644 --- a/appview/pagination/page.go +++ b/appview/pagination/page.go @@ -5,16 +5,16 @@ type Page struct { Limit int // number of items in a page } -func FirstPage() Page { +func FirstPage(limit int) Page { return Page{ Offset: 0, - Limit: 10, + Limit: limit, } } func (p Page) Previous() Page { if p.Offset-p.Limit < 0 { - return FirstPage() + return FirstPage(p.Limit) } else { return Page{ Offset: p.Offset - p.Limit, -- 2.43.0