[server] Allow fetching incremental bookmarks

This commit is contained in:
Abhishek Shroff
2025-05-28 00:23:53 +05:30
parent c2cc2dd66a
commit dbeb2c5be4
4 changed files with 17 additions and 10 deletions
+2 -2
View File
@@ -39,7 +39,7 @@ func setupBookmarksRoutes(r *gin.RouterGroup) {
func handleBookmarksGetRoute(c *gin.Context) {
u := authenticator.GetUser(c)
res, err := user.ManagerFromContext(c.Request.Context()).ListBookmarks(u)
res, err := user.ManagerFromContext(c.Request.Context()).ListBookmarks(u, 0)
if err != nil {
panic(err)
}
@@ -54,7 +54,7 @@ func handleBookmarksGetRoute(c *gin.Context) {
}
c.JSON(200, bookmarksResponse{
Bookmarks: bookmarks,
Until: time.Now().UnixMilli(),
Until: time.Now().UnixMilli() - 100,
})
}
@@ -36,7 +36,7 @@ func setupListCommand() *cobra.Command {
fmt.Println("unable to list bookmarks: user not specified")
os.Exit(1)
}
if bookmarks, err := user.ManagerFromContext(context.Background()).ListBookmarks(*u); err != nil {
if bookmarks, err := user.ManagerFromContext(context.Background()).ListBookmarks(*u, 0); err != nil {
fmt.Println("unable to list bookmark: " + err.Error())
os.Exit(1)
} else {
+13 -6
View File
@@ -1,6 +1,7 @@
package user
import (
"strings"
"time"
"github.com/google/uuid"
@@ -61,14 +62,20 @@ func (m manager) RemoveBookmark(u User, id uuid.UUID) error {
return err
}
func (m manager) ListBookmarks(u User) ([]Bookmark, error) {
const q = `SELECT resource_id, name, dir, created
func (m manager) ListBookmarks(u User, since int64) ([]Bookmark, error) {
sb := strings.Builder{}
sb.WriteString(`SELECT resource_id, name, dir, created
FROM bookmarks b
WHERE user_id = $1::INT
AND deleted IS NULL
ORDER BY modified DESC`
WHERE user_id = @user_id::INT
`)
if since == 0 {
sb.WriteString("AND deleted IS NULL\n")
} else {
sb.WriteString("AND modified >= @since::TIMESTAMP\n")
}
sb.WriteString("ORDER BY modified DESC")
if rows, err := m.db.Query(q, u.ID); err != nil {
if rows, err := m.db.Query(sb.String(), pgx.NamedArgs{"user_id": u.ID, "since": time.UnixMilli(since).UTC()}); err != nil {
return nil, err
} else if bookmarks, err := pgx.CollectRows(rows, scanBookmark); err != nil {
return nil, err
+1 -1
View File
@@ -60,5 +60,5 @@ type Manager interface {
// bookmarks.go
AddBookmark(u User, resource fs.Resource, name string) (Bookmark, error)
RemoveBookmark(u User, id uuid.UUID) error
ListBookmarks(u User) ([]Bookmark, error)
ListBookmarks(u User, since int64) ([]Bookmark, error)
}