Skip to content

feat: Per-user Hardcover list/status sync (issue #60)#71

Merged
boludo00 merged 2 commits intodevelopfrom
feature/hardcover-list-sync
Mar 3, 2026
Merged

feat: Per-user Hardcover list/status sync (issue #60)#71
boludo00 merged 2 commits intodevelopfrom
feature/hardcover-list-sync

Conversation

@boludo00
Copy link
Copy Markdown
Owner

@boludo00 boludo00 commented Mar 2, 2026

Summary

  • Adds per-user Hardcover API token storage (encrypted) so each user can link their own account
  • Background job (sync_hardcover_lists) runs every 6h to auto-request books from each user's configured sources
  • Users can sync from their "Want to Read" status and/or any custom lists
  • Respects existing per-user permissions (can_request_ebook, can_request_audiobook, auto_approve_*)
  • New Hardcover Sync card on the Profile page for self-service configuration

Backend changes

  • backend/alembic/versions/036_add_user_hardcover_sync.py — migration for user_hardcover_sync table
  • backend/app/models.pyUserHardcoverSync model
  • backend/app/routers/hardcover_sync.py — new router: GET/PUT /api/hardcover-sync/config, GET /api/hardcover-sync/lists, POST /api/hardcover-sync/run
  • backend/app/tasks.pysync_hardcover_lists_for_user(user_id) and sync_hardcover_lists() global job
  • backend/app/scheduler.py + backend/app/routers/jobs.py — register job with 6h default interval
  • backend/main.py — register new router

Frontend changes

  • src/lib/api.tshardcoverSyncApi client + HardcoverSyncConfig / HardcoverList types
  • src/pages/Profile.tsx — Hardcover Sync card with token input, enable toggle, to-read toggle, list multi-select, format picker, last-synced display, and manual Sync Now button

Test plan

  • Set a Hardcover API token on the Profile page — confirm it saves (masked) and the lists dropdown populates
  • Enable sync and trigger "Sync Now" — confirm books are added to Requests
  • Verify books already requested are not duplicated
  • Confirm "both" format creates two requests (ebook + audiobook)
  • Trigger the scheduler job via Jobs admin page and confirm per-user sync fires
  • Remove token — confirm sync disables automatically

boludo00 added 2 commits March 2, 2026 11:55
Users can now link their own Hardcover API token and configure which
sources to watch (to-read status and/or custom lists). A background
job (every 6h) auto-requests any new books found for all enabled users.

- Add UserHardcoverSync model and migration (036)
- Add /api/hardcover-sync router (GET/PUT config, GET lists, POST run)
- Add sync_hardcover_lists and sync_hardcover_lists_for_user tasks
- Register sync_hardcover_lists as a scheduled job (6h default)
- Respects per-user permissions and auto-approve settings
- Frontend: Hardcover Sync card on Profile page with token input,
  toggles for to-read/lists, format preference, and manual sync button
Users no longer need to re-enter the app-wide Hardcover API token on
their profile. The sync feature uses the global token automatically
and shows 'Using app-wide Hardcover token' in the UI. A personal token
is still accepted as an optional override for multi-user setups where
different users have different Hardcover accounts.
@boludo00 boludo00 merged commit 2853ad4 into develop Mar 3, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant