diff --git a/internal/storage/entry_pagination_builder.go b/internal/storage/entry_pagination_builder.go index 9779f245..6a7c5e8e 100644 --- a/internal/storage/entry_pagination_builder.go +++ b/internal/storage/entry_pagination_builder.go @@ -112,13 +112,13 @@ func (e *EntryPaginationBuilder) getPrevNextID(tx *sql.Tx) (prevID int64, nextID WITH entry_pagination AS ( SELECT e.id, - lag(e.id) over (order by e.%[1]s asc, e.id desc) as prev_id, - lead(e.id) over (order by e.%[1]s asc, e.id desc) as next_id + lag(e.id) over (order by e.%[1]s asc, e.created_at asc, e.id desc) as prev_id, + lead(e.id) over (order by e.%[1]s asc, e.created_at asc, e.id desc) as next_id FROM entries AS e JOIN feeds AS f ON f.id=e.feed_id JOIN categories c ON c.id = f.category_id WHERE %[2]s - ORDER BY e.%[1]s asc, e.id desc + ORDER BY e.%[1]s asc, e.created_at asc, e.id desc ) SELECT prev_id, next_id FROM entry_pagination AS ep WHERE %[3]s; ` diff --git a/internal/ui/bookmark_entries.go b/internal/ui/bookmark_entries.go index 8e31b4fd..fe13d528 100644 --- a/internal/ui/bookmark_entries.go +++ b/internal/ui/bookmark_entries.go @@ -26,6 +26,7 @@ func (h *handler) showStarredPage(w http.ResponseWriter, r *http.Request) { builder.WithoutStatus(model.EntryStatusRemoved) builder.WithStarred(true) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/category_entries.go b/internal/ui/category_entries.go index 25027c6c..b481faeb 100644 --- a/internal/ui/category_entries.go +++ b/internal/ui/category_entries.go @@ -37,6 +37,7 @@ func (h *handler) showCategoryEntriesPage(w http.ResponseWriter, r *http.Request builder := h.store.NewEntryQueryBuilder(user.ID) builder.WithCategoryID(category.ID) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithStatus(model.EntryStatusUnread) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/category_entries_all.go b/internal/ui/category_entries_all.go index 3068cfa1..0c735a29 100644 --- a/internal/ui/category_entries_all.go +++ b/internal/ui/category_entries_all.go @@ -37,6 +37,7 @@ func (h *handler) showCategoryEntriesAllPage(w http.ResponseWriter, r *http.Requ builder := h.store.NewEntryQueryBuilder(user.ID) builder.WithCategoryID(category.ID) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithoutStatus(model.EntryStatusRemoved) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/category_entries_starred.go b/internal/ui/category_entries_starred.go index 41f9bd46..5626eb1a 100644 --- a/internal/ui/category_entries_starred.go +++ b/internal/ui/category_entries_starred.go @@ -37,6 +37,7 @@ func (h *handler) showCategoryEntriesStarredPage(w http.ResponseWriter, r *http. builder := h.store.NewEntryQueryBuilder(user.ID) builder.WithCategoryID(category.ID) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithoutStatus(model.EntryStatusRemoved) builder.WithStarred(true) builder.WithOffset(offset) diff --git a/internal/ui/feed_entries.go b/internal/ui/feed_entries.go index 3d839216..288e2f38 100644 --- a/internal/ui/feed_entries.go +++ b/internal/ui/feed_entries.go @@ -38,6 +38,7 @@ func (h *handler) showFeedEntriesPage(w http.ResponseWriter, r *http.Request) { builder.WithFeedID(feed.ID) builder.WithStatus(model.EntryStatusUnread) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/feed_entries_all.go b/internal/ui/feed_entries_all.go index d0b8c499..f647f766 100644 --- a/internal/ui/feed_entries_all.go +++ b/internal/ui/feed_entries_all.go @@ -38,6 +38,7 @@ func (h *handler) showFeedEntriesAllPage(w http.ResponseWriter, r *http.Request) builder.WithFeedID(feed.ID) builder.WithoutStatus(model.EntryStatusRemoved) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/shared_entries.go b/internal/ui/shared_entries.go index 8fa6c07e..79e7f775 100644 --- a/internal/ui/shared_entries.go +++ b/internal/ui/shared_entries.go @@ -24,6 +24,7 @@ func (h *handler) sharedEntries(w http.ResponseWriter, r *http.Request) { builder := h.store.NewEntryQueryBuilder(user.ID) builder.WithShareCodeNotEmpty() builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/tag_entries_all.go b/internal/ui/tag_entries_all.go index a7f6fb02..b1765180 100644 --- a/internal/ui/tag_entries_all.go +++ b/internal/ui/tag_entries_all.go @@ -34,6 +34,7 @@ func (h *handler) showTagEntriesAllPage(w http.ResponseWriter, r *http.Request) builder.WithTags([]string{tagName}) builder.WithSorting("status", "asc") builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) diff --git a/internal/ui/unread_entries.go b/internal/ui/unread_entries.go index c962f70e..f7f8ce90 100644 --- a/internal/ui/unread_entries.go +++ b/internal/ui/unread_entries.go @@ -45,6 +45,7 @@ func (h *handler) showUnreadPage(w http.ResponseWriter, r *http.Request) { builder = h.store.NewEntryQueryBuilder(user.ID) builder.WithStatus(model.EntryStatusUnread) builder.WithSorting(user.EntryOrder, user.EntryDirection) + builder.WithSorting("id", user.EntryDirection) builder.WithOffset(offset) builder.WithLimit(user.EntriesPerPage) builder.WithGloballyVisible()