tiny 88x31 lexicon for atproto

i think this should improve cursors on getButtons

+29 -13
+28 -12
db/lexicon.go
··· 9 "time" 10 ) 11 12 - func (s *Store) GetButtonsAuth(limit int, cursor *string, ctx context.Context, did string) ([]types.ButtonViewAuth, time.Time, error) { 13 query := ` 14 SELECT 15 b.uri, ··· 43 } 44 if err != nil { 45 if err == pgx.ErrNoRows { 46 - return nil, time.Time{}, nil 47 } 48 - return nil, time.Time{}, err 49 } 50 defer rows.Close() 51 var buttons = make([]types.ButtonViewAuth, 0) 52 - var postedAt time.Time 53 for rows.Next() { 54 var btnView types.ButtonViewAuth 55 err := rows.Scan(&btnView.URI, &btnView.DID, &btnView.Alt, &btnView.Title, &btnView.HREF, &postedAt, &btnView.Liked) 56 if err != nil { 57 - return nil, time.Time{}, err 58 } 59 buttons = append(buttons, btnView) 60 } 61 return buttons, postedAt, nil 62 } ··· 120 return buttons, postedAt, nil 121 } 122 123 - func (s *Store) GetButtons(limit int, cursor *string, ctx context.Context) ([]types.ButtonView, time.Time, error) { 124 query := ` 125 SELECT 126 uri, ··· 143 var rows pgx.Rows 144 var err error 145 if cursor != nil { 146 - rows, err = s.pool.Query(ctx, query, limit, cursor) 147 } else { 148 - rows, err = s.pool.Query(ctx, query, limit) 149 } 150 if err != nil { 151 if err == pgx.ErrNoRows { 152 - return nil, time.Time{}, nil 153 } 154 - return nil, time.Time{}, err 155 } 156 defer rows.Close() 157 var buttons = make([]types.ButtonView, 0) 158 - var postedAt time.Time 159 for rows.Next() { 160 var btnView types.ButtonView 161 err := rows.Scan(&btnView.URI, &btnView.CID, &btnView.DID, &btnView.Alt, &btnView.Title, &btnView.HREF, &postedAt) 162 if err != nil { 163 - return nil, time.Time{}, err 164 } 165 buttons = append(buttons, btnView) 166 } 167 return buttons, postedAt, nil 168 }
··· 9 "time" 10 ) 11 12 + func (s *Store) GetButtonsAuth(limit int, cursor *string, ctx context.Context, did string) ([]types.ButtonViewAuth, *time.Time, error) { 13 query := ` 14 SELECT 15 b.uri, ··· 43 } 44 if err != nil { 45 if err == pgx.ErrNoRows { 46 + return nil, nil, nil 47 } 48 + return nil, nil, err 49 } 50 defer rows.Close() 51 var buttons = make([]types.ButtonViewAuth, 0) 52 + var postedAt *time.Time 53 + i := 0 54 for rows.Next() { 55 + i = i + 1 56 + if i == limit+1 { 57 + break 58 + } 59 var btnView types.ButtonViewAuth 60 err := rows.Scan(&btnView.URI, &btnView.DID, &btnView.Alt, &btnView.Title, &btnView.HREF, &postedAt, &btnView.Liked) 61 if err != nil { 62 + return nil, nil, err 63 } 64 buttons = append(buttons, btnView) 65 + } 66 + if i != limit+1 { 67 + postedAt = nil 68 } 69 return buttons, postedAt, nil 70 } ··· 128 return buttons, postedAt, nil 129 } 130 131 + func (s *Store) GetButtons(limit int, cursor *string, ctx context.Context) ([]types.ButtonView, *time.Time, error) { 132 query := ` 133 SELECT 134 uri, ··· 151 var rows pgx.Rows 152 var err error 153 if cursor != nil { 154 + rows, err = s.pool.Query(ctx, query, limit+1, cursor) 155 } else { 156 + rows, err = s.pool.Query(ctx, query, limit+1) 157 } 158 if err != nil { 159 if err == pgx.ErrNoRows { 160 + return nil, nil, nil 161 } 162 + return nil, nil, err 163 } 164 defer rows.Close() 165 var buttons = make([]types.ButtonView, 0) 166 + var postedAt *time.Time 167 + i := 0 168 for rows.Next() { 169 + i = i + 1 170 + if i == limit+1 { 171 + break 172 + } 173 var btnView types.ButtonView 174 err := rows.Scan(&btnView.URI, &btnView.CID, &btnView.DID, &btnView.Alt, &btnView.Title, &btnView.HREF, &postedAt) 175 if err != nil { 176 + return nil, nil, err 177 } 178 buttons = append(buttons, btnView) 179 + } 180 + if i != limit+1 { 181 + postedAt = nil 182 } 183 return buttons, postedAt, nil 184 }
+1 -1
handler/button.go
··· 43 myresp.Cursor = nil 44 } else { 45 myresp.BtnViews = btnViews 46 - myresp.Cursor = &ncursor 47 } 48 err = encoder.Encode(btnViews) 49 if err != nil {
··· 43 myresp.Cursor = nil 44 } else { 45 myresp.BtnViews = btnViews 46 + myresp.Cursor = ncursor 47 } 48 err = encoder.Encode(btnViews) 49 if err != nil {