From 4633b7d43e074a20d2be8d5d6b7d343bfe8a802e Mon Sep 17 00:00:00 2001 From: rachel-mp4 Date: Sun, 1 Feb 2026 11:01:09 -0500 Subject: [PATCH] i think this should improve cursors on getButtons --- db/lexicon.go | 40 ++++++++++++++++++++++++++++------------ handler/button.go | 2 +- 2 files changed, 29 insertions(+), 13 deletions(-) diff --git a/db/lexicon.go b/db/lexicon.go index 0bee281..53580f0 100644 --- a/db/lexicon.go +++ b/db/lexicon.go @@ -9,7 +9,7 @@ import ( "time" ) -func (s *Store) GetButtonsAuth(limit int, cursor *string, ctx context.Context, did string) ([]types.ButtonViewAuth, time.Time, error) { +func (s *Store) GetButtonsAuth(limit int, cursor *string, ctx context.Context, did string) ([]types.ButtonViewAuth, *time.Time, error) { query := ` SELECT b.uri, @@ -43,21 +43,29 @@ func (s *Store) GetButtonsAuth(limit int, cursor *string, ctx context.Context, d } if err != nil { if err == pgx.ErrNoRows { - return nil, time.Time{}, nil + return nil, nil, nil } - return nil, time.Time{}, err + return nil, nil, err } defer rows.Close() var buttons = make([]types.ButtonViewAuth, 0) - var postedAt time.Time + var postedAt *time.Time + i := 0 for rows.Next() { + i = i + 1 + if i == limit+1 { + break + } var btnView types.ButtonViewAuth err := rows.Scan(&btnView.URI, &btnView.DID, &btnView.Alt, &btnView.Title, &btnView.HREF, &postedAt, &btnView.Liked) if err != nil { - return nil, time.Time{}, err + return nil, nil, err } buttons = append(buttons, btnView) } + if i != limit+1 { + postedAt = nil + } return buttons, postedAt, nil } @@ -120,7 +128,7 @@ func (s *Store) GetUserLikes(did string, limit int, cursor *string, ctx context. return buttons, postedAt, nil } -func (s *Store) GetButtons(limit int, cursor *string, ctx context.Context) ([]types.ButtonView, time.Time, error) { +func (s *Store) GetButtons(limit int, cursor *string, ctx context.Context) ([]types.ButtonView, *time.Time, error) { query := ` SELECT uri, @@ -143,27 +151,35 @@ func (s *Store) GetButtons(limit int, cursor *string, ctx context.Context) ([]ty var rows pgx.Rows var err error if cursor != nil { - rows, err = s.pool.Query(ctx, query, limit, cursor) + rows, err = s.pool.Query(ctx, query, limit+1, cursor) } else { - rows, err = s.pool.Query(ctx, query, limit) + rows, err = s.pool.Query(ctx, query, limit+1) } if err != nil { if err == pgx.ErrNoRows { - return nil, time.Time{}, nil + return nil, nil, nil } - return nil, time.Time{}, err + return nil, nil, err } defer rows.Close() var buttons = make([]types.ButtonView, 0) - var postedAt time.Time + var postedAt *time.Time + i := 0 for rows.Next() { + i = i + 1 + if i == limit+1 { + break + } var btnView types.ButtonView err := rows.Scan(&btnView.URI, &btnView.CID, &btnView.DID, &btnView.Alt, &btnView.Title, &btnView.HREF, &postedAt) if err != nil { - return nil, time.Time{}, err + return nil, nil, err } buttons = append(buttons, btnView) } + if i != limit+1 { + postedAt = nil + } return buttons, postedAt, nil } diff --git a/handler/button.go b/handler/button.go index 0c1b52d..ee8e477 100644 --- a/handler/button.go +++ b/handler/button.go @@ -43,7 +43,7 @@ func (h *Handler) getButtons(w http.ResponseWriter, r *http.Request) { myresp.Cursor = nil } else { myresp.BtnViews = btnViews - myresp.Cursor = &ncursor + myresp.Cursor = ncursor } err = encoder.Encode(btnViews) if err != nil { -- 2.51.2