From 766fca2c3961982af9192fb8a4a84783def67d77 Mon Sep 17 00:00:00 2001 From: hiperman Date: Fri, 12 Dec 2025 14:19:16 -0500 Subject: [PATCH] Update BookProgress model and schemas Updated book progress model in anticipation of the KOReader sync feature. Renamed properties: - renamed "progress" to "percentage" - renamed "pdf_loc" to "pdf_page" - renamed "epub_loc" to "epub_cfi" New properties: - "epub_xpointer", marks the location of an epub in KOReader - "device", the device type that updated the progress - "device_id", the id of the device that updated the progress --- .../chitai/database/models/book_progress.py | 10 +++++++--- backend/src/chitai/schemas/book.py | 18 ++++++++++++------ .../lib/components/reader/epub-reader.svelte | 4 ++-- .../lib/components/view/book-thumbnail.svelte | 4 ++-- .../(library)/book/[bookId]/+page.svelte | 4 ++-- 5 files changed, 25 insertions(+), 15 deletions(-) diff --git a/backend/src/chitai/database/models/book_progress.py b/backend/src/chitai/database/models/book_progress.py index 23c2fc4..580fab2 100644 --- a/backend/src/chitai/database/models/book_progress.py +++ b/backend/src/chitai/database/models/book_progress.py @@ -14,7 +14,11 @@ class BookProgress(BigIntAuditBase): book_id: Mapped[int] = mapped_column( ForeignKey("books.id", ondelete="cascade"), nullable=False ) - epub_loc: Mapped[Optional[str]] - pdf_loc: Mapped[Optional[int]] - progress: Mapped[float] + + epub_cfi: Mapped[Optional[str]] + epub_xpointer: Mapped[Optional[str]] + pdf_page: Mapped[Optional[int]] + percentage: Mapped[float] completed: Mapped[Optional[bool]] + device: Mapped[Optional[str]] # Device that updated the progress + device_id: Mapped[Optional[str]] diff --git a/backend/src/chitai/schemas/book.py b/backend/src/chitai/schemas/book.py index 54e4bcd..eea0250 100644 --- a/backend/src/chitai/schemas/book.py +++ b/backend/src/chitai/schemas/book.py @@ -161,14 +161,20 @@ class BookMetadataUpdate(BaseModel): class BookProgressCreate(BaseModel): - progress: float - epub_loc: str | None = None - pdf_loc: int | None = None + percentage: float + epub_cfi: str | None = None + epub_xpointer: str | None = None + pdf_page: int | None = None completed: bool | None = None + device_type: str | None = None + device_id: str | None = None class BookProgressRead(BaseModel): - progress: float - epub_loc: str | None = None - pdf_loc: int | None = None + percentage: float + epub_cfi: str | None = None + epub_xpointer: str | None = None + pdf_page: int | None = None completed: bool | None = False + device_type: str | None = None + device_id: str | None = None diff --git a/frontend/src/lib/components/reader/epub-reader.svelte b/frontend/src/lib/components/reader/epub-reader.svelte index dc40bb1..cb88d22 100644 --- a/frontend/src/lib/components/reader/epub-reader.svelte +++ b/frontend/src/lib/components/reader/epub-reader.svelte @@ -79,8 +79,8 @@ await fetch(`/api/books/progress/${bookId}`, { method: 'POST', body: JSON.stringify({ - progress: currentProgress, - epub_loc: currentLocation, + percentage: currentProgress, + epub_cfi: currentLocation, completed: currentProgress === 1 }) }); diff --git a/frontend/src/lib/components/view/book-thumbnail.svelte b/frontend/src/lib/components/view/book-thumbnail.svelte index f5044b6..2cd3a9b 100644 --- a/frontend/src/lib/components/view/book-thumbnail.svelte +++ b/frontend/src/lib/components/view/book-thumbnail.svelte @@ -38,9 +38,9 @@ : ''}" /> - {#if book.progress?.progress && !selected && !darkened} + {#if book.progress?.percentage && !selected && !darkened} - {#if book?.progress?.progress} + {#if book?.progress?.percentage}