feat(history): report personal new-chapter count on read-progress list
Add `new_chapters_count` to each `GET /me/read-progress` item: how many chapters sit past the reader's last-read chapter, computed by a correlated subquery on chapter number. It is 0 when the reader is caught up, and 0 when the last-read chapter is unknown (manga-level progress or a deleted chapter) so we never over-claim. (manga_id, number) is non-unique, so this counts positions past the reader rather than distinct files. Backs the personal "new since last read" indicator on the upcoming Continue-reading shelf. Tests cover the mid-series, caught-up, and no-read-chapter cases. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -26,6 +26,12 @@ pub struct ReadProgressSummary {
|
||||
pub chapter_number: Option<i32>,
|
||||
pub page: i32,
|
||||
pub updated_at: DateTime<Utc>,
|
||||
/// How many chapters sit past the reader's last-read chapter (by
|
||||
/// chapter number) — a personal "new since you last read" count.
|
||||
/// `0` when the reader is caught up or when `chapter_number` is
|
||||
/// unknown (manga-level progress or a deleted chapter), so we never
|
||||
/// claim chapters are new when we can't place the reader.
|
||||
pub new_chapters_count: i64,
|
||||
}
|
||||
|
||||
/// Returned by `GET /me/read-progress/:manga_id`. Same shape as
|
||||
|
||||
@@ -132,7 +132,21 @@ pub async fn list_for_user(
|
||||
rp.chapter_id,
|
||||
c.number AS chapter_number,
|
||||
rp.page,
|
||||
rp.updated_at
|
||||
rp.updated_at,
|
||||
-- Personal "new since last read": chapters numbered past the
|
||||
-- reader's last-read chapter. `c.number` is NULL for
|
||||
-- manga-level progress or a deleted chapter, in which case
|
||||
-- the guard yields 0 rather than counting every chapter.
|
||||
-- (manga_id, number) is non-unique — translations share a
|
||||
-- number — so this counts positions past the reader, not
|
||||
-- distinct files.
|
||||
COALESCE((
|
||||
SELECT count(*)
|
||||
FROM chapters c2
|
||||
WHERE c2.manga_id = rp.manga_id
|
||||
AND c.number IS NOT NULL
|
||||
AND c2.number > c.number
|
||||
), 0) AS new_chapters_count
|
||||
FROM read_progress rp
|
||||
JOIN mangas m ON m.id = rp.manga_id
|
||||
LEFT JOIN chapters c ON c.id = rp.chapter_id
|
||||
|
||||
Reference in New Issue
Block a user