v1.1.0-beta.063 - feat: library-wide "All Issues" view (cursor-paginated, infinite scroll)
📅 New /library/issues page — every issue across the library by release date
- A new view listing INDIVIDUAL issues library-wide, ordered by release date (newest/oldest), filterable by era, publisher, library (comics/manga), download status, and a title search. Reached via an "All Issues" button on the library page. Reuses the library page's IntersectionObserver infinite scroll, debounced search, and reset-on-filter patterns. Only issues with a known release date are shown.
🚀 GET /api/library/issues — cursor (keyset) pagination, no offset / no COUNT
- The Issue table can be huge, so the endpoint avoids offset paging (O(offset) per page on SQLite) and a per-page COUNT(*): it orders by [releaseDate, id], over-fetches one row to derive hasMore, and pages forward by the last row's id — O(limit) at any scroll depth. Series-level filters (publisher / era / library + the per-library access gate) traverse the series relation; the payload is trimmed to grid fields with the server-side cover transform; the publisher list is returned only on the first page.
🗃️ Schema: @@index([seriesId, releaseDate]) on Issue
- Supports per-series releaseDate scans when the view is filtered by a Series field. Applies via db push on next container start.
✅ Verification
- tsc clean; eslint . 0 errors; vitest 282 passed; next build clean (/library/issues 6.8 kB)