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
4.1 KiB
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
- Update integration tests (rename Ebooks → MediaItems)
- Remove ebook test cases, add admin media-item tests
- Rebuild containers
- Run all tests
- 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