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

127 lines
4.1 KiB
Markdown

# 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