Reading Progress

This commit is contained in:
Stefan Hardegger
2025-07-29 14:53:44 +02:00
parent 5746001c4a
commit 57859d7a84
6 changed files with 281 additions and 16 deletions

View File

@@ -69,6 +69,8 @@ CREATE TABLE stories (
volume INTEGER,
rating INTEGER CHECK (rating >= 1 AND rating <= 5),
cover_image_path VARCHAR(500), -- Phase 2: Consider storing base filename without size suffix
reading_position INTEGER DEFAULT 0, -- Character position for reading progress
last_read_at TIMESTAMP, -- Last time story was accessed
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
FOREIGN KEY (author_id) REFERENCES authors(id),
@@ -140,7 +142,7 @@ CREATE TABLE story_tags (
{"name": "summary", "type": "string", "optional": true},
{"name": "author_name", "type": "string"},
{"name": "content", "type": "string"},
{"name": "tags", "type": "string[]"},
{"name": "tagNames", "type": "string[]", "facet": true},
{"name": "series_name", "type": "string", "optional": true},
{"name": "word_count", "type": "int32"},
{"name": "rating", "type": "int32", "optional": true},
@@ -178,6 +180,7 @@ Query parameters:
- `tags` (string[]): Filter by tags
- `authorId` (uuid): Filter by author
- `seriesId` (uuid): Filter by series
- `facetBy` (string[]): Enable faceting for specified fields (e.g., ['tagNames'])
#### POST /api/stories
```json
@@ -223,6 +226,21 @@ Request:
}
```
#### POST /api/stories/{id}/reading-progress
```json
Request:
{
"position": 1250
}
Response:
{
"id": "uuid",
"readingPosition": 1250,
"lastReadAt": "2024-01-01T12:00:00Z"
}
```
### 4.3 Author Endpoints
#### GET /api/authors
@@ -300,7 +318,7 @@ Get all stories in a series ordered by volume
#### Story List View
- Grid/List toggle
- Search bar with real-time results
- Tag cloud for filtering
- Dynamic tag filtering with live story counts (faceted search)
- Sort options: Date added, Title, Author, Rating
- Pagination
- Cover image thumbnails in grid view
@@ -321,7 +339,9 @@ Get all stories in a series ordered by volume
- Clean, distraction-free interface
- Cover image display at the top (if available)
- Responsive typography
- Progress indicator
- Real-time reading progress indicator with visual progress bar
- Character-based position tracking with automatic saving
- Automatic scroll-to-position restoration on story reopen
- Navigation: Previous/Next in series
- Quick access to rate story
- Back to library button
@@ -468,6 +488,8 @@ Get all stories in a series ordered by volume
2. On story delete: Remove from index
3. Batch reindex endpoint for maintenance
4. Search includes: title, author, content, tags
5. Faceted search support for dynamic filtering
6. Tag facets provide real-time counts for library filtering
### 6.4 Security Considerations
@@ -567,11 +589,11 @@ APP_PASSWORD=application_password_here
## 9. Phase 2 Roadmap
### 9.1 URL Content Grabbing
### 9.1 URL Content Grabbing ✅ IMPLEMENTED
- Configurable scrapers for specific sites
- Site configuration stored in database
- Content extraction rules per site
- Image download and storage
- Site configuration stored in JSON files
- Content extraction rules per site (DeviantArt support added)
- Adaptive content extraction for varying HTML structures
### 9.2 Enhanced Image Processing & Optimization
- **Multi-size generation during upload**
@@ -623,7 +645,9 @@ APP_PASSWORD=application_password_here
- Search interface
### Milestone 4: Reading Experience (Week 6)
- Reading view implementation
- Reading view implementation with progress tracking
- Character-based reading position persistence
- Automatic position restoration
- Settings management
- Rating system