feat: add highlights and notes annotation system

This major update implements a complete user annotation system:

## 🎯 New Features
- User notes with position tracking for media items
- Text highlighting with customizable colors
- Highlight-note associations for detailed annotations
- Full CRUD API for both notes and highlights
- Backward compatibility with existing ebook endpoints

## 📊 Database Changes
- Add media_notes table (id, media_item_id, user_id, content, position, timestamps)
- Add media_highlights table (id, media_item_id, user_id, selection_text, start/end_position, color, optional note_id)
- Add foreign key relationships with CASCADE deletes
- Add proper indexes for performance
- Add database schema views for ebook backward compatibility

## 🔧 API Implementation
- Complete REST API endpoints for notes and highlights
- JWT authentication with proper middleware bypass
- Request validation with meaningful error responses
- UUID validation and type safety
- Support for hex color codes in highlights

## 🧪 Testing & Documentation
- Comprehensive test suite covering authentication scenarios
- Bruno API collection for manual testing
- Detailed testing guide with troubleshooting
- Updated documentation in README and TESTING.md

## 📁 Backward Compatibility
- Existing ebook endpoints continue working
- Database views maintain API contracts
- No breaking changes for existing integrations

The annotation system is now fully functional and ready for production use.
This commit is contained in:
2026-01-28 17:12:40 -05:00
parent c76f745df7
commit 935b867219
50 changed files with 982 additions and 23 deletions
Binary file not shown.

After

Width:  |  Height:  |  Size: 134 KiB

@@ -0,0 +1,27 @@
<?xml version='1.0' encoding='utf-8'?>
<package xmlns="http://www.idpf.org/2007/opf" unique-identifier="uuid_id" version="2.0">
<metadata xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:opf="http://www.idpf.org/2007/opf">
<dc:identifier opf:scheme="calibre" id="calibre_id">1278</dc:identifier>
<dc:identifier opf:scheme="uuid" id="uuid_id">6e406f93-3499-4b1a-8a47-80b4cf3d2920</dc:identifier>
<dc:title>Wuthering Heights</dc:title>
<dc:creator opf:file-as="Brontë, Emily" opf:role="aut">Emily Brontë</dc:creator>
<dc:contributor opf:file-as="calibre" opf:role="bkp">calibre (8.16.2) [https://calibre-ebook.com]</dc:contributor>
<dc:date>1996-12-02T00:00:00+00:00</dc:date>
<dc:language>eng</dc:language>
<dc:subject>Revenge -- Fiction</dc:subject>
<dc:subject>Psychological fiction</dc:subject>
<dc:subject>Rejection (Psychology) -- Fiction</dc:subject>
<dc:subject>Love stories</dc:subject>
<dc:subject>Domestic fiction</dc:subject>
<dc:subject>Yorkshire (England) -- Fiction</dc:subject>
<dc:subject>Foundlings -- Fiction</dc:subject>
<dc:subject>Rural families -- Fiction</dc:subject>
<dc:subject>Heathcliff (Fictitious character : Brontë) -- Fiction</dc:subject>
<dc:subject>Triangles (Interpersonal relations) -- Fiction</dc:subject>
<meta name="calibre:timestamp" content="2026-01-26T18:33:43.337561+00:00"/>
<meta name="calibre:title_sort" content="Wuthering Heights"/>
</metadata>
<guide>
<reference type="cover" title="Cover" href="cover.jpg"/>
</guide>
</package>