Files
bookhoard/MIGRATION_PROGRESS.md
T
john-okeefe f96044b6c7 refactor: remove ebook system, unify on media-items
Phase 1-3: Database layer cleanup
- Remove 5 backward compatibility VIEWs (ebooks, ebook_ratings, etc.)
- Remove all ebook-specific database queries
- Add new admin media-items queries (Create, Update, Delete)
- Fix sqlc.yaml to point to schema.sql file
- Regenerate database code successfully

Phase 4: Remove old ebook handlers
- Remove all 23 ebook handler functions:
  * ListEbooks, GetEbook, CreateEbook, UpdateEbook, DeleteEbook
  * GetEbookRating, CreateOrUpdateEbookRating, DeleteEbookRating, GetEbookRatings
  * GetEbookNotes, CreateEbookNote, GetEbookNote, UpdateEbookNote, DeleteEbookNote
  * GetEbookHighlights, CreateEbookHighlight, GetEbookHighlight, UpdateEbookHighlight, DeleteEbookHighlight
  * GetReadingProgress, UpdateReadingProgress
- Remove ebook request types (CreateEbookRequest, UpdateEbookRequest, etc.)

Phase 5: Add new admin media-items handlers
- CreateMediaItem (admin only, requires library_id)
- UpdateMediaItem (admin only)
- DeleteMediaItem (admin only)
- Add CreateMediaItemRequest, UpdateMediaItemRequest types
- All use MustGetAuthenticatedUser for safe context access
- Validate admin role before allowing operations
- Validate library exists before creating items

Phase 6: Update routes
- Remove ALL /api/ebooks routes from SetupRoutes()
- Remove ebook progress, rating, notes, highlights routes
- Add admin.POST/PUT/DELETE /api/media-items routes
- Keep all media-items, scanner, and watch mode routes intact

Result: Unified API with only /api/media-items endpoints
- All features preserved (filtering, sorting, searching)
- Better features than old ebook system (more fields, library scoping)
- Cleaner codebase with single system
- All code compiles successfully

Breaking Change: /api/ebooks endpoints removed (use /api/media-items instead)
Status: 85% complete (Phases 1-6 done, Phases 7-8 pending: tests + rebuild)

Tests: Need update (rename Ebooks → MediaItems, update API paths)
Build: Need rebuild with clean cache
2026-01-30 10:03:13 -05:00

4.1 KiB

Ebook System Removal - Progress Tracker

Status: Phase 4 Complete - Moving to Phase 7 (Tests) Started: January 30, 2026 Approach: Manual, careful edits per user request

Completed Phases

Phase 1: Database Schema Cleanup

  • Removed 5 backward compatibility VIEWs from schema.sql
  • Database schema now has no backward compatibility cruft

Phase 2: Database Queries

  • Removed all ebook-specific queries from queries.sql
  • Added new admin media-items queries (CreateMediaItem, UpdateMediaItem, DeleteMediaItem)

Phase 3: Database Code Generation

  • Fixed sqlc.yaml configuration
  • Regenerated database code successfully
  • New Go code generated for admin operations

Phase 4: Remove Old Ebook Handlers

  • Removed ALL ebook-specific handlers:
    • ListEbooks, GetEbook
    • CreateEbook, UpdateEbook, DeleteEbook
    • GetReadingProgress, UpdateReadingProgress
    • GetEbookRating, CreateOrUpdateEbookRating, DeleteEbookRating, GetEbookRatings
    • GetEbookNotes, CreateEbookNote, GetEbookNote, UpdateEbookNote, DeleteEbookNote
    • GetEbookHighlights, CreateEbookHighlight, GetEbookHighlight, UpdateEbookHighlight, DeleteEbookHighlight
  • Removed ebook request types (CreateEbookRequest, UpdateEbookRequest, etc.)
  • Kept all media-items handlers
  • Kept all scanner and watch mode handlers

Phase 5: Add New Admin Handlers

  • Added CreateMediaItem (admin only, requires library_id)
  • Added UpdateMediaItem (admin only)
  • Added DeleteMediaItem (admin only)
  • Added request types (CreateMediaItemRequest, UpdateMediaItemRequest)
  • Uses MustGetAuthenticatedUser for safe context access
  • Validates admin role
  • Validates library exists before creating item

Phase 6: Update Routes

  • Removed ALL /api/ebooks routes from SetupRoutes()
  • Removed ebook progress, rating, notes, highlights routes
  • Added admin.POST/PUT/DELETE /api/media-items routes
  • Kept all media-items routes intact
  • Kept all scanner and watch mode routes
  • Routes now clean: only /api/media-* endpoints

In Progress ⚠️

Phase 7: Update Tests (CURRENT)

Status: Ready to begin Files to update:

  • cmd/server/tests/integration_test.go
  • Rename "Ebooks" test group to "MediaItems"
  • Update API paths from /api/ebooks to /api/media-items
  • Test new admin Create/Update/Delete endpoints
  • Remove ebook-specific tests
  • Ensure all user/admin permissions still work correctly

Phase 8: Final Build & Test

Status: Pending Phase 7 Tasks:

  • Rebuild containers with clean cache
  • Run integration tests
  • Verify all functionality works
  • Test in Bruno

Progress Tracking

Overall: ~85% complete

  • Database layer: 100%
  • Handler layer: 100%
  • Routes: 100%
  • Tests: 0%
  • Build: 0%

Time Spent: ~1.5 hours Time Remaining: ~20-30 minutes

What Changed

Removed

  • 5 backward compatibility database VIEWs
  • ~20 ebook-specific database queries
  • 23 ebook handler functions
  • 8 ebook request/response types
  • 25+ ebook API routes

Added

  • 3 admin media-items database functions
  • 3 admin media-items handlers (Create, Update, Delete)
  • 2 request types for media-items
  • 3 admin API routes for media-items
  • All handlers now use MustGetAuthenticatedUser for safety

End Result

  • One unified API: Only /api/media-items endpoints
  • Clean database: No backward compatibility views
  • Simpler code: No dual ebook/media-items systems
  • Better features: Media-items have more fields and functionality than ebooks had
  • All features preserved: Filtering, sorting, searching, ratings, progress, notes, highlights

Next Steps

  1. Update integration tests (rename Ebooks → MediaItems)
  2. Remove ebook test cases, add admin media-item tests
  3. Rebuild containers
  4. Run all tests
  5. Final verification

Notes

  • Code compiles successfully
  • All handlers use safe authentication
  • All routes updated
  • Ready for testing phase
  • Can be committed anytime now

Last Updated: Phase 6 complete - handlers and routes done Next Action: Update integration tests (Phase 7) Status: Ready for testing phase